users組有調試許可權,否則你用VS也不可能調試。</p><p>extern BOOL EnablePrivilege(LPCWSTR szPrivName)<br />{<br /> HANDLE _hToken = INVALID_HANDLE_VALUE;<br /> if (!OpenProcessToken(GetCurrentProcess(),<br /> TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,<br /> &_hToken))<br /> {<br /> return FALSE;<br /> }<br /> if (_hToken == INVALID_HANDLE_VALUE)<br /> {<br /> return FALSE;<br /> }<br /> TOKEN_PRIVILEGES tp = {0};<br /> LUID luid = {0};<br /> TOKEN_PRIVILEGES tpPrevious= {0};<br /> DWORD cbPrevious=sizeof(TOKEN_PRIVILEGES);<br /> if(!LookupPrivilegeValueW( NULL, szPrivName, &luid ))<br /> {<br /> return FALSE;<br /> }<br /> //<br /> // first pass. get current privilege setting<br /> //<br /> tp.PrivilegeCount = 1;<br /> tp.Privileges[0].Luid = luid;<br /> tp.Privileges[0].Attributes = 0;<br /> if (!AdjustTokenPrivileges(_hToken,<br /> FALSE,<br /> &tp,<br /> sizeof(TOKEN_PRIVILEGES),<br /> &tpPrevious,<br /> &cbPrevious))<br /> {<br /> return FALSE;<br /> }<br /> //<br /> // second pass. set privilege based on previous setting<br /> //<br /> tpPrevious.PrivilegeCount = 1;<br /> tpPrevious.Privileges[0].Luid = luid;<br /> tpPrevious.Privileges[0].Attributes |= (SE_PRIVILEGE_ENABLED);<br /> if (!AdjustTokenPrivileges(_hToken,<br /> FALSE,<br /> &tpPrevious,<br /> cbPrevious,<br /> NULL,<br /> NULL))<br /> {<br /> return FALSE;<br /> }<br /> if (_hToken != INVALID_HANDLE_VALUE)<br /> {<br /> CloseHandle(_hToken);_hToken = INVALID_HANDLE_VALUE;<br /> }<br /> return TRUE;<br />}</p><p>補充:如果你希望對被調試進程有寫入許可權,比如在建立遠程線程的時候,你需要以VM_WRITE等許可權開啟被調試進程。