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


структура 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)

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

FltCreateCommunicationPort

FltCreateFile

FltCreateFileEx

FltCreateFileEx2

InitializeObjectAttributes

IoCreateFile

IoCreateFileEx

IoCreateFileSpecifyDeviceObjectHint

ZwCreateDirectoryObject

ZwCreateFile

DACL для нового объекта