2009-07-31 12 views
1

in previous question我問了如何解決某些用戶的調試權限不存在的問題。 現在,由於我無法設置不存在的內容,因此如何檢查用戶是否具有調試權限?檢測進程上的調試權限(Windows,C)

我知道我必須使用LookupPrivilegeValue(),我只是無法確定在哪裏讀取返回的值,這將指示是否有特定的權限。

代碼表示讚賞。

感謝

+0

沒關係...發現 答案是http://msdn.microsoft.com/en-us/library/aa446619%28VS.85%29.aspx – wonderer 2009-07-31 14:27:27

回答

1

http://msdn.microsoft.com/en-us/library/aa446619%28VS.85%29.aspx

BOOL SetPrivilege(
    HANDLE hToken,   // access token handle 
    LPCTSTR lpszPrivilege, // name of privilege to enable/disable 
    BOOL bEnablePrivilege // to enable or disable privilege 
    ) 
{ 
    TOKEN_PRIVILEGES tp; 
    LUID luid; 

    if (!LookupPrivilegeValue( 
      NULL,   // lookup privilege on local system 
      lpszPrivilege, // privilege to lookup 
      &luid))  // receives LUID of privilege 
    { 
     printf("LookupPrivilegeValue error: %u\n", GetLastError()); 
     return FALSE; 
    } 

    tp.PrivilegeCount = 1; 
    tp.Privileges[0].Luid = luid; 
    if (bEnablePrivilege) 
     tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
    else 
     tp.Privileges[0].Attributes = 0; 

    // Enable the privilege or disable all privileges. 

    if (!AdjustTokenPrivileges(
      hToken, 
      FALSE, 
      &tp, 
      sizeof(TOKEN_PRIVILEGES), 
      (PTOKEN_PRIVILEGES) NULL, 
      (PDWORD) NULL)) 
    { 
      printf("AdjustTokenPrivileges error: %u\n", GetLastError()); 
      return FALSE; 
    } 

    if (GetLastError() == ERROR_NOT_ALL_ASSIGNED) 

    { 
      printf("The token does not have the specified privilege. \n"); 
      return FALSE; 
    } 

    return TRUE; 
} 

如果功能要求設置調試權限則標誌是不存在的時候返回ERROR_NOT_ALL_ASSIGNED。