我正在嘗試調試一個問題,但我不明白。func BackgroundProcess(lpCommandLine string) (error) { var lpProcessAttrs windows.SecurityAttributes var lpThreadAttrs windows.SecurityAttributes var lpProcInfo windows.ProcessInformation var lpStartup windows.StartupInformation // convert to null terminated lpCli, err := StringToLpStr(lpCommandLine) if err != nil { return err } if ok := CreateProcess(nil, lpCli, &lpProcessAttrs, &lpThreadAttrs, true, 0, nil, nil, &lpStartup, &lpProcInfo); !ok { return GetLastError() } // DeleteProcessAccessRight is just a const for 1 childProcessHandle = OpenProcess(DeleteProcessAccessRight, false, lpProcInfo.dwProcess) if ok := TerminateProcess(childProcessHandle, 0); !ok { return GetLastError() }}如果我用 調用它,BackgroundProcess("C:\\Windows\\System32\\calc.exe")我會得到錯誤EINVAL,即invalid argumenton TerminateProcess。查看 TerminateProcess 的 MSDN 文檔,您需要首先使用 PROCESS_TERMINATE 訪問權限打開對進程的訪問權限。我正在使用該訪問權限打開流程,因此它應該可以正常工作。我做錯了什么/錯過了什么?
TerminateProcess() 返回 EINVAL
慕碼人8056858
2023-06-01 14:31:14