
我正在使用SystemEvents.SessionSwitch事件来确定运行我的进程的用户是否被locking,但事件不会让您知道哪个用户被locking/解锁。 我怎样才能得到这个信息(从一个低特权用户拥有的过程)
2应用程序最重要的问题
使用Rx同步两个stream
gdi +在Graphics对象上绘制图像时出现的一般错误
我如何select用户删除文件夹中的所有文件(但没有子目录)?
Visual Studio图标的含义
我不认为你可以部分信任的代码。 如果您的应用程序或其中的一部分可以成为一个完整的信任服务,会话ID可以按照相关问题 的答案中指定的来检索。
然后给定会话ID,您可以找到任何具有该会话ID的进程以获取实际用户(从“ 获取windows进程所有者名称”中抽象出来):
[Dllimport ("advAPI32.dll",SetLastError = true)] static extern bool OpenProcesstoken (IntPtr ProcessHandle,UInt32 DesiredAccess,out IntPtr TokenHandle); [Dllimport ("kernel32.dll",SetLastError = true)] [return: MarshalAs (UnmanagedType.Bool)] static extern bool CloseHandle (IntPtr hObject); static uint TOKEN_query = 0x0008; // ... public static windowsIDentity GetUserFromSession(int sessionID) { return Process.GetProcesses() .Where(p => p.SessionID == sessionID) .Select(GetUserFromProcess) .FirstOrDefault(); } public static windowsIDentity GetUserFromProcess(Process p) { IntPtr ph; try { OpenProcesstoken (p.Handle,TOKEN_query,out ph); return new windowsIDentity(ph); } catch (Exception e) { return null; } finally { if (ph != IntPtr.Zero) CloseHandle(ph); } }
总结以上是内存溢出为你收集整理的SystemEvents.SessionSwitch用户被locking/解锁全部内容,希望文章能够帮你解决SystemEvents.SessionSwitch用户被locking/解锁所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)