Макрос 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

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

Flag Описание
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 ZwCreateDirectoryObject , чтобы получить дескриптор для каталога объекта.

s

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

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

None

Remarks

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

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

Обратите внимание, что 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