不少博客都有記載如何在session0下建立進程的辦法,也就是使用CreateProcessAsUser。可是這個要求服務的進程有SE_INCREASE_QUOTA_NAME和SE_ASSIGNPRIMARYTOKEN_NAME權限。若是設置的登陸用戶是LocalServer的話,是默認有以上兩個權限。可是若是是本身建立的帳戶,那麼是不具備SE_ASSIGNPRIMARYTOKEN_NAME的權限。git
查看用戶的權限能夠經過gpedit.msc工具中,在「計算機配置」-- 「Windows設置」 -- 「安全設置」 -- 「本地策略」 -- 「用戶權限分配」中查看。或者經過secedit.exe導出本地策略。github
手動能夠經過以上的方法設置,可是經過程序,在登陸帳戶下的進程是沒法設置。可是能夠使用secedit.exe進行導出導入進行設置。導出的信息包括如下一部分:安全
1 [Privilege Rights] 2 SeNetworkLogonRight = *S-1-1-0,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551,*S-1-5-32-581 3 SeBackupPrivilege = *S-1-5-32-544,*S-1-5-32-551 4 SeChangeNotifyPrivilege = *S-1-1-0,*S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551 5 SeSystemtimePrivilege = *S-1-5-19,*S-1-5-32-544 6 SeCreatePagefilePrivilege = *S-1-5-32-544 7 SeDebugPrivilege = *S-1-5-32-544 8 SeRemoteShutdownPrivilege = *S-1-5-32-544 9 SeAuditPrivilege = *S-1-5-19,*S-1-5-20 10 SeIncreaseQuotaPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544 11 SeIncreaseBasePriorityPrivilege = *S-1-5-32-544 12 SeLoadDriverPrivilege = *S-1-5-32-544 13 SeBatchLogonRight = *S-1-5-32-544,*S-1-5-32-551,*S-1-5-32-559 14 SeServiceLogonRight = *S-1-5-20,*S-1-5-80-0,*S-1-5-83-0 15 SeInteractiveLogonRight = __vmware__,Guest,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551,*S-1-5-32-581 16 SeSecurityPrivilege = *S-1-5-32-544 17 SeSystemEnvironmentPrivilege = *S-1-5-32-544 18 SeProfileSingleProcessPrivilege = *S-1-5-32-544 19 SeSystemProfilePrivilege = *S-1-5-32-544,*S-1-5-80-3139157870-2983391045-3678747466-658725712-1809340420 20 SeAssignPrimaryTokenPrivilege = *S-1-5-19,*S-1-5-20 21 SeRestorePrivilege = *S-1-5-32-544,*S-1-5-32-551 22 SeShutdownPrivilege = *S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551 23 SeTakeOwnershipPrivilege = *S-1-5-32-544 24 SeDenyNetworkLogonRight = Guest 25 SeDenyInteractiveLogonRight = Guest 26 SeUndockPrivilege = *S-1-5-32-544,*S-1-5-32-545 27 SeManageVolumePrivilege = *S-1-5-32-544 28 SeRemoteInteractiveLogonRight = *S-1-5-32-544,*S-1-5-32-555 29 SeImpersonatePrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6 30 SeCreateGlobalPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6 31 SeIncreaseWorkingSetPrivilege = *S-1-5-32-545 32 SeTimeZonePrivilege = *S-1-5-19,*S-1-5-32-544,*S-1-5-32-545 33 SeCreateSymbolicLinkPrivilege = *S-1-5-32-544,*S-1-5-83-0 34
使用帳戶的SID,更新到SeAssignPrimaryTokenPrivilege字段,該用戶便可擁有了SE_ASSIGNPRIMARYTOKEN_NAME權限。獲取SID能夠經過LookupAccountName函數。完整的用戶的SID可經過註冊表查看,路徑爲:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileListsession
整個過程總結一下:函數
第一步:使用LookupAccountName,經過服務登陸帳戶名,獲取該帳戶的SID;工具
第二步:secedit.exe導出本地策略,將第一步獲取的SID更新到SeAssignPrimaryTokenPrivilege字段;spa
例如:secedit /export /cfg gp.infcode
第三步:使用secedit.exe,將新的配置文件導入到系統;blog
例如:secedit /configure /db C:\\test.sdb /cfg gp.inf進程
第四步:重啓計算機;
第五步:在服務進程中,使用CreateProcessAsUser進行子進程的建立。