структура OBJECT_ATTRIBUTES (ntdef.h)
Структура OBJECT_ATTRIBUTES определяет атрибуты, которые могут применяться к объектам или дескрипторам объектов подпрограммами, которые создают объекты и /или возвращают дескрипторы объектам.
Синтаксис
typedef struct _OBJECT_ATTRIBUTES {
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING ObjectName;
ULONG Attributes;
PVOID SecurityDescriptor;
PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES;
Члены
Length
Количество байтов данных, содержащихся в этой структуре. Макрос InitializeObjectAttributes задает для этого элемента значение sizeof(OBJECT_ATTRIBUTES).
RootDirectory
Необязательный дескриптор корневого каталога объекта для имени пути, указанного элементом ObjectName . Если параметр RootDirectory имеет значение NULL
, ObjectName должен указывать на полное имя объекта, включающее полный путь к целевому объекту. Если параметр RootDirectory неNULL
является, ObjectName указывает имя объекта относительно каталога RootDirectory . Дескриптор RootDirectory может ссылаться на каталог файловой системы или каталог объекта в пространстве имен диспетчера объектов.
ObjectName
Указатель на строку Юникода , содержащую имя объекта, для которого должен быть открыт дескриптор. Это должно быть либо полное имя объекта, либо имя относительного пути к каталогу, указанному элементом RootDirectory .
Attributes
Битовая маска флагов, указывающих атрибуты дескриптора объекта. Этот элемент может содержать один или несколько флагов в следующей таблице.
Flag | Значение |
---|---|
OBJ_INHERIT | Этот дескриптор может наследоваться дочерними процессами текущего процесса. |
OBJ_PERMANENT | Этот флаг применяется только к объектам, именованным в диспетчере объектов. По умолчанию такие объекты удаляются при закрытии всех открытых для них дескрипторов. Если этот флаг указан, объект не удаляется при закрытии всех открытых дескрипторов. Драйверы могут использовать подпрограмму ZwMakeTemporaryObject , чтобы сделать постоянный объект непостояным. |
OBJ_EXCLUSIVE | Если этот флаг установлен и структура OBJECT_ATTRIBUTES передается подпрограмме, создающей объект , доступ к объекту можно получить исключительно. То есть, как только процесс открывает такой дескриптор для объекта, никакие другие процессы не могут открыть дескриптор для этого объекта. Если этот флаг установлен и структура OBJECT_ATTRIBUTES передается подпрограмме, создающей дескриптор объекта, вызывающий объект запрашивает монопольный доступ к объекту для контекста процесса, в который был создан дескриптор. Этот запрос может быть предоставлен только в том случае, если при создании объекта был установлен флаг OBJ_EXCLUSIVE . |
OBJ_CASE_INSENSITIVE | Если этот флаг указан, сравнение без учета регистра используется при сопоставлении имени, на которое указывает элемент ObjectName , с именами существующих объектов. В противном случае имена объектов сравниваются с использованием системных параметров по умолчанию. |
OBJ_OPENIF | Если этот флаг указан с помощью дескриптора объекта для подпрограммы, которая создает объекты, и если этот объект уже существует, подпрограмма должна открыть этот объект. В противном случае подпрограмма, создающая объект , возвращает код NTSTATUS STATUS_OBJECT_NAME_COLLISION. |
OBJ_OPENLINK | Если дескриптор объекта с установленным флагом передается подпрограмме, которая открывает объекты, и если объект является объектом символьной ссылки, подпрограмма должна открыть сам объект символьной ссылки, а не объект, на который ссылается символьная ссылка (что является поведением по умолчанию). |
OBJ_KERNEL_HANDLE | Дескриптор создается в контексте системного процесса и доступен только из режима ядра. |
OBJ_FORCE_ACCESS_CHECK | Подпрограмма, открывающая дескриптор, должна принудительно выполнять все проверки доступа для объекта, даже если дескриптор открывается в режиме ядра. |
OBJ_DONT_REPARSE | Если этот флаг установлен, точки повторного анализа не будут следовать при анализе имени связанного объекта. При обнаружении каких-либо повторов попытка завершится ошибкой и возвратит STATUS_REPARSE_POINT_ENCOUNTERED результат. Его можно использовать для определения наличия точек повторного анализа в пути к объекту в сценариях безопасности. |
OBJ_IGNORE_IMPERSONATED_DEVICEMAP | Сопоставление устройств — это сопоставление между именами устройств DOS и устройствами в системе и используется при разрешении имен DOS. Для каждого пользователя в системе существуют отдельные карты устройств, и пользователи могут управлять своими картами устройств. Обычно во время олицетворения используется карта устройства олицетворенного пользователя. Однако при установке этого флага вместо него используется сопоставление устройств пользователя процесса. |
OBJ_VALID_ATTRIBUTES | Зарезервировано. |
SecurityDescriptor
Указывает дескриптор безопасности (SECURITY_DESCRIPTOR) для объекта при его создании. Если параметр SecurityDescriptor имеет значение NULL
, объект получит параметры безопасности по умолчанию. Новый объект см. в разделе DACL.
SecurityQualityOfService
Необязательное качество обслуживания, которое применяется к объекту при его создании. Используется для указания уровня олицетворения безопасности и режима отслеживания контекста (динамического или статического). В настоящее время макрос InitializeObjectAttributes задает этому члену значение NULL
.
Комментарии
Используйте макрос InitializeObjectAttributes для инициализации элементов структуры OBJECT_ATTRIBUTES . Обратите внимание, что InitializeObjectAttributes инициализирует элемент SecurityQualityOfService в .NULL
Если необходимо указать значение, отличноеNULL
от , установите элемент SecurityQualityOfService после инициализации.
Чтобы применить атрибуты, содержащиеся в этой структуре, к объекту или дескриптору объекта, передайте указатель на эту структуру в подпрограмму, которая обращается к объектам или возвращает дескрипторы объектов, например ZwCreateFile или ZwCreateDirectoryObject.
Все элементы этой структуры доступны только для чтения. Если элемент этой структуры является указателем, объект, на который указывает этот элемент, также доступен только для чтения. Доступные только для чтения элементы и объекты можно использовать для получения соответствующей информации, но их нельзя изменять. Чтобы задать элементы этой структуры, используйте макрос InitializeObjectAttributes .
Подпрограммы драйвера, которые выполняются в контексте процесса, отличном от контекста системного процесса, должны устанавливать флаг OBJ_KERNEL_HANDLE для элемента Attributes (с помощью макроса InitializeObjectAttributes ). Это ограничивает использование дескриптора, открытого для этого объекта, процессами, выполняющимися только в режиме ядра. В противном случае дескриптор может получить доступ к процессу, в контексте которого выполняется драйвер.
Требования
Требование | Значение |
---|---|
Заголовок | ntdef.h (включает D3dkmthk.h, Ntdef.h, Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h) |