簡體   English   中英

Windows 句柄總是返回 INVALID_HANDLE_VALUE

[英]Windows handle always returning INVALID_HANDLE_VALUE

HANDLE process = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, PID);
    if (process = INVALID_HANDLE_VALUE)
    {
        printf("Failed to open PID %d, error code %d",
            PID, GetLastError());
    }

我試過這個函數,但它總是返回"Failed to open PID (number) error code 0" 即使只有PROCESS_VM_READ

當我在這段代碼中輸出內存地址的值時

ReadProcessMemory(process, (LPVOID)0x14AC1BC, &value, sizeof(DWORD), NULL);
cout << value << endl;

它返回垃圾值。

OpenProcess 失敗時返回NULL而不是INVALID_HANDLE_VALUE 當您應該使用==時,您也在使用= 代碼應該是

HANDLE process = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, PID);
if (process == NULL)
{
}

process = INVALID_HANDLE_VALUE執行賦值覆蓋進程句柄值,而不是比較。 同樣,如果出現錯誤OpenProcess將返回NULL 像這樣重寫檢查:

if(NULL == process)

您錯誤地兩次分配給process變量。 一次當您調用OpenProcess ,然后在您編寫時再次

if (process = INVALID_HANDLE_VALUE)

這會將INVALID_HANDLE_VALUE分配給process並測試process是否為非零。 情況總是如此,因為INVALID_HANDLE_VALUE非零。 當您打算使用==時,您犯了使用=的經典錯誤。 因此,您完全忽略了OpenProcess返回的值。

請注意, OpenProcess通過返回NULL指示失敗。 所以你的代碼應該是

if (process == NULL) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM