2009-07-31 17 views
2

我正在使用下面的代碼(這是MSDN稍微修改的示例)來檢查我是否對進程具有調試特權。如果我不嘗試設置它們。在非特權帳戶(C,Windows)上調整令牌

int SetDebugPriv() 
{ 
    HANDLE TokenHandle; 
    LUID lpLuid; 
    TOKEN_PRIVILEGES NewState; 

    if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &TokenHandle)) 
    { 
     //failed 
     return 0; 
    } 

    if(!LookupPrivilegeValue(NULL, "SeDebugPrivilege" , &lpLuid)) 
    { 
     //failed 
     CloseHandle(TokenHandle); 
     return 0; 
    } 

    NewState.PrivilegeCount = 1; 
    NewState.Privileges[0].Luid = lpLuid; 
    NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 

    if(!AdjustTokenPrivileges(TokenHandle, FALSE, &NewState, sizeof(NewState), NULL, NULL)) 
    { 
     //failed 
     CloseHandle(TokenHandle); 
     return 0; 
    } 

    CloseHandle(TokenHandle); 
    return 1; 
} 

現在,在Windows XP和2003的某個帳戶下,當嘗試設置令牌時,出現拒絕訪問錯誤。我的猜測是,我無法設置該特定的令牌,因爲我沒有權限這樣做。 如何在非管理員帳戶或具有低權限的帳戶上設置調試令牌?

代碼表示讚賞。

謝謝

回答

6

你不能。如果可以的話,這將是一個巨大的安全漏洞(SeDebugPrivilege擁有比管理員更多的mojo)。

AdjustTokenPrivileges打開令牌具有的權限,但未啓用該權限。例如,SeShutdownPrivilege就是其中之一。

您必須將權限添加到用戶帳戶,然後用戶必須註銷並重新登錄(以獲得具有該權限的新令牌)。

要將權限添加到用戶帳戶程序,開始與此:http://support.microsoft.com/kb/132958

+0

偉大謝謝 – wonderer 2009-07-31 13:25:13

相關問題