IRP-Based operações IOCTL e FSCTL
As seguintes operações de E/S baseadas em IRP usam o método de buffer que corresponde ao tipo de transferência especificado na definição do IOCTL (código de controle de E/S) ou do código de controle do sistema de arquivos (FSCTL):
IRP_MJ_DEVICE_CONTROL
IRP_MJ_FILE_SYSTEM_CONTROL
IRP_MJ_INTERNAL_DEVICE_CONTROL
O tipo de transferência é especificado no parâmetro TransferType da macro CTL_CODE. Para obter o tipo de transferência para um determinado IOCTL ou FSCTL, use a seguinte macro:
#define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
Essa macro retorna um dos seguintes valores:
#define METHOD_BUFFERED 0
#define METHOD_IN_DIRECT 1
#define METHOD_OUT_DIRECT 2
#define METHOD_NEITHER 3
Para obter mais informações sobre a macro CTL_CODE, consulte Definindo códigos de controle de E/S.
Observe que IRP_MJ_DEVICE_CONTROL também pode ser uma operação rápida de E/S. Quando é uma operação de E/S rápida, ela sempre não usa E/S em buffer nem direta, independentemente do tipo de transferência do IOCTL. Para obter mais informações sobre quando IRP_MJ_DEVICE_CONTROL pode ser uma operação de E/S rápida, consulte Operações que podem ser IRP-Based ou E/S rápida.