typedef struct _FAST_IO_DISPATCH
{
    unsigned long SizeOfFastIoDispatch;
    unsigned char (*FastIoCheckIfPossible)(FILE_OBJECT *, LARGE_INTEGER *, unsigned long, unsigned char, unsigned long, unsigned char, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    unsigned char (*FastIoRead)(FILE_OBJECT *, LARGE_INTEGER *, unsigned long, unsigned char, unsigned long, void *, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    unsigned char (*FastIoWrite)(FILE_OBJECT *, LARGE_INTEGER *, unsigned long, unsigned char, unsigned long, void *, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    unsigned char (*FastIoQueryBasicInfo)(FILE_OBJECT *, unsigned char, FILE_BASIC_INFORMATION *, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    unsigned char (*FastIoQueryStandardInfo)(FILE_OBJECT *, unsigned char, FILE_STANDARD_INFORMATION *, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    unsigned char (*FastIoLock)(FILE_OBJECT *, LARGE_INTEGER *, LARGE_INTEGER *, EPROCESS *, unsigned long, unsigned char, unsigned char, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    unsigned char (*FastIoUnlockSingle)(FILE_OBJECT *, LARGE_INTEGER *, LARGE_INTEGER *, EPROCESS *, unsigned long, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    unsigned char (*FastIoUnlockAll)(FILE_OBJECT *, EPROCESS *, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    unsigned char (*FastIoUnlockAllByKey)(FILE_OBJECT *, void *, unsigned long, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    unsigned char (*FastIoDeviceControl)(FILE_OBJECT *, unsigned char, void *, unsigned long, void *, unsigned long, unsigned long, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    void (*AcquireFileForNtCreateSection)(FILE_OBJECT *);
    void (*ReleaseFileForNtCreateSection)(FILE_OBJECT *);
    void (*FastIoDetachDevice)(DEVICE_OBJECT *, DEVICE_OBJECT *);
    unsigned char (*FastIoQueryNetworkOpenInfo)(FILE_OBJECT *, unsigned char, FILE_NETWORK_OPEN_INFORMATION *, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    long (*AcquireForModWrite)(FILE_OBJECT *, LARGE_INTEGER *, ERESOURCE **, DEVICE_OBJECT *);
    unsigned char (*MdlRead)(FILE_OBJECT *, LARGE_INTEGER *, unsigned long, unsigned long, MDL **, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    unsigned char (*MdlReadComplete)(FILE_OBJECT *, MDL *, DEVICE_OBJECT *);
    unsigned char (*PrepareMdlWrite)(FILE_OBJECT *, LARGE_INTEGER *, unsigned long, unsigned long, MDL **, IO_STATUS_BLOCK *, DEVICE_OBJECT *);
    unsigned char (*MdlWriteComplete)(FILE_OBJECT *, LARGE_INTEGER *, MDL *, DEVICE_OBJECT *);
    unsigned char (*FastIoReadCompressed)(FILE_OBJECT *, LARGE_INTEGER *, unsigned long, unsigned long, void *, MDL **, IO_STATUS_BLOCK *, COMPRESSED_DATA_INFO *, unsigned long, DEVICE_OBJECT *);
    unsigned char (*FastIoWriteCompressed)(FILE_OBJECT *, LARGE_INTEGER *, unsigned long, unsigned long, void *, MDL **, IO_STATUS_BLOCK *, COMPRESSED_DATA_INFO *, unsigned long, DEVICE_OBJECT *);
    unsigned char (*MdlReadCompleteCompressed)(FILE_OBJECT *, MDL *, DEVICE_OBJECT *);
    unsigned char (*MdlWriteCompleteCompressed)(FILE_OBJECT *, LARGE_INTEGER *, MDL *, DEVICE_OBJECT *);
    unsigned char (*FastIoQueryOpen)(IRP *, FILE_NETWORK_OPEN_INFORMATION *, DEVICE_OBJECT *);
    long (*ReleaseForModWrite)(FILE_OBJECT *, ERESOURCE *, DEVICE_OBJECT *);
    long (*AcquireForCcFlush)(FILE_OBJECT *, DEVICE_OBJECT *);
    long (*ReleaseForCcFlush)(FILE_OBJECT *, DEVICE_OBJECT *);
} FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;