Condividi tramite


IRP_MJ_INTERNAL_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_INTERNAL_DEVICE_CONTROL.

A differenza delle richieste IRP_MJ_DEVICE_CONTROL , le richieste di IRP_MJ_INTERNAL_DEVICE_CONTROL vengono usate solo per la comunicazione tra i componenti in modalità kernel. Anche se una richiesta di IRP_MJ_DEVICE_CONTROL in genere ha origine con una chiamata a DeviceIoControl o ZwDeviceIoControlFile, queste routine non possono creare richieste di IRP_MJ_INTERNAL_DEVICE_CONTROL. Tuttavia, entrambi i tipi di IRP possono essere creati chiamando IoBuildDeviceIoControlRequest.

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 che rappresenta un volume 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 con l'IRP specificato per ottenere un puntatore alla propria posizione dello stack nell'IRP, illustrato nell'elenco seguente come IrpSp. ( L'IRP viene visualizzato come Irp.) Il driver può usare le informazioni impostate nei membri seguenti dell'IRP e del percorso dello stack IRP nell'elaborazione di 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. Questo parametro viene 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_INTERNAL_DEVICE_CONTROL e non deve essere usato.

  • IrpSp->MajorFunction è impostato su IRP_MJ_INTERNAL_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 usando METHOD_NEITHER.

Vedi anche

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoBuildDeviceIoControlRequest

IoGetCurrentIrpStackLocation

IoGetFunctionCodeFromCtlCode

IRP

IRP_MJ_DEVICE_CONTROL

IRP_MJ_INTERNAL_DEVICE_CONTROL (Informazioni di riferimento sul kernel WDK)

Uso dei codici di controllo I/O

ZwDeviceIoControlFile