目标是让服务创建一个进程,该进程具有密码未知的用户的安全上下文。我理解并接受新进程只能访问本地资源的限制
我想我已经接近解决方案了。只要要模拟的用户在本地管理员组中,一切正常。但如果不是,我会得到一个异常 0xc06d007e。被模拟的用户似乎缺少它在管理员组中时所拥有的一些权限或特权。但是,如果没有经过数千次排列的反复试验,我怎么能找出这个缺失的权利/许可/特权是什么?
get a token for the user to be impersonated
token = new WindowsIdentity("username@domain").Token
create a primary token
token2 = duplicatetokenex(token)
要创建的进程是一个简单的控制台应用程序,实际上我什至不需要控制台。
process_creation_flags.DETACHED_PROCESS
| process_creation_flags.CREATE_NO_WINDOW
| process_creation_flags.CREATE_NEW_PROCESS_GROUP
尝试以模拟用户身份启动新进程
createprocessasuser(token2, "myapplication.exe" etc etc)`
正如我所说,如果用户名@域在本地管理员组中,这可以正常工作,否则我会收到异常 0xc06d007e 我认为当新进程尝试启动时