|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Want a new Job?
Chapters
Services
Feature Zones
|
Introduction
The sample code below shows the API's and code necessary to enumerate the servers
on a domain. The ServerType enum determines the filter for the NetServerEnum call.
public enum ServerTypeEnum { steNone = 0, steWorkstation = 0x00000001, steAll = 0x00000002, steSQLServer = 0x00000004, steDomainController = 0x00000008 } [sysimport(dll="netapi32.dll")] private static extern void NetApiBufferFree([marshal(UnmanagedType.U4)]uint bufptr); [sysimport(dll="netapi32.dll")] unsafe private static extern uint NetServerEnum([marshal(UnmanagedType.LPWStr)] string ServerName, uint level, [marshal(UnmanagedType.LPVoid)]uint* bufptr, uint prefmaxlen, ref uint entriesread, ref uint totalentries, uint servertype, [marshal(UnmanagedType.LPWStr)] string domain, uint resume_handle); [System.Runtime.InteropServices.StructLayoutAttribute (LayoutKind.Sequential, CharSet=CharSet.Auto)] public struct SERVER_INFO_101 { public int dwPlatformID; public int lpszServerName; public int dwVersionMajor; public int dwVersionMinor; public int dwType; public int lpszComment; } protected void GetServers() { string servername = null; string domain = "YourDomainName"; uint level = 101, prefmaxlen = 0xFFFFFFFF, entriesread = 0, totalentries = 0, resume_handle = 0; cboServers.Items.Clear(); unsafe { //get a pointer to the server info structure SERVER_INFO_101* si = null; SERVER_INFO_101* pTmp; //temp pointer for use when looping //through returned (pointer) array //this api requires a pointer to a byte array... //which is actually a pointer to an array of SERVER_INFO_101 structures //If the domain parameter is NULL, the primary domain is implied. uint nRes = NetServerEnum(servername, level, (uint *) &si, prefmaxlen, ref entriesread, ref totalentries, (uint)_ServerType, domain, resume_handle); if (nRes == 0) { if ((pTmp = si) != null) //assign the temp pointer { for (int i = 0; i < entriesread; i++) //loop through the entries { try { //the lpszServerName member of the structure contains a pointer to //the server name string...marshal the pointer from unmanaged //memory to a managed string cboServers.Items.Add(Marshal.PtrToStringAuto(pTmp->lpszServerName)); } catch (Exception e) { MessageBox.Show(e.Message) ; } pTmp++; // increment the pointer...essentially move to the next // structure in the array } } } NetApiBufferFree((uint)si); } } History30 May 2002 - updated source files
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||