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