IRP-Based IOCTL- und FSCTL-Operationen

Die folgenden IRP-basierten E/A-Vorgänge verwenden die Puffermethode, die dem Transfertyp entspricht, der in der Definition des I/O-Kontrollcodes (IOCTL) oder des Dateisystemkontrollcodes (FSCTL) angegeben ist:

  • IRP_MJ_DEVICE_CONTROL

  • IRP_MJ_FILE_SYSTEM_CONTROL

  • IRP_MJ_INTERNAL_DEVICE_CONTROL

Der Übertragungstyp wird im TransferType-Parameter des CTL_CODE-Makros angegeben. Um den Übertragungstyp für eine bestimmte IOCTL oder FSCTL zu erhalten, verwenden Sie das folgende Makro:

#define METHOD_FROM_CTL_CODE(ctrlCode)         ((ULONG)(ctrlCode & 3))

Dieses Makro gibt einen der folgenden Werte zurück:

#define METHOD_BUFFERED                 0
#define METHOD_IN_DIRECT                1
#define METHOD_OUT_DIRECT               2
#define METHOD_NEITHER                  3

Weitere Informationen zum CTL_CODE-Makro finden Sie unter Definieren von E/A-Steuercodes.

Beachten Sie, dass IRP_MJ_DEVICE_CONTROL auch eine schnelle E/A-Operation sein kann. Wenn es sich um einen schnellen E/A-Vorgang handelt, verwendet er unabhängig vom Übertragungstyp des IOCTL immer weder gepuffert noch direkte E/A. Weitere Informationen dazu, wann IRP_MJ_DEVICE_CONTROL ein schneller E/A-Vorgang sein kann, finden Sie unter Vorgänge, die IRP-Based oder schnelle E/A-Vorgänge sein können.