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


Макрос InitializeObjectAttributes (ntdef.h)

Макрос InitializeObjectAttributes инициализирует непрозрачную структуру OBJECT_ATTRIBUTES , которая задает свойства дескриптора объекта для подпрограмм, которые открывают дескрипторы.

Синтаксис

VOID InitializeObjectAttributes(
  [out]          POBJECT_ATTRIBUTES   p,
  [in]           PUNICODE_STRING      n,
  [in]           ULONG                a,
  [in]           HANDLE               r,
  [in, optional] PSECURITY_DESCRIPTOR s
);

Параметры

p

Указатель на структуру OBJECT_ATTRIBUTES для инициализации.

n

Указатель на строку Юникода, содержащую имя объекта, для которого должен быть открыт дескриптор. Это должно быть полное имя объекта или относительный путь к каталогу объектов, указанному параметром RootDirectory.

a

Указывает один или несколько следующих флагов:

Флаг Описание
OBJ_INHERIT Этот дескриптор может наследоваться дочерними процессами текущего процесса.
OBJ_PERMANENT Этот флаг применяется только к объектам, которые именуются в диспетчере объектов. По умолчанию такие объекты удаляются при закрытии всех открытых дескрипторов. Если этот флаг указан, объект не удаляется при закрытии всех открытых дескрипторов. Драйверы могут использовать ZwMakeTemporaryObject для удаления постоянных объектов.
OBJ_EXCLUSIVE Для этого объекта можно открыть только один дескриптор.
OBJ_CASE_INSENSITIVE Если этот флаг указан, при сопоставлении параметра ObjectName с именами существующих объектов используется сравнение без учета регистра. В противном случае имена объектов сравниваются с помощью параметров системы по умолчанию.
OBJ_OPENIF Если этот флаг указан в подпрограмме, которая создает объекты, и этот объект уже существует, подпрограмма должна открыть этот объект. В противном случае подпрограмма создания объекта возвращает код NTSTATUS STATUS_OBJECT_NAME_COLLISION.
OBJ_KERNEL_HANDLE Указывает, что дескриптор может быть доступ только в режиме ядра.
OBJ_FORCE_ACCESS_CHECK Подпрограмма открытия дескриптора должна применять все проверки доступа для объекта, даже если дескриптор открыт в режиме ядра.

r

Дескриптор корневого каталога объектов для имени пути, указанного в параметре ObjectName. Если ObjectName является полным именем объекта, RootDirectory имеет значение NULL. Используйте ZwCreateDirectoryObject для получения дескриптора в каталог объектов.

s

Указывает дескриптор безопасности для применения к объекту при его создании. Это необязательный параметр. Драйверы могут указать ЗНАЧЕНИЕ NULL, чтобы принять безопасность по умолчанию для объекта. Дополнительные сведения см. в следующем разделе "Примечания".

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

Отсутствует

Замечания

InitializeObjectAttributes инициализирует структуру OBJECT_ATTRIBUTES , которая указывает свойства открываемого дескриптора объекта. Вызывающий объект затем может передать указатель на эту структуру в подпрограмму, которая фактически открывает дескриптор.

Подпрограммы драйверов, которые выполняются в контексте процесса, отличном от системного процесса, должны задать флаг OBJ_KERNEL_HANDLE для параметра "Атрибуты ". Этот флаг ограничивает использование дескриптора, открытого для этого объекта, для процессов, выполняемых только в режиме ядра. В противном случае дескриптор может получить доступ к процессу, в контексте которого выполняется драйвер.

Обратите внимание, что InitializeObjectAttributes всегда задает элемент SecurityQualityOfServiceOBJECT_ATTRIBUTES значение NULL. Драйверы, для которых требуется значение, отличное от NULL , могут напрямую задать SecurityQualityOfService .

Требования

Требование Ценность
целевая платформа Рабочий стол
Заголовок ntdef.h (включая Wdm.h, Ntddk.h, Ntdef.h)

См. также

ExCreateCallback

IoCreateFile

OBJECT_ATTRIBUTES

PsCreateSystemThread

SECURITY_DESCRIPTOR

UNICODE_STRING

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwMakeTemporaryObject

ZwOpenFile

ZwOpenKey

ZwOpenSection

ZwOpenSymbolicLinkObject