首先我將程式提升為除錯特權,然后呼叫OpenProcess函式但總是回傳0x00000048這個句柄,請問哪里操作有誤··
以下代碼功能是首先將程式自己提升為除錯特權,然后打開其他程式,將它也設為除錯特權··沒想到OpenProcess函式出了問題
#include <iostream>
#include <windows.h>
using namespace std;
BOOL EnableDebugPrivilege(BOOL bEnable,HANDLE hProcess);
UINT g_dwProcessId;
HANDLE g_hProcess;
DWORD g_ErrorId;
int main()
{
if (EnableDebugPrivilege(TRUE, ::GetCurrentProcess()))
while (1)
{
cout << "請輸入行程ID:";
cin >> g_dwProcessId;
cin.get();
g_hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, g_dwProcessId);
cout << "行程句柄:" << g_hProcess << endl;
if (g_hProcess == NULL)
{
cout << "打開行程失敗,可能行程不存在\n";
continue;
}
if (EnableDebugPrivilege(TRUE, g_hProcess))
cout << "該行程的除錯特權已打開!輸入'#'將關閉該行程的除錯特權\n";
else
{
cout << "打開除錯特權失敗\n";
continue;
}
char ch;
ch = cin.get();
if (ch == '#')
EnableDebugPrivilege(FALSE, g_hProcess);
g_dwProcessId = 0;
g_hProcess = 0;
}
else
cout << "本程式的除錯特權未能啟動";
return 0;
}
BOOL EnableDebugPrivilege(BOOL bEnable,HANDLE hProcess)
{
BOOL bOk = FALSE;
HANDLE hToken;
if (::OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken))
{
LUID uID;
::LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &uID);
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = uID;
tp.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
::AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
bOk = (::GetLastError() == ERROR_SUCCESS);
::CloseHandle(hToken);
}
else
{
g_ErrorId = ::GetLastError();
cout << "出錯原因id:" << g_ErrorId << endl;
}
return bOk;
}
uj5u.com熱心網友回復:
補充以下 行程ID我是用任務管理器找的PID,圖上g_dwProcessId為記事本的PID轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/216341.html
標籤:進程/線程/DLL
