Type a page name and press Enter. You'll jump to the page if it exists, or you can create it if it doesn't.
To create a page in a module other than netapi32, prefix the name with the module name and a period.
NetGetJoinInformation (netapi32)
.
C# Signature:
[DllImport("Netapi32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
static extern int NetGetJoinInformation(
string server,
[In,MarshalAs(UnmanagedType.LPWStr)] string server,
out IntPtr domain,
out NetJoinStatus status);
VB Signature:
Private Declare Unicode Function NetGetJoinInformation Lib "Netapi32.dll" ( _
ByVal lpServer As String, _
ByRef lpNameBuffer As IntPtr, _
ByRef bufferType As NETSETUP_JOIN_STATUS) _
As NET_API_STATUS
C# User-Defined Types:
// Win32 Result Code Constant
const int ErrorSuccess = 0;
However, this throws an exception (undocumented) on some PC's ("Logon failure") which pretty much renders it useless. Bummer.
Notes:
The buffer pointed to by lpNameBuffer (or domain in the C# signature) must be freed using the NetApiBufferFree function.
Tips & Tricks:
Please add some!
C# Sample Code:
[DllImport("Netapi32.dll")]
static extern int NetApiBufferFree(IntPtr Buffer);
// Returns the domain name the computer is joined to, or "" if not joined.
public static string GetJoinedDomain()
{
int result = 0;
string domain = null;
IntPtr pDomain = IntPtr.Zero;
NetJoinStatus status = NetJoinStatus.NetSetupUnknownStatus;
try
{
result = NetGetJoinInformation(null, out pDomain, out status);
if (result == ErrorSuccess &&
status == NetJoinStatus.NetSetupDomainName)
{
domain = Marshal.PtrToStringAuto(pDomain);
domain = Marshal.PtrToStringUni(pDomain);
}
}
finally
{
if (pDomain != IntPtr.Zero) NetApiBufferFree(pDomain);
}
if (domain == null) domain = "";
return domain;
}
VB Sample Code
Imports System.Runtime.InteropServices
Public Structure NetGroupInformation
Public GroupType As NETSETUP_JOIN_STATUS
Public GroupName As String
End Structure
Public Enum NET_API_STATUS As UInteger
NERR_Success = 0
ERROR_NOT_ENOUGH_MEMORY = 8
End Enum
Public Enum NETSETUP_JOIN_STATUS As UInteger
NetSetupUnknownStatus = 0
NetSetupUnjoined
NetSetupWorkgroupName
NetSetupDomainName
End Enum
Public Class NetAPI
Private Declare Unicode Function NetGetJoinInformation Lib "Netapi32.dll" ( _
ByVal lpServer As String, _
ByRef lpNameBuffer As IntPtr, _
ByRef bufferType As NETSETUP_JOIN_STATUS) _
As NET_API_STATUS
Private Declare Function NetApiBufferFree Lib "Netapi32.dll" _
(ByVal lpBuffer As IntPtr) As NET_API_STATUS
Shared Function GetGroupInformation _
(Optional ByVal ComputerName As String = vbNullString) As NetGroupInformation
Dim status As NET_API_STATUS
Dim bufPtr As IntPtr
Dim groupInfo As NetGroupInformation = Nothing
Try
status = NetGetJoinInformation(ComputerName, bufPtr, groupInfo.GroupType)
If status = NET_API_STATUS.NERR_Success Then
groupInfo.GroupName = Marshal.PtrToStringAuto(bufPtr)
groupInfo.GroupName = Marshal.PtrToStringUni(bufPtr)
End If
Finally
If Not bufPtr = IntPtr.Zero Then NetApiBufferFree(bufPtr)
End Try
GetGroupInformation = groupInfo
End Function
End Class
The NetGetJoinInformation function retrieves join status information for the specified computer.
4/9/2008 11:33:27 AM - -198.76.24.139
NET_API_STATUS consists of the error codes returned by the Network Management API functions (netapi32.dll).
11/8/2021 5:53:34 PM - -82.102.25.226
Frees the memory allocated by network management functions.
6/21/2016 8:26:32 AM - -63.226.251.37
Please edit this page!
Do you have...
helpful tips or sample code to share for using this API in managed code?
corrections to the existing content?
variations of the signature you want to share?
additional languages you want to include?
Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).