IRP_MJ_DEVICE_CONTROL (driver FS e filtro)
Data di invio
Gestione I/O, altri componenti del sistema operativo e altri driver in modalità kernel inviano richieste di IRP_MJ_DEVICE_CONTROL. In genere, questo IRP viene inviato per conto di un'applicazione in modalità utente che ha chiamato la funzione DeviceIoControl Win32 o per conto di un componente in modalità kernel che ha chiamato ZwDeviceIoControlFile.
Operazione: Driver di file system
Il driver del file system deve estrarre e decodificare l'oggetto file per determinare se la richiesta è stata emessa in un handle aperto. In tal caso, il driver del file system deve passare l'IRP al driver di dispositivo per il dispositivo di archiviazione in cui è montato il volume. In caso contrario, il driver deve avere esito negativo sull'IRP.
Operazione: Driver di filtro del file system legacy
Il driver di filtro deve eseguire qualsiasi elaborazione necessaria e, a seconda della natura del filtro, completare l'IRP o passarlo al driver inferiore successivo nello stack.
Parametri
Un file system o un driver di filtro chiama IoGetCurrentIrpStackLocation per l'IRP specificato per ottenere un puntatore alla propria posizione dello stack in IRP. Nei parametri seguenti, Irp punta a IRP e IrpSp punta al IO_STACK_LOCATION. Il driver può usare le informazioni impostate nei membri seguenti dell'IRP e del percorso dello stack IRP per elaborare una richiesta di controllo del dispositivo.
DeviceObject è un puntatore all'oggetto dispositivo di destinazione.
Irp->AssociateIrp.SystemBuffer punta a un buffer di input fornito dal sistema da passare al driver di dispositivo per il dispositivo di destinazione. Usato per METHOD_BUFFERED o METHOD_DIRECT I/O. Se questo parametro è obbligatorio dipende dal codice di controllo I/O specifico.
Irp->IoStatus punta a una struttura IO_STATUS_BLOCK che riceve lo stato di completamento finale e le informazioni sull'operazione richiesta. Per altre informazioni, vedere la descrizione del parametro IoStatusBlock in ZwDeviceIoControlFile.
Irp->MdlAddress è l'indirizzo di un elenco di descrittori di memoria (MDL) che descrive un buffer di output da passare al driver di dispositivo per il dispositivo di destinazione. Usato per METHOD_DIRECT I/O. Se questo parametro è obbligatorio dipende dal codice di controllo I/O specifico.
Irp->RequestorMode indica la modalità di esecuzione del processo che ha richiesto l'operazione, KernelMode o UserMode.
Irp->UserBuffer punta a un buffer di output fornito dal chiamante da passare al driver del dispositivo per il dispositivo di destinazione. Usato per METHOD_BUFFERED o METHOD_NEITHER I/O. Se questo parametro è facoltativo o obbligatorio dipende dal codice di controllo I/O specifico.
IrpSp->FileObject punta all'oggetto file associato a DeviceObject.
Il parametro IrpSp-FileObject> contiene un puntatore al campo RelatedFileObject, che è anche una struttura FILE_OBJECT. Il campo RelatedFileObject della struttura FILE_OBJECT non è valido durante l'elaborazione di IRP_MJ_DEVICE_CONTROL e non deve essere usato.
IrpSp->MajorFunction è impostato su IRP_MJ_DEVICE_CONTROL.
IrpSp->Parameters.DeviceIoControl.InputBufferLength è la dimensione in byte del buffer a cui punta Irp-AssociatedIrp.SystemBuffer>.
IrpSp->Parameters.DeviceIoControl.IoControlCode è il codice della funzione IOCTL da passare al driver di dispositivo per il dispositivo di destinazione.
Per informazioni dettagliate sulle richieste IOCTL, vedere Uso di codici di controllo I/O e codici di controllo di input del dispositivo e di output nella documentazione di Windows SDK.
IrpSp->Parameters.DeviceIoControl.OutputBufferLength è la dimensione in byte del buffer a cui punta Irp-UserBuffer>.
IrpSp->Parameters.DeviceIoControl.Type3InputBuffer è il buffer di input per le richieste in modalità kernel che usano METHOD_NEITHER.
Vedi anche
IRP_MJ_DEVICE_CONTROL (Informazioni di riferimento sul kernel WDK)
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per