C# Windows服务是否可以模拟没有密码的用户?
作为本地系统或本地服务运行的C#Windows服务是否可以模拟另一个用户而不需要该用户的密码 如何做到这一点C# Windows服务是否可以模拟没有密码的用户?,c#,.net,windows-services,C#,.net,Windows Services,作为本地系统或本地服务运行的C#Windows服务是否可以模拟另一个用户而不需要该用户的密码 如何做到这一点 注意:我这样做的动机是能够在服务中运行用户特定的WMI查询。我正在进行的WMI调用(对OfflineFiles WMI API)是用户敏感的,只有当我以要查询其数据的用户身份运行服务时,这些调用才起作用。我不希望用户在安装该服务时必须输入用户名和密码,因此我只希望以本地系统或其他方式运行该服务,并模拟我关心的用户。据我所知,出于明显的安全原因,这是无法做到的。您必须拥有密码才能调用Log
注意:我这样做的动机是能够在服务中运行用户特定的WMI查询。我正在进行的WMI调用(对OfflineFiles WMI API)是用户敏感的,只有当我以要查询其数据的用户身份运行服务时,这些调用才起作用。我不希望用户在安装该服务时必须输入用户名和密码,因此我只希望以本地系统或其他方式运行该服务,并模拟我关心的用户。据我所知,出于明显的安全原因,这是无法做到的。您必须拥有密码才能调用LogonUser,然后是WindowsIdentity.Impersonate
一个例外:如果您通过远程处理呼叫将现有WindowsIdentity传递给服务,则您可以在服务中模拟该WindowsIdentity,但应用程序不会以这种方式运行。假设您只需要在相关用户登录时启动模拟,您可以:
显然,未记录的ZwCreateToken winapi函数的API也可以实现这一点,但我从未使用过它,将来可能会随时中断。如果您解释一下该服务在模拟用户后要执行的操作,我想您的运气会更好。好了,如果不保存凭据(这意味着用户在某个时候输入密码),你所要求的是不可能的@ChrisShain,我已经按照你的建议更新了这个问题。查看这个问题的答案:安全原因并不明显-如果你是一个在本地系统帐户上运行的服务,那么你真的什么都做不了。对于#1,也可以使用
Process.getprocesss()
确实有一种使用S4U(用户服务)的技术: