estructura OBJECT_ATTRIBUTES (ntdef.h)
La estructura de OBJECT_ATTRIBUTES especifica atributos que se pueden aplicar a objetos o controladores de objetos mediante rutinas que crean objetos o devuelven identificadores a objetos.
Sintaxis
typedef struct _OBJECT_ATTRIBUTES {
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING ObjectName;
ULONG Attributes;
PVOID SecurityDescriptor;
PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES;
Miembros
Length
Número de bytes de datos contenidos en esta estructura. La macro InitializeObjectAttributes establece este miembro en sizeof(OBJECT_ATTRIBUTES).
RootDirectory
Identificador opcional para el directorio de objetos raíz para el nombre de ruta de acceso especificado por el miembro ObjectName . Si RootDirectory es NULL
, ObjectName debe apuntar a un nombre de objeto completo que incluya la ruta de acceso completa al objeto de destino. Si RootDirectory noNULL
es, ObjectName especifica un nombre de objeto relativo al directorio RootDirectory . El identificador RootDirectory puede hacer referencia a un directorio del sistema de archivos o a un directorio de objetos en el espacio de nombres del administrador de objetos.
ObjectName
Puntero a una cadena Unicode que contiene el nombre del objeto para el que se va a abrir un identificador. Debe ser un nombre de objeto completo o un nombre de ruta de acceso relativo al directorio especificado por el miembro RootDirectory .
Attributes
Máscara de bits de marcas que especifican atributos de identificador de objeto. Este miembro puede contener una o varias de las marcas de la tabla siguiente.
Marca | Significado |
---|---|
OBJ_INHERIT | Los procesos secundarios del proceso actual pueden heredar este identificador. |
OBJ_PERMANENT | Esta marca solo se aplica a los objetos denominados dentro del administrador de objetos. De forma predeterminada, estos objetos se eliminan cuando se cierran todos los identificadores abiertos. Si se especifica esta marca, el objeto no se elimina cuando se cierran todos los identificadores abiertos. Los controladores pueden usar la rutina ZwMakeTemporaryObject para que un objeto permanente no sea permanente. |
OBJ_EXCLUSIVE | Si se establece esta marca y la estructura de OBJECT_ATTRIBUTES se pasa a una rutina que crea un objeto, se puede acceder exclusivamente al objeto. Es decir, una vez que un proceso abre este identificador para el objeto, ningún otro proceso puede abrir identificadores para este objeto. Si se establece esta marca y la estructura OBJECT_ATTRIBUTES se pasa a una rutina que crea un identificador de objeto, el autor de la llamada solicita acceso exclusivo al objeto para el contexto de proceso en el que se creó el identificador. Esta solicitud solo se puede conceder si se estableció la marca OBJ_EXCLUSIVE cuando se creó el objeto. |
OBJ_CASE_INSENSITIVE | Si se especifica esta marca, se usa una comparación sin distinción entre mayúsculas y minúsculas al hacer coincidir el nombre al que apunta el miembro ObjectName con los nombres de los objetos existentes. De lo contrario, los nombres de objeto se comparan con la configuración predeterminada del sistema. |
OBJ_OPENIF | Si se especifica esta marca, mediante el identificador de objeto, en una rutina que crea objetos y, si ese objeto ya existe, la rutina debe abrir ese objeto. De lo contrario, la rutina que crea el objeto devuelve un código NTSTATUS de STATUS_OBJECT_NAME_COLLISION. |
OBJ_OPENLINK | Si un identificador de objeto, con este conjunto de marcas, se pasa a una rutina que abre objetos y si el objeto es un objeto de vínculo simbólico, la rutina debe abrir el propio objeto de vínculo simbólico, en lugar del objeto al que hace referencia el vínculo simbólico (que es el comportamiento predeterminado). |
OBJ_KERNEL_HANDLE | El identificador se crea en el contexto del proceso del sistema y solo se puede acceder desde el modo kernel. |
OBJ_FORCE_ACCESS_CHECK | La rutina que abre el identificador debe aplicar todas las comprobaciones de acceso para el objeto, incluso si el identificador se abre en modo kernel. |
OBJ_DONT_REPARSE | Si se establece esta marca, no se seguirá ningún punto de reanálisis al analizar el nombre del objeto asociado. Si se producen reanálisis, se producirá un error en el intento y se devolverá un resultado de STATUS_REPARSE_POINT_ENCOUNTERED . Esto se puede usar para determinar si hay puntos de reanálisis en la ruta de acceso del objeto, en escenarios de seguridad. |
OBJ_IGNORE_IMPERSONATED_DEVICEMAP | Un mapa de dispositivo es una asignación entre los nombres de dispositivo DOS y los dispositivos del sistema, y se usa al resolver los nombres de DOS. Existen mapas de dispositivos independientes para cada usuario del sistema y los usuarios pueden administrar sus propios mapas de dispositivos. Normalmente durante la suplantación, se usaría el mapa de dispositivos del usuario suplantado. Sin embargo, cuando se establece esta marca, se usa en su lugar el mapa del dispositivo del usuario del proceso. |
OBJ_VALID_ATTRIBUTES | Reservado. |
SecurityDescriptor
Especifica un descriptor de seguridad (SECURITY_DESCRIPTOR) para el objeto cuando se crea el objeto. Si SecurityDescriptor es NULL
, el objeto recibirá la configuración de seguridad predeterminada. Vea DACL para un nuevo objeto.
SecurityQualityOfService
Calidad opcional del servicio que se va a aplicar al objeto cuando se crea. Se usa para indicar el nivel de suplantación de seguridad y el modo de seguimiento de contexto (dinámico o estático). Actualmente, la macro InitializeObjectAttributes establece este miembro en NULL
.
Comentarios
Use la macro InitializeObjectAttributes para inicializar los miembros de la estructura OBJECT_ATTRIBUTES . Tenga en cuenta que InitializeObjectAttributes inicializa el miembro SecurityQualityOfService en NULL
. Si debe especificar un valor distintoNULL
, establezca el miembro SecurityQualityOfService después de la inicialización.
Para aplicar los atributos contenidos en esta estructura a un identificador de objeto o objeto, pase un puntero a esta estructura a una rutina que tenga acceso a objetos o devuelva identificadores de objeto, como ZwCreateFile o ZwCreateDirectoryObject.
Todos los miembros de esta estructura son de solo lectura. Si un miembro de esta estructura es un puntero, el objeto al que apunta este miembro también es de solo lectura. Los miembros y objetos de solo lectura se pueden usar para adquirir información relevante, pero no se deben modificar. Para establecer los miembros de esta estructura, use la macro InitializeObjectAttributes .
Las rutinas de controlador que se ejecutan en un contexto de proceso distinto del del proceso del sistema deben establecer la marca OBJ_KERNEL_HANDLE para el miembro Attributes (mediante la macro InitializeObjectAttributes). Esto restringe el uso de un identificador abierto para ese objeto a procesos que solo se ejecutan en modo kernel. De lo contrario, el proceso puede acceder al identificador en cuyo contexto se ejecuta el controlador.
Requisitos
Requisito | Valor |
---|---|
Header | ntdef.h (incluya D3dkmthk.h, Ntdef.h, Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h) |