我已经阅读了Stack Overflow上关于CreateProcessAsUser的所有帖子,几乎没有解决的问题,所以我不会屏息在这一点上。但看起来我肯定遗漏了什么,所以这可能很简单。
目标操作系统为Windows XP。我有一个以“本地系统”身份运行的服务,我想在其中创建一个以不同用户身份运行的进程。对于该用户,我有用户名和密码,所以LogonUser可以正常运行,并且我会为该用户获得一个令牌(在本例中,是一个管理员帐户)。然后,我尝试使用该令牌来调用CreateProcessAsUser,但它失败了,因为该令牌没有附带SeAssignPrimaryTokenPrivilege -但是,它确实有SeIncreaseQuotaPrivilege。(我使用GetTokenInformation转储了与该令牌关联的所有权限。)根据CreateProcessAsUser的MSDN页面,您需要这两个权限才能成功调用CreateProcessAsUser。
它还指出,如果传递给CreateProcessAsUser()的令牌是“调用进程的主令牌的受限版本”(我可以用CreateRestrictedToken()创建),则不需要SeAssignPrimaryTokenPrivilege,但是它将与本地系统用户相关联,而不是我试图以其身份运行进程的目标用户。
那么,如何创建既是调用进程的主令牌的受限版本又与其他用户相关联的登录令牌呢?谢谢!
请注意,这里不需要用户交互-它都是无人值守的-所以不需要做像抓取WINSTA0之类的事情。
发布于 2010-06-04 02:40:24
SE_ASSIGNPRIMARYTOKEN_NAME是一种可以使用OpenProcessToken/OpenThreadToken+LookupPrivilegeValue+AdjustTokenPrivileges在进程/线程中启用的权限(很容易将其与TOKEN_ASSIGN_PRIMARY混淆
在这台XP:SP2机器上,只需调用LogonUser(...,LOGON32_LOGON_INTERACTIVE,...)+CreateProcessAsUser就可以正常工作,而不会影响任何权限(使用假的cmd.exe服务,但这无关紧要)
MSDN上的这句话:
如果尚未启用必要的权限,CreateProcessAsUser将在调用期间启用这些权限
事实上,您是以系统身份运行的,并且应该能够启用任何权限,这让我相信分配主要内容不是问题所在。
https://stackoverflow.com/questions/2967742
复制相似问题