Поделиться через


Функция NtOpenProcess (ntddk.h)

Подпрограмма ZwOpenProcess открывает дескриптор для объекта процесса и задает права доступа к этому объекту.

Синтаксис

__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenProcess(
  [out]          PHANDLE            ProcessHandle,
  [in]           ACCESS_MASK        DesiredAccess,
  [in]           POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional] PCLIENT_ID         ClientId
);

Параметры

[out] ProcessHandle

Указатель на переменную типа HANDLE. Подпрограмма ZwOpenProcess записывает дескриптор процесса в переменную, на которую указывает этот параметр.

[in] DesiredAccess

Значение ACCESS_MASK , содержащее права доступа, запрошенные вызывающим объектом процесса.

[in] ObjectAttributes

Указатель на структуру OBJECT_ATTRIBUTES , указывающую атрибуты, применяемые к дескриптору объекта процесса. Поле ObjectName этой структуры должно иметь значение NULL. Дополнительные сведения см. в следующем разделе Примечаний .

[in, optional] ClientId

Указатель на идентификатор клиента, который идентифицирует поток, процесс которого необходимо открыть. Этот параметр должен быть указателем на допустимый идентификатор клиента, отличный от NULL . Дополнительные сведения см. в следующем разделе Примечаний .

Возвращаемое значение

ZwOpenProcess возвращает STATUS_SUCCESS, если вызов выполнен успешно. Возможные возвращаемые значения включают следующие коды состояния ошибок:

Код возврата Описание
STATUS_INVALID_PARAMETER_MIX Вызывающий объект либо предоставил имя объекта, либо не смог предоставить идентификатор клиента.
STATUS_INVALID_CID Указанный идентификатор клиента недопустим.
STATUS_INVALID_PARAMETER Запрошенные права доступа недопустимы для объекта процесса.
STATUS_ACCESS_DENIED Запрошенные права доступа не могут быть предоставлены.

Комментарии

Как и в случае с дескрипторами ядра, открытыми другими вызовами системных служб, такими как ZwCreateKey и ZwCreateFile, вызывающий объект отвечает за вызов ZwClose , чтобы закрыть дескриптор, когда он больше не требуется.

Параметр ClientId должен указывать на идентификатор клиента, определяющий поток, процесс которого должен быть открыт. Кроме того, поле ObjectName структуры, на которую указывает ObjectAttributes , должно иметь значение NULL.

Если вызов этой функции выполняется в пользовательском режиме, следует использовать имя NtOpenProcess вместо ZwOpenProcess.

Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы Собственные системные службы Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями подпрограмм NtXxx и ZwXxx см. в разделе Использование версий NT и Zw подпрограмм собственных системных служб.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntddk.h (включая Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs, PowerIrpDDis

См. также раздел

ACCESS_MASK

OBJECT_ATTRIBUTES

Использование версий nt и Zw собственных системных служб