WTSEnumerateServers (wtsapi32)
Last changed: anonymous

.
Summary
WTSEnumerateServers - Enumerate all Terminal Servers in a given Domain.

C# Signature:

[DllImport("wtsapi32.dll", SetLastError=true)]
public static extern bool WTSEnumerateServers(
   String pDomainName,
   int Reserved,
   int Version,
   ref IntPtr ppServerInfo,
   ref uint pCount
);

VB Signature:

Declare Function WTSEnumerateServers Lib "wtsapi32.dll" (TODO) As TODO

User-Defined Types:

None.

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

There is so few documents on using WTSEnumerateServers, and even fewer using it from managed code.

Tips & Tricks:

Please add some!

Sample Code:

    [DllImport("wtsapi32.dll", SetLastError=true)]
    public static extern bool WTSEnumerateServers(
        String pDomainName,
        int Reserved,
        int Version,
        ref IntPtr ppServerInfo,
        ref uint pCount
    );
    [DllImport("wtsapi32.dll")]
    static extern void WTSFreeMemory(IntPtr pMemory);
    [StructLayout(LayoutKind.Sequential)]
    public struct WTS_SERVER_INFO
    {
        [MarshalAs(UnmanagedType.LPStr)]public String pServerName;
    }
    static void Main(string[] args)
    {
        IntPtr pInfo = IntPtr.Zero;
        uint count = 0;
        Int32 dataSize = Marshal.SizeOf(typeof(WTS_SERVER_INFO));
        if (WTSEnumerateServers(null, 0, 1, ref pInfo, ref count))
        {
        Int64 current = (int)pInfo;
        for (int i = 0; i < count; i++)
        {
            WTS_SERVER_INFO WTScsi = (WTS_SERVER_INFO)Marshal.PtrToStructure((IntPtr)current, typeof(WTS_SERVER_INFO));
            current += dataSize;
            String sname = WTScsi.pServerName;
            Console.WriteLine(sname);
        }
        WTSFreeMemory(pInfo);
        }
        Console.ReadLine();
    }

Documentation