栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何检索.NET中已登录/已连接用户的列表?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何检索.NET中已登录/已连接用户的列表?

这是我对这个问题的看法:

using System;using System.Collections.Generic;using System.Runtime.InteropServices;namespace EnumerateRDUsers{  class Program  {    [Dllimport("wtsapi32.dll")]    static extern IntPtr WTSOpenServer([MarshalAs(UnmanagedType.LPStr)] string pServerName);    [Dllimport("wtsapi32.dll")]    static extern void WTSCloseServer(IntPtr hServer);    [Dllimport("wtsapi32.dll")]    static extern Int32 WTSEnumerateSessions(        IntPtr hServer,        [MarshalAs(UnmanagedType.U4)] Int32 Reserved,        [MarshalAs(UnmanagedType.U4)] Int32 Version,        ref IntPtr ppSessionInfo,        [MarshalAs(UnmanagedType.U4)] ref Int32 pCount);    [Dllimport("wtsapi32.dll")]    static extern void WTSFreeMemory(IntPtr pMemory);    [Dllimport("wtsapi32.dll")]    static extern bool WTSQuerySessionInformation(        IntPtr hServer, int sessionId, WTS_INFO_CLASS wtsInfoClass, out IntPtr ppBuffer, out uint pBytesReturned);    [StructLayout(LayoutKind.Sequential)]    private struct WTS_SESSION_INFO    {      public Int32 SessionID;      [MarshalAs(UnmanagedType.LPStr)]      public string pWinStationName;      public WTS_CONNECTSTATE_CLASS State;    }    public enum WTS_INFO_CLASS    {      WTSInitialProgram,      WTSApplicationName,      WTSWorkingDirectory,      WTSOEMId,      WTSSessionId,      WTSUserName,      WTSWinStationName,      WTSDomainName,      WTSConnectState,      WTSClientBuildNumber,      WTSClientName,      WTSClientDirectory,      WTSClientProductId,      WTSClientHardwareId,      WTSClientAddress,      WTSClientDisplay,      WTSClientProtocolType    }    public enum WTS_CONNECTSTATE_CLASS    {      WTSActive,      WTSConnected,      WTSConnectQuery,      WTSShadow,      WTSDisconnected,      WTSIdle,      WTSListen,      WTSReset,      WTSDown,      WTSInit    }    static void Main(string[] args)    {      ListUsers(Environment.MachineName);    }    public static void ListUsers(string serverName)    {      IntPtr serverHandle = IntPtr.Zero;      List<string> resultList = new List<string>();      serverHandle = WTSOpenServer(serverName);      try      {        IntPtr sessionInfoPtr = IntPtr.Zero;        IntPtr userPtr = IntPtr.Zero;        IntPtr domainPtr = IntPtr.Zero;        Int32 sessionCount = 0;        Int32 retVal = WTSEnumerateSessions(serverHandle, 0, 1, ref sessionInfoPtr, ref sessionCount);        Int32 dataSize = Marshal.SizeOf(typeof(WTS_SESSION_INFO));        IntPtr currentSession = sessionInfoPtr;        uint bytes = 0;        if (retVal != 0)        {          for (int i = 0; i < sessionCount; i++)          { WTS_SESSION_INFO si = (WTS_SESSION_INFO)Marshal.PtrToStructure((System.IntPtr)currentSession, typeof(WTS_SESSION_INFO)); currentSession += dataSize; WTSQuerySessionInformation(serverHandle, si.SessionID, WTS_INFO_CLASS.WTSUserName, out userPtr, out bytes); WTSQuerySessionInformation(serverHandle, si.SessionID, WTS_INFO_CLASS.WTSDomainName, out domainPtr, out bytes); Console.WriteLine("Domain and User: " + Marshal.PtrToStringAnsi(domainPtr) + "\" + Marshal.PtrToStringAnsi(userPtr)); WTSFreeMemory(userPtr);  WTSFreeMemory(domainPtr);          }          WTSFreeMemory(sessionInfoPtr);        }      }      finally      {        WTSCloseServer(serverHandle);      }    }  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/576275.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号