Compartilhar via


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.