Я использую WINAPI для программы, которую я пишу.У программы есть ProcessId другого процесса, и ему нужно получить его дескриптор (чтобы иметь возможность завершить его позже, а также периодически проверять, жив ли процесс и отвечает, используя WaitForSingleObject).Когда я компилирую свою программу (в Embarcadero RAD Studio 2010 C ++ Builder), она работает хорошо;кажется, что программа успешно справляется с управлением и в целом работает как задумано.Однако, если я запускаю его из папки как отдельный exe-файл, кажется, что он не может правильно получить дескриптор.Я проверил это путем сравнения (Companion - это HANDLE, а Companion_PID - это DWORD):
GetProcessId(Companion)
и
Companion_PID
Где, несколько строк ранее, Companion взят из Companion_PID вследующий код:
Companion = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Companion_PID);
И «GetProcessId (Companion)» приводит к 0 (это хороший признак того, что OpenProcess не удалось вернуть правильный дескриптор.
Я довольно удивленчто этот код работает по-разному при запуске из компилятора и как отдельный exe-файл, я предполагаю, что в первом случае атрибуты безопасности наследуются от самого компилятора, но я хотел бы услышать, возможно, лучшее объяснение этого поведения от кого-тоболее опытный в WINAPI и атрибутах безопасности в частности.
Небольшое обновление: да, как я и думал, OpenProcess приводит к ошибке 0x5 = ERROR_ACCESS_DENIED.