2014-01-05 129 views
1

我正在嘗試創建一個WriteProcessMemory程序,但我需要調整我的權限才能成功打開進程的內存。 但我不知道如何。我搜索了幾個小時,發現了一段代碼,但我仍然陷入困境。 這是我在互聯網上找到的代碼:調整權限SE_DEBUG_NAME

BOOL isOK; 
HANDLE hToken; 
HANDLE hCurrentProcess; 
hCurrentProcess = GetCurrentProcess(); // 1 
isOK = OpenProcessToken(hCurrentProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); 
SetPrivilege(hToken, SE_DEBUG_NAME, TRUE); 

的「SetPrivilege」帶來的是「錯誤C3861:‘SetPrivilege’:標識符找不到」 我應該怎樣使SE_DEBUG_NAME特權? 歡迎任何幫助!

+0

很可能您找到的示例是指作者定義的函數,這就是編譯器不知道該符號的含義的原因。 MSDN沒有提到SetPrivilege函數。 – NmdMystery

回答

3

該函數不是Win32 API函數。最有可能是從MSDN示例此功能在這裏找到:http://msdn.microsoft.com/en-us/library/windows/desktop/aa446619.aspx

#include <windows.h> 
#include <stdio.h> 
#pragma comment(lib, "cmcfg32.lib") 

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; 
} 

我不能肯定該功能是一樣的,通過您所使用的代碼示例的作者使用。我建議您重新閱讀該代碼示例,並查看是否可以找到缺失的鏈接。