Funzione IoGetDeviceObjectPointer (wdm.h)
La routine IoGetDeviceObjectPointer restituisce un puntatore all'oggetto superiore nello stack dell'oggetto dispositivo denominato e un puntatore all'oggetto file corrispondente, se l'accesso richiesto agli oggetti può essere concesso.
Sintassi
NTSTATUS IoGetDeviceObjectPointer(
[in] PUNICODE_STRING ObjectName,
[in] ACCESS_MASK DesiredAccess,
[out] PFILE_OBJECT *FileObject,
[out] PDEVICE_OBJECT *DeviceObject
);
Parametri
[in] ObjectName
Puntatore a un buffer contenente una stringa Unicode che corrisponde al nome dell'oggetto dispositivo.
[in] DesiredAccess
Specifica il valore ACCESS_MASK che rappresenta l'accesso desiderato. In genere DesiredAccess è FILE_READ_DATA. Raramente, vengono specificati i diritti di accesso FILE_WRITE_DATA o FILE_ALL_ACCESS.
[out] FileObject
Puntatore all'oggetto file che rappresenta l'oggetto dispositivo corrispondente al codice in modalità utente se la chiamata ha esito positivo.
[out] DeviceObject
Puntatore all'oggetto dispositivo che rappresenta il dispositivo logico, virtuale o fisico denominato se la chiamata ha esito positivo.
Valore restituito
IoGetDeviceObjectPointer restituisce STATUS_SUCCESS se ha esito positivo. I valori restituiti di errore possibili includono i codici di stato seguenti:
STATUS_OBJECT_TYPE_MISMATCH
STATUS_INVALID_PARAMETER
STATUS_PRIVILEGE_NOT_HELD
STATUS_INSUFFICIENT_RESOURCES
STATUS_OBJECT_NAME_INVALID
Commenti
IoGetDeviceObjectPointer stabilisce una "connessione" tra il chiamante e il driver di livello inferiore successivo. Un chiamante riuscito può usare il puntatore all'oggetto dispositivo restituito per inizializzare i propri oggetti dispositivo. Può anche essere usato come argomento per IoAttachDeviceToDeviceStack, IoCallDriver e qualsiasi routine che crea i runtime di integrazione per i driver inferiori. Il puntatore restituito è un argomento obbligatorio per IoCallDriver.
Questa routine restituisce anche un puntatore all'oggetto file corrispondente. Durante lo scaricamento, un driver può dereferenziare l'oggetto file come mezzo per dereferenziare indirettamente l'oggetto dispositivo. A tale scopo, il driver chiama ObDereferenceObject dalla routine Unload, passando il puntatore all'oggetto file restituito da IoGetDeviceObjectPointer. L'errore di dereferenziare l'oggetto dispositivo nella routine Scarica di un driver impedisce che il driver successivo venga scaricato. Tuttavia, i driver che chiudono l'oggetto file prima del processo di scaricamento devono rimuovere un riferimento aggiuntivo nell'oggetto dispositivo prima di dereferenziare l'oggetto file. In caso contrario, la dereferenziazione dell'oggetto file può causare un'eliminazione prematura dell'oggetto dispositivo.
Per ottenere un puntatore al driver di livello più elevato nello stack di driver del file system, un driver deve assicurarsi che il file system sia montato; in caso contrario, questa routine attraversa lo stack di dispositivi di archiviazione. Per assicurarsi che il file system sia montato nel dispositivo di archiviazione, il driver deve specificare una maschera di accesso appropriata, ad esempio FILE_READ_DATA o FILE_WRITE_ATTRIBUTES, nel parametro DesiredAccess . Se si specifica FILE_READ_ATTRIBUTES non viene montato il file system.
Dopo che qualsiasi driver di livello superiore si è concatenato su un altro driver chiamando correttamente questa routine, il driver di livello superiore deve impostare il campo StackSize nel relativo oggetto dispositivo su quello dell'oggetto dispositivo del driver di livello inferiore successivo più uno.
I chiamanti di IoGetDeviceObjectPointer devono essere in esecuzione in IRQL = PASSIVE_LEVEL.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile a partire da Windows 2000. |
Piattaforma di destinazione | Universale |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Regole di conformità DDI | HwStorPortProhibitedDDIs(storport), IrqlIoPassive5(wdm), PowerIrpDDis(wdm) |