estructura DEVICE_OBJECT (wdm.h)

El sistema operativo usa la estructura DEVICE_OBJECT para representar un objeto de dispositivo. Un objeto de dispositivo representa un dispositivo lógico, virtual o físico para el que un controlador controla las solicitudes de E/S.

Sintaxis

typedef struct _DEVICE_OBJECT {
  CSHORT                   Type;
  USHORT                   Size;
  LONG                     ReferenceCount;
  struct _DRIVER_OBJECT    *DriverObject;
  struct _DEVICE_OBJECT    *NextDevice;
  struct _DEVICE_OBJECT    *AttachedDevice;
  struct _IRP              *CurrentIrp;
  PIO_TIMER                Timer;
  ULONG                    Flags;
  ULONG                    Characteristics;
  __volatile PVPB          Vpb;
  PVOID                    DeviceExtension;
  DEVICE_TYPE              DeviceType;
  CCHAR                    StackSize;
  union {
    LIST_ENTRY         ListEntry;
    WAIT_CONTEXT_BLOCK Wcb;
  } Queue;
  ULONG                    AlignmentRequirement;
  KDEVICE_QUEUE            DeviceQueue;
  KDPC                     Dpc;
  ULONG                    ActiveThreadCount;
  PSECURITY_DESCRIPTOR     SecurityDescriptor;
  KEVENT                   DeviceLock;
  USHORT                   SectorSize;
  USHORT                   Spare1;
  struct _DEVOBJ_EXTENSION *DeviceObjectExtension;
  PVOID                    Reserved;
} DEVICE_OBJECT, *PDEVICE_OBJECT;

Miembros

Type

Usado por el sistema operativo para indicar que un objeto es un objeto de dispositivo. En el caso de los objetos de dispositivo, el valor de este miembro es 3. Se trata de un miembro de solo lectura.

Size

Especifica el tamaño, en bytes, del objeto de dispositivo. Este tamaño incluye la extensión de dispositivo especificada por el controlador a la que apunta el miembro DeviceExtension , pero no incluye la extensión de objeto de dispositivo opaco a la que apunta el miembro DeviceObjectExtension . Size es un miembro de solo lectura.

ReferenceCount

Usado por el administrador de E/S para realizar un seguimiento del número de identificadores abiertos del dispositivo asociado al objeto de dispositivo. Esto permite que el administrador de E/S evite descargar un controlador cuando haya controladores pendientes para los dispositivos del controlador. Se trata de un miembro de solo lectura.

DriverObject

Puntero al objeto driver (DRIVER_OBJECT), que representa la imagen cargada del controlador que se ha introducido en las rutinas DriverEntry y AddDevice . El administrador de E/S establece este miembro tras una llamada correcta a IoCreateDevice o IoCreateDeviceSecure. Se trata de un miembro de solo lectura.

NextDevice

Puntero al siguiente objeto de dispositivo, si existe, creado por el mismo controlador. El administrador de E/S actualiza esta lista en cada llamada correcta a IoCreateDevice o IoCreateDeviceSecure.

Un controlador que no sea Plug and Play (PnP) que se está descargando debe atravesar ("walk") la lista de sus objetos de dispositivo y eliminarlos. Un controlador PnP no tiene que recorrer esta lista de objetos de dispositivo. En su lugar, los controladores PnP realizan su limpieza durante la operación de eliminación del dispositivo PnP (IRP_MN_REMOVE_DEVICE).

Un controlador que vuelve a crear sus objetos de dispositivo dinámicamente también usa este miembro. Se trata de un miembro de lectura y escritura.

AttachedDevice

Puntero al objeto de dispositivo conectado. Si no hay ningún objeto de dispositivo conectado, este miembro es NULL. El objeto de dispositivo al que apunta el miembro AttachedDevice suele ser el objeto de dispositivo de un controlador de filtro, que intercepta las solicitudes de E/S destinadas originalmente al dispositivo que representa el objeto device. Para obtener más información, consulte los temas IoAttachDevice e IoAttachDeviceByPointer . Se trata de un miembro opaco.

CurrentIrp

Puntero al IRP actual si el controlador tiene una rutina StartIo cuyo punto de entrada se estableció en el objeto de controlador y si el controlador está procesando irP actualmente. De lo contrario, este miembro es NULL. Para más información, consulte los temas IoStartPacket e IoStartNextPacket . Se trata de un miembro de solo lectura.

Timer

Puntero a un objeto de temporizador. Esto permite que el administrador de E/S llame a una rutina de temporizador proporcionada por el controlador cada segundo. Para más información, consulte IoInitializeTimer. Se trata de un miembro de lectura y escritura.

Flags

Los controladores de dispositivo realizan una operación OR bit a bit con este miembro en sus objetos de dispositivo recién creados mediante uno o varios de los siguientes valores definidos por el sistema:

DO_BUFFERED_IO o DO_DIRECT_IO

Especifica el tipo de almacenamiento en búfer que usa el administrador de E/S para las solicitudes de E/S que se envían a la pila de dispositivos. Controladores de nivel superior O este miembro con el mismo valor que el controlador siguiente inferior de la pila, excepto posiblemente para los controladores de nivel superior.

DO_BUS_ENUMERATED_DEVICE

El sistema operativo establece esta marca en cada objeto de dispositivo físico (PDO). Los controladores no deben modificar esta marca.

DO_DEVICE_INITIALIZING

El administrador de E/S establece esta marca cuando crea el objeto de dispositivo. Un controlador de función de dispositivo o el controlador de filtro borra la marca en su rutina AddDevice , después de hacer lo siguiente:

  • Asocia el objeto de dispositivo a la pila de dispositivos.
  • Establece el estado de alimentación del dispositivo.
  • Realiza una operación OR bit a bit en el miembro con una de las marcas de alimentación (si es necesario).
El administrador de Plug and Play (PnP) comprueba que la marca está desactivada después de que se devuelva la rutina AddDevice.

DO_EXCLUSIVE

Indica que el controlador atiende un dispositivo exclusivo, como un dispositivo de vídeo, serie, paralelo o sonido. Los controladores WDM no deben establecer esta marca. Para obtener más información, consulte el tema Especificar acceso exclusivo a objetos de dispositivo .

DO_MAP_IO_BUFFER

Esta marca ya no se usa. Los controladores no deben establecer esta marca.

DO_POWER_INRUSH

Los controladores de los dispositivos que requieren el pincel actual cuando el dispositivo está activado deben establecer esta marca. Un controlador no puede establecer esta marca y DO_POWER_PAGABLE.

DO_POWER_PAGABLE

Los controladores paginables que son compatibles con Microsoft Windows 2000 y versiones posteriores de Windows, no forman parte de la ruta de acceso de paginación y no requieren que el elemento actual del pincel establezca esta marca. El sistema llama a estos controladores en IRQL = PASSIVE_LEVEL. Los controladores no pueden establecer esta marca y DO_POWER_INRUSH. Todos los controladores para WDM, Microsoft Windows 98 y Windows Millennium Edition deben establecer DO_POWER_PAGABLE.

DO_SHUTDOWN_REGISTERED

Usado por el administrador de E/S para indicar que un controlador ha registrado el objeto de dispositivo para las notificaciones de apagado. Los controladores no deben usar esta marca.

DO_VERIFY_VOLUME

Los controladores de medios extraíbles establecen esta marca mientras procesan las solicitudes de transferencia. Estos controladores también deben comprobar esta marca en el destino de una solicitud de transferencia antes de transferir datos. Para obtener más información, vea el tema Compatibilidad con medios extraíbles .

Para obtener más información sobre cómo establecer el miembro Flags , vea Inicializar un objeto device.

Characteristics

Especifica una o varias constantes definidas por el sistema, combinadas con una operación OR bit a bit, que proporcionan información adicional sobre el dispositivo del controlador. Estas constantes incluyen lo siguiente:

FILE_AUTOGENERATED_DEVICE_NAME

Dirige al administrador de E/S para generar un nombre para el dispositivo, en lugar del autor de la llamada que especifica un DeviceName cuando llama a esta rutina. El administrador de E/S se asegura de que el nombre es único. Esta característica se especifica normalmente mediante un controlador de bus PnP para generar un nombre para un objeto de dispositivo físico (PDO) para un dispositivo secundario en el mismo bus. Esta característica es nueva a partir de Microsoft Windows 2000 y Microsoft Windows 98.

FILE_CHARACTERISTIC_PNP_DEVICE

Indica que el objeto de dispositivo forma parte de una pila de Plug and Play (PnP). Esta característica es necesaria si un controlador de bus (o controlador de filtro de bus) registra la compatibilidad con WMI para un objeto de dispositivo que aún no ha recibido la solicitud de IRP_MN_START_DEVICE . FILE_CHARACTERISTIC_PNP_DEVICE también es necesario si una función o un controlador de filtro se registra para WMI antes de conectarse a su pila de dispositivos.

FILE_CHARACTERISTIC_TS_DEVICE

Indica que el objeto de dispositivo forma parte de una pila de dispositivos de Terminal Services. Los controladores no deben establecer esta característica.

FILE_CHARACTERISTIC_WEBDAV_DEVICE

Indica que un sistema de archivos de creación y control de versiones distribuidos basado en web (WebDAV) está montado en el dispositivo. Los controladores no deben establecer esta característica.

FILE_DEVICE_IS_MOUNTED

Indica que un sistema de archivos está montado en el dispositivo. Los controladores no deben establecer esta característica.

FILE_DEVICE_SECURE_OPEN

Dirige al administrador de E/S para aplicar el descriptor de seguridad del objeto de dispositivo a las aperturas relativas y se abre el nombre de archivo final del dispositivo. Para obtener más información, consulte el tema Control del acceso al espacio de nombres de dispositivo.

FILE_FLOPPY_DISKETTE

Indica que el dispositivo es un dispositivo de disquete.

FILE_READ_ONLY_DEVICE

Indica que el dispositivo no se puede escribir en.

FILE_REMOTE_DEVICE

Indica que el dispositivo es remoto.

FILE_REMOVABLE_MEDIA

Indica que el dispositivo de almacenamiento admite medios extraíbles. Observe que esta característica indica medios extraíbles, no un dispositivo extraíble. Por ejemplo, los controladores para dispositivos de unidad JAZ deben especificar esta característica, pero los controladores para los discos flash PCMCIA no deben.

FILE_VIRTUAL_VOLUME

Indica que el volumen es virtual. Los controladores no deben establecer esta característica.

FILE_WRITE_ONCE_MEDIA

Indica que el dispositivo admite medios de escritura una vez. Los controladores no establecen este miembro directamente. Para obtener más información sobre cómo establecer las características del dispositivo, consulte el tema Especificación de características del dispositivo .

FILE_CHARACTERISTIC_CSV

Indica que el dispositivo es un volumen compartido de clúster (CSV).

FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL

Normalmente, el Administrador de E/S realiza una comprobación de seguridad completa para recorrer el acceso en cada archivo abierto cuando el cliente es un contenedor de aplicaciones. La configuración de esta marca omite esta comprobación de acceso de recorrido aplicada si el token de cliente ya tiene privilegios de recorrido.

FILE_PORTABLE_DEVICE

Indica que la pila subyacente considera el dispositivo portátil. Esto lo usa la pila de almacenamiento y significa que el dispositivo no está en el contenedor del equipo local y no está en un tipo de bus fijo.

Vpb

Puntero al bloque de parámetros de volumen (VPB) asociado al objeto de dispositivo. En el caso de los controladores del sistema de archivos, el VPB puede proporcionar una conexión a cualquier objeto de dispositivo lógico sin nombre que represente una instancia de un volumen montado. Se trata de un miembro opaco.

DeviceExtension

Puntero a la extensión del dispositivo. La estructura y el contenido de la extensión de dispositivo están definidos por el controlador. El tamaño está determinado por el controlador, especificado en la llamada del controlador a IoCreateDevice o IoCreateDeviceSecure. Para obtener más información sobre las extensiones de dispositivo, consulte Extensiones de dispositivo. Se trata de un miembro de solo lectura. Sin embargo, el controlador puede modificar el objeto al que apunta el miembro.

DeviceType

Establezca por IoCreateDevice e IoCreateDeviceSecure mediante el valor especificado para el parámetro DeviceType de esa rutina. Para obtener más información, consulte el tema Especificar tipos de dispositivo .

StackSize

Especifica el número mínimo de ubicaciones de pila en IRP que se enviarán a este controlador. IoCreateDevice e IoCreateDeviceSecure establecen este miembro en 1 en objetos de dispositivo recién creados; Por lo tanto, los controladores de nivel más bajo pueden omitir este miembro. El administrador de E/S establece automáticamente el miembro StackSize en un objeto de dispositivo del controlador de nivel superior en el valor adecuado si el controlador llama a IoAttachDevice o IoAttachDeviceToDeviceStack. Solo un controlador de nivel superior que se encadene a otro controlador con IoGetDeviceObjectPointer debe establecer explícitamente el valor de StackSize en sus propios objetos de dispositivo en 1 + el valor StackSize del objeto de dispositivo del controlador inferior siguiente.

Queue

Usado internamente por el administrador de E/S para poner en cola el objeto de dispositivo cuando es necesario. Se trata de un miembro opaco.

Queue.ListEntry

Estructura LIST_ENTRY que contiene punteros hacia delante y hacia atrás para una lista vinculada doblemente.

Queue.Wcb

Información de contexto del dispositivo usada por el administrador de E/S.

AlignmentRequirement

Especifica el requisito de alineación de direcciones del dispositivo para las transferencias de datos. El valor debe ser uno de los valores FILE_XXX_ALIGNMENT definidos en Wdm.h. Para obtener más información, consulte los temas Inicialización de un objeto de dispositivo, GetDmaAlignment y ZwQueryInformationFile .

DeviceQueue

Objeto de cola de dispositivos para el objeto de dispositivo. El objeto de cola de dispositivos contiene los IRP que están esperando ser procesados por el controlador asociado al objeto de dispositivo. Para obtener más información, consulte el tema Colas de IRP administradas por controladores . Se trata de un miembro opaco.

Dpc

Objeto de llamada a procedimiento diferido (DPC) para el objeto de dispositivo. Para obtener más información, vea el tema Introducción a objetos DPC . Se trata de un miembro opaco.

ActiveThreadCount

Reservado para uso futuro. Se trata de un miembro opaco.

SecurityDescriptor

Especifica un descriptor de seguridad (SECURITY_DESCRIPTOR) para el objeto de dispositivo cuando se crea el objeto de dispositivo. Si este miembro es NULL, el objeto de dispositivo recibe la configuración de seguridad predeterminada. Se trata de un miembro de solo lectura, aunque el miembro se puede modificar a través de la función ZwSetSecurityObject.

DeviceLock

Objeto de evento de sincronización asignado por el administrador de E/S. El administrador de E/S obtiene su objeto de evento antes de enviar una solicitud de montaje o comprobación de montaje a un controlador del sistema de archivos. Se trata de un miembro opaco.

SectorSize

Si el objeto de dispositivo no representa un volumen, este miembro se establece en cero. Si el objeto de dispositivo representa un volumen, este miembro especifica el tamaño del sector del volumen, en bytes. El administrador de E/S usa este miembro para asegurarse de que todas las operaciones de lectura, las operaciones de escritura y establecer las operaciones de posición de archivo emitidas se alinean correctamente cuando se deshabilita el almacenamiento en búfer intermedio. Sin embargo, se usa un valor predeterminado de bytes por sector del sistema cuando se crea el objeto de dispositivo, sin embargo, controladores del sistema de archivos; y, más raramente, los controladores heredados y minifiltros pueden actualizar este valor que se basa en la geometría del hardware del volumen subyacente cuando se produce un montaje. Otros controladores no deben modificar este miembro.

Spare1

Reservado para uso del sistema. Se trata de un miembro opaco.

DeviceObjectExtension

Puntero a una extensión de objeto de dispositivo que usa el administrador de E/S y el administrador de PnP para almacenar información sobre el estado del dispositivo. Se trata de un miembro opaco.

Reserved

Reservado para uso del sistema. Se trata de un miembro opaco.

Comentarios

El sistema operativo representa los dispositivos por objetos de dispositivo. Para obtener más información, consulte el tema Objetos de dispositivo y Pilas de dispositivos .

Los controladores crean objetos de dispositivo mediante las rutinas IoCreateDevice e IoCreateDeviceSecure . Para obtener más información sobre cómo crear objetos de dispositivo, consulte Creación de un objeto device.

Un objeto de dispositivo es parcialmente opaco. Los controladores no establecen miembros del objeto de dispositivo directamente, a menos que se documente lo contrario. Para obtener más información sobre los miembros que los controladores pueden modificar directamente, consulte Inicialización de un objeto de dispositivo. Para obtener información sobre otras propiedades de objetos de dispositivo, vea Propiedades de objetos de dispositivo.

Los miembros opacos de un objeto de dispositivo deben considerarse inaccesibles. Es posible que los controladores que tengan dependencias en las ubicaciones de los miembros del objeto o el acceso a miembros opacos no permanezcan portátiles e interoperables con otros controladores a lo largo del tiempo.

El controlador de puerto de vídeo proporcionado por el sistema configura los campos de los objetos de dispositivo que crea en nombre de los controladores de miniporte de vídeo.

El controlador de puerto SCSI proporcionado por el sistema configura los campos de los objetos de dispositivo que crea en nombre de los controladores de miniporte SCSI.

La biblioteca NDIS proporcionada por el sistema configura los campos de los objetos de dispositivo que crea en nombre de los controladores de miniporte de NDIS.

Requisitos

   
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)

Consulte también

DRIVER_OBJECT

IoAttachDevice

IoAttachDeviceToDeviceStack

IoCreateDevice

IoDeleteDevice

IoGetDeviceObjectPointer