Windows服务是否可以在没有密码的情况下模拟用户?

Eri*_*ric 6 .net c# windows-services

作为本地系统或本地服务运行的C#Windows服务是否可以在不需要该用户密码的情况下模拟其他用户

怎么做?

注意:我的动机是能够在服务中运行特定于用户的WMI查询.我正在进行的WMI调用(对于OfflineFiles WMI API)是用户敏感的,它们仅在我以我想要查询的数据的用户运行服务时才起作用.我不希望用户在安装服务时必须输入他们的用户名和密码,所以我想将服务作为本地系统或其他东西运行,并冒充我关心的用户.

geo*_*eys 7

假设您只需要在相关用户登录时启动模拟,您可以:

  1. 使用EnumProcesses找到相关的用户会话(例如http://msdn.microsoft.com/en-us/library/windows/desktop/ms682623(v=vs.85).aspx)[winapi ]
  2. 关于相关用户进程的OpenProcessToken()[winapi]
  3. 具有模拟权限的DuplicateToken()[winapi]
  4. 使用DuplicateToken的结果创建一个新的WindowsIdentity()
  5. 呼叫.从第4步开始,对您的新身份进行通知

一旦令牌被复制,用户记录 - 服务中的模拟仍然存在也无关紧要.

显然,未记录的ZwCreateToken winapi函数的API也可以实现这一点,但我从未使用它,并且可能在将来的任何时候中断.