Condividi tramite


DEVICE_OBJECT struttura (wdm.h)

La struttura DEVICE_OBJECT viene usata dal sistema operativo per rappresentare un oggetto dispositivo. Un oggetto dispositivo rappresenta un dispositivo logico, virtuale o fisico per cui un driver gestisce le richieste di I/O.

Sintassi

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;

Members

Type

Usato dal sistema operativo per indicare che un oggetto è un oggetto dispositivo. Per gli oggetti dispositivo, il valore di questo membro è 3. Si tratta di un membro di sola lettura.

Size

Specifica le dimensioni, in byte, dell'oggetto dispositivo. Questa dimensione include l'estensione del dispositivo specificata dal driver a cui punta il membro DeviceExtension , ma non include l'estensione dell'oggetto dispositivo opaco a cui punta il membro DeviceObjectExtension . Le dimensioni sono un membro di sola lettura.

ReferenceCount

Usato dalla gestione I/O per tenere traccia del numero di handle aperti per il dispositivo associato all'oggetto dispositivo. Ciò consente al gestore I/O di evitare di scaricare un driver quando sono presenti handle in sospeso per i dispositivi del driver. Si tratta di un membro di sola lettura.

DriverObject

Puntatore all'oggetto driver (DRIVER_OBJECT), che rappresenta l'immagine caricata del driver immesso nelle routine DriverEntry e AddDevice . Questo membro viene impostato dal gestore di I/O dopo una chiamata riuscita a IoCreateDevice o IoCreateDeviceSecure. Si tratta di un membro di sola lettura.

NextDevice

Puntatore all'oggetto dispositivo successivo, se presente, creato dallo stesso driver. La gestione I/O aggiorna questo elenco a ogni chiamata riuscita a IoCreateDevice o IoCreateDeviceSecure.

Un driver non Plug and Play (PnP) che viene scaricato deve attraversare ("walk") l'elenco degli oggetti del dispositivo ed eliminarli. Un driver PnP non deve seguire questo elenco di oggetti dispositivo. I driver PnP eseguono invece la pulizia durante l'operazione di rimozione del dispositivo PnP (IRP_MN_REMOVE_DEVICE).

Un driver che ricrea i relativi oggetti dispositivo in modo dinamico usa anche questo membro. Si tratta di un membro di lettura/scrittura.

AttachedDevice

Puntatore all'oggetto dispositivo collegato. Se non è presente alcun oggetto dispositivo collegato, questo membro è NULL. L'oggetto dispositivo a cui punta il membro AttachedDevice in genere è l'oggetto dispositivo di un driver di filtro, che intercetta le richieste di I/O originariamente destinate al dispositivo rappresentato dall'oggetto dispositivo. Per altre informazioni, vedere gli argomenti IoAttachDevice e IoAttachDeviceByPointer . Si tratta di un membro opaco.

CurrentIrp

Puntatore all'IRP corrente se il driver ha una routine StartIo il cui punto di ingresso è stato impostato nell'oggetto driver e se il driver sta attualmente elaborando IRP. In caso contrario, questo membro è NULL. Per altre informazioni, vedere gli argomenti IoStartPacket e IoStartNextPacket. Si tratta di un membro di sola lettura.

Timer

Puntatore a un oggetto timer. Ciò consente al gestore di I/O di chiamare una routine timer fornita dal driver ogni secondo. Per altre informazioni, vedere IoInitializeTimer. Si tratta di un membro di lettura/scrittura.

Flags

I driver di dispositivo eseguono un'operazione OR bit per bit con questo membro negli oggetti dispositivo appena creati usando uno o più dei valori definiti dal sistema seguenti.

Per altre informazioni su come impostare il membro Flags , vedere Inizializzazione di un oggetto Device.

Valore Significato
DO_VERIFY_VOLUME (0x00000002) I driver multimediali rimovibili impostano questo flag durante l'elaborazione delle richieste di trasferimento. Tali driver devono anche verificare la presenza di questo flag nella destinazione per una richiesta di trasferimento prima di trasferire i dati. Per altre informazioni, vedere l'argomento Supporto supporti rimovibili .
DO_BUFFERED_IO (0x00000004) Specifica il tipo di buffering usato dalla gestione I/O per le richieste di I/O inviate allo stack di dispositivi. Driver di livello superiore OR questo membro con lo stesso valore del driver inferiore successivo nello stack, tranne possibilmente per i driver di livello più alto.
DO_EXCLUSIVE (0x00000008) Indica che il driver servizi un dispositivo esclusivo, ad esempio un video, seriale, parallelo o dispositivo audio. I driver WDM non devono impostare questo flag. Per altre informazioni, vedere l'argomento Specifica dell'accesso esclusivo agli oggetti dispositivo .
DO_DIRECT_IO (0x00000010) Vedere DO_BUFFERED_IO.
DO_MAP_IO_BUFFER (0x00000020) Questo flag non viene più usato. I driver non devono impostare questo flag.
DO_DEVICE_INITIALIZING (0x00000080) Gestione I/O imposta questo flag quando crea l'oggetto dispositivo. Un driver di funzione dispositivo o un driver di filtro cancella il flag nella routine AddDevice , dopo di esso: (1) Collega l'oggetto dispositivo allo stack di dispositivi. (2) Stabilisce lo stato di alimentazione del dispositivo. (3) Esegue un'operazione OR bit per bit sul membro con uno dei flag di alimentazione (se necessario). Il gestore Plug and Play (PnP) verifica che il flag sia deselezionato dopo che la routine AddDevice restituisce.
DO_SHUTDOWN_REGISTERED (0x00000800) Usato dal gestore di I/O per indicare che un driver ha registrato l'oggetto dispositivo per le notifiche di arresto. Questo flag non deve essere usato dai driver.
DO_BUS_ENUMERATED_DEVICE (0x00001000) Il sistema operativo imposta questo flag in ogni oggetto dispositivo fisico (PDO). I driver non devono modificare questo flag.
DO_POWER_PAGABLE (0x00002000) I driver impaginabili compatibili con Microsoft Windows 2000 e versioni successive di Windows, non fanno parte del percorso di paging e non richiedono inrush corrente deve impostare questo flag. Il sistema chiama tali driver in IRQL = PASSIVE_LEVEL. I driver non possono impostare sia questo flag che DO_POWER_INRUSH. Tutti i driver per WDM, Microsoft Windows 98 e Windows Millennium Edition devono impostare DO_POWER_PAGABLE.
DO_POWER_INRUSH (0x00004000) I driver di dispositivi che richiedono inrush corrente quando il dispositivo è attivato deve impostare questo flag. Un driver non può impostare sia questo flag che DO_POWER_PAGABLE.
DO_DEVICE_TO_BE_RESET (0x04000000) Il gestore I/O imposta questo flag come segnale per il driver del bus per reimpostare il dispositivo. Altri driver non devono usare questo flag.
DO_DAX_VOLUME (0x10000000) Indica che un volume è un volume DAX.

Characteristics

Specifica una o più costanti definite dal sistema, combinate con un'operazione OR bit per bit, che forniscono informazioni aggiuntive sul dispositivo del driver. Queste costanti includono quanto segue:

Valore Significato
FILE_AUTOGENERATED_DEVICE_NAME Indirizza la gestione I/O per generare un nome per il dispositivo, anziché il chiamante che specifica un Nome dispositivo quando chiama questa routine. Il gestore di I/O assicura che il nome sia univoco. Questa caratteristica è in genere specificata da un driver del bus PnP per generare un nome per un oggetto dispositivo fisico (PDO) per un dispositivo figlio nello stesso bus.
FILE_CHARACTERISTIC_PNP_DEVICE Indica che l'oggetto dispositivo fa parte di uno stack di Plug and Play (PnP). Questa caratteristica è necessaria se un driver del bus (o un driver di filtro del bus) registra il supporto WMI per un oggetto dispositivo che non ha ancora ricevuto la richiesta di IRP_MN_START_DEVICE . FILE_CHARACTERISTIC_PNP_DEVICE è necessario anche se una funzione o un driver di filtro registra per WMI prima di collegarsi allo stack di dispositivi.
FILE_CHARACTERISTIC_TS_DEVICE Indica che l'oggetto dispositivo fa parte di uno stack di dispositivi Servizi terminal. I driver non devono impostare questa caratteristica.
FILE_CHARACTERISTIC_WEBDAV_DEVICE Indica che un file system Di creazione distribuita e controllo delle versioni (WebDAV) basato sul Web viene montato nel dispositivo. I driver non devono impostare questa caratteristica.
FILE_DEVICE_IS_MOUNTED Indica che un file system è montato nel dispositivo. I driver non devono impostare questa caratteristica.
FILE_DEVICE_SECURE_OPEN Indica al gestore di I/O di applicare il descrittore di sicurezza dell'oggetto dispositivo all'apertura relativa e all'apertura del nome del file finale per il dispositivo. Per altre informazioni, vedere l'argomento Controllo dell'accesso allo spazio dei nomi dei dispositivi .
FILE_FLOPPY_DISKETTE Indica che il dispositivo è un dispositivo disco floppy.
FILE_READ_ONLY_DEVICE Indica che il dispositivo non può essere scritto.
FILE_REMOTE_DEVICE Indica che il dispositivo è remoto.
FILE_REMOVABLE_MEDIA Indica che il dispositivo di archiviazione supporta supporti rimovibili. Si noti che questa caratteristica indica supporti rimovibili, non un dispositivo rimovibile. Ad esempio, i driver per i dispositivi di unità JAZ devono specificare questa caratteristica, ma i driver per i dischi flash PCMCIA non devono.
FILE_VIRTUAL_VOLUME Indica che il volume è virtuale. I driver non devono impostare questa caratteristica.
FILE_WRITE_ONCE_MEDIA Indica che il dispositivo supporta supporti write-once. I driver non impostano direttamente questo membro. Per altre informazioni su come impostare le caratteristiche del dispositivo, vedere l'argomento Specifica delle caratteristiche del dispositivo .
FILE_CHARACTERISTIC_CSV Indica che il dispositivo è un volume condiviso cluster (CSV).
FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL IO Manager esegue in genere un controllo di sicurezza completo per l'attraversamento dell'accesso in ogni file aperto quando il client è un contenitore di app. L'impostazione di questo flag ignora questo attraversamento imposto verifica se il token client dispone già di privilegi di attraversamento.
FILE_PORTABLE_DEVICE Indica che lo stack sottostante considera il dispositivo portatile. Viene usato dallo stack di archiviazione e significa che il dispositivo non si trova nel contenitore del computer locale e non si trova in un tipo di bus fisso.

Vpb

Puntatore al blocco di parametri del volume (VPB) associato all'oggetto dispositivo. Per i driver del file system, il VPB può fornire una connessione a qualsiasi oggetto dispositivo logico senza nome che rappresenta un'istanza di un volume montato. Si tratta di un membro opaco.

DeviceExtension

Puntatore all'estensione del dispositivo. La struttura e il contenuto dell'estensione del dispositivo sono definiti dal driver. Le dimensioni sono determinate dal driver, specificate nella chiamata del driver a IoCreateDevice o IoCreateDeviceSecure. Per altre informazioni sulle estensioni del dispositivo, vedere Estensioni del dispositivo. Membro di sola lettura. Tuttavia, l'oggetto a cui punta il membro può essere modificato dal driver.

DeviceType

Impostato da IoCreateDevice e IoCreateDeviceSecure usando il valore specificato per il parametro DeviceType di tale routine. Per altre informazioni, vedere l'argomento Specifica dei tipi di dispositivo .

StackSize

Specifica il numero minimo di percorsi dello stack nei provider di integrazione da inviare a questo driver. IoCreateDevice e IoCreateDeviceSecure impostano questo membro su 1 negli oggetti dispositivo appena creati; i driver di livello più basso possono quindi ignorare questo membro. Il gestore di I/O imposta automaticamente il membro StackSize in un oggetto dispositivo del driver di livello superiore sul valore appropriato se il driver chiama IoAttachDevice o IoAttachDeviceToDeviceToDeviceStack. Solo un driver di livello superiore che si concatena su un altro driver con IoGetDeviceObjectPointer deve impostare in modo esplicito il valore di StackSize nei propri oggetti dispositivo su 1 + il valore StackSize dell'oggetto dispositivo del driver inferiore successivo.

Queue

Usato internamente dal gestore di I/O per accodare l'oggetto dispositivo quando è necessario. Si tratta di un membro opaco.

Queue.ListEntry

Struttura LIST_ENTRY che contiene puntatori avanti e indietro per un elenco collegato doubly.

Queue.Wcb

Informazioni sul contesto di dispositivo usate dal gestore di I/O.

AlignmentRequirement

Specifica il requisito di allineamento degli indirizzi del dispositivo per i trasferimenti di dati. Il valore deve essere uno dei valori FILE_XXX_ALIGNMENT definiti in Wdm.h. Per altre informazioni, vedere gli argomenti Inizializzazione di un oggetto Device, GetDmaAlignment e ZwQueryInformationFile .

DeviceQueue

Oggetto coda del dispositivo per l'oggetto dispositivo. L'oggetto coda del dispositivo contiene tutti i provider di integrazione in attesa di essere elaborati dal driver associato all'oggetto dispositivo. Per altre informazioni, vedere l'argomento Code IRP gestite dal driver . Si tratta di un membro opaco.

Dpc

Oggetto DPC (Deferred Procedure Call) per l'oggetto dispositivo. Per altre informazioni, vedere l'argomento Introduzione agli oggetti DPC . Si tratta di un membro opaco.

ActiveThreadCount

Riservato per utilizzi futuri. Si tratta di un membro opaco.

SecurityDescriptor

Specifica un descrittore di sicurezza (SECURITY_DESCRIPTOR) per l'oggetto dispositivo quando viene creato l'oggetto dispositivo. Se questo membro è NULL, l'oggetto dispositivo riceve le impostazioni di sicurezza predefinite. Si tratta di un membro di sola lettura, anche se il membro può essere modificato tramite la funzione ZwSetSecurityObject .

DeviceLock

Oggetto evento di sincronizzazione allocato dal gestore di I/O. Il gestore di I/O ottiene l'oggetto evento prima di inviare una richiesta di montaggio o di verifica del montaggio a un driver del file system. Si tratta di un membro opaco.

SectorSize

Se l'oggetto dispositivo non rappresenta un volume, questo membro viene impostato su zero. Se l'oggetto dispositivo rappresenta un volume, questo membro specifica le dimensioni del settore del volume, in byte. Il gestore di I/O usa questo membro per assicurarsi che tutte le operazioni di lettura, le operazioni di scrittura e le operazioni di posizione dei file rilasciate siano allineate correttamente quando il buffer intermedio è disabilitato. Quando l'oggetto dispositivo viene creato, viene utilizzato un valore byte di sistema predefinito per settore, ma i driver del file system; e più raramente, i driver legacy e minifilter possono aggiornare questo valore basato sulla geometria dell'hardware del volume sottostante quando si verifica un montaggio. Gli altri driver non devono modificare questo membro.

Spare1

Riservato per l'utilizzo nel sistema. Si tratta di un membro opaco.

DeviceObjectExtension

Puntatore a un'estensione dell'oggetto dispositivo usata dal gestore di I/O e dal gestore PnP per archiviare informazioni sullo stato del dispositivo. Si tratta di un membro opaco.

Reserved

Riservato per l'utilizzo nel sistema. Si tratta di un membro opaco.

Commenti

Il sistema operativo rappresenta i dispositivi in base agli oggetti dispositivo. Per altre informazioni, vedere l'argomento Oggetti dispositivo e Stack di dispositivi .

I driver creano oggetti dispositivo usando le routine IoCreateDevice e IoCreateDeviceSecure . Per altre informazioni su come creare oggetti dispositivo, vedere Creazione di un oggetto Device.

Un oggetto dispositivo è parzialmente opaco. I driver non impostano direttamente i membri dell'oggetto dispositivo, se non diversamente documentato. Per altre informazioni sui membri che i driver possono modificare direttamente, vedere Inizializzazione di un oggetto Device. Per informazioni su altre proprietà dell'oggetto dispositivo, vedere Proprietà degli oggetti dispositivo.

I membri opachi all'interno di un oggetto dispositivo devono essere considerati inaccessibili. I driver con dipendenze dalle posizioni dei membri degli oggetti o l'accesso a membri opachi potrebbero non rimanere portabili e interoperabili con altri driver nel tempo.

Il driver della porta video fornita dal sistema configura i campi degli oggetti dispositivo creati per conto dei driver video miniport.

Il driver di porta SCSI fornito dal sistema configura i campi degli oggetti dispositivo creati per conto dei driver miniport SCSI.

La libreria NDIS fornita dal sistema configura i campi degli oggetti dispositivo creati per conto dei driver miniport NDIS.

Requisiti

Requisito Valore
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)

Vedi anche