Идентификатор процесса - это номер, который однозначно идентифицирует процесс. Обработчик процесса также является числом, которое однозначно идентифицирует объект ядра процесса.В чем разница между идентификатором процесса и дескриптором процесса
Почему мы нуждаемся в них, так как любой из них может идентифицировать процесс.
Я думаю, что ответ может заключаться в соотношении отображения между процессом и объектом ядра процесса. Верно ли, что более одного объекта ядра процесса можно сопоставить с одним процессом? И каждый объект ядра процесса имеет свой собственный дескриптор процесса. Чтобы каждый из объектов ядра процесса мог представлять собой другой режим доступа или подобные вещи.
Этот вопрос пришел ко мне, когда я использую функцию MiniDumpWriteDump(), которая объявлена как это:
BOOL WINAPI MiniDumpWriteDump(
__in HANDLE hProcess,
__in DWORD ProcessId,
__in HANDLE hFile,
__in MINIDUMP_TYPE DumpType,
__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);
Так это параметры включают в себя как идентификатор процесса и дескриптор процесса. Я просто не знаю, почему нужно иметь их обоих.
Большое спасибо за ваши идеи.
Обратите внимание, что вы можете наследовать и дублировать дескрипторы в других процессах, поэтому 2 не является правильным. – DennyRolling
Nod. Если для параметра SECURITY_ATTRIBUTES.bInheritHandle установлено значение true в API CreateProcess, дочерний процесс может получить дескриптор его родительского процесса с правами полного доступа. AFAIK, родительский процесс не может передавать дескрипторы любых других процессов, которые он может иметь. Пожалуйста, поправьте меня, если мое понимание ошибочно. – Faheem
Win32 'HANDLE'-s ** ** может использоваться совместно между потоками. Единственными исключениями являются псевдо-ручки, например, возвращаемые 'GetCurrentThread'. Плюс я бы добавил, что «РУЧКА» нужно закрыть, так как они действительно ссылаются на системный ресурс. – valdo