IRP-Based IOCTL- und FSCTL-Vorgänge

Die folgenden IRP-basierten E/A-Vorgänge verwenden die Puffermethode, die dem Übertragungstyp entspricht, der in der Definition des IOCTL-Codes (IOCTL) oder des Dateisystemsteuerungscodes (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. Verwenden Sie das folgende Makro, um den Übertragungstyp für eine bestimmte IOCTL oder FSCTL abzurufen:

#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 Makros finden Sie unter Definieren von E/A-Steuerungscodes.

Beachten Sie, dass IRP_MJ_DEVICE_CONTROL auch ein schneller E/A-Vorgang sein kann. Wenn es sich um einen schnellen E/A-Vorgang handelt, wird unabhängig vom Übertragungstyp der IOCTL immer weder gepuffert noch direkte E/A verwendet. 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.