Share via


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

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoBuildDeviceIoControlRequest

IoGetCurrentIrpStackLocation

IoGetFunctionCodeFromCtlCode

IRP

IRP_MJ_DEVICE_CONTROL (Informazioni di riferimento sul kernel WDK)

Uso dei codici di controllo I/O

ZwDeviceIoControlFile