Я пытаюсь отладить проблему и не понимаю ее.
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 argument
, на TerminateProcess
. Просматривая документы MSDN для TerminateProcess, вы должны сначала открыть доступ к процессу с правом доступа PROCESS_TERMINATE. Я открываю процесс с этим правом доступа, поэтому он должен просто работать. Что я делаю неправильно / отсутствует?