我正在嘗試調(diào)試一個(gè)問題,但我不明白。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() }}如果我用 調(diào)用它,BackgroundProcess("C:\\Windows\\System32\\calc.exe")我會得到錯(cuò)誤EINVAL,即invalid argumenton TerminateProcess。查看 TerminateProcess 的 MSDN 文檔,您需要首先使用 PROCESS_TERMINATE 訪問權(quán)限打開對進(jìn)程的訪問權(quán)限。我正在使用該訪問權(quán)限打開流程,因此它應(yīng)該可以正常工作。我做錯(cuò)了什么/錯(cuò)過了什么?
TerminateProcess() 返回 EINVAL
慕碼人8056858
2023-06-01 14:31:14