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.