- 创建IRP
IoBuildSynchronousFsdRequest
创建同步IRP
IoBuildAsynchronouseFsdRequest
创建异步IRP
类型: IRP_MJ_PNP , IRP_MJ_READ , IRP_MJ_WRITE , IRP_MJ_FLUSH_BUFFERS , IRP_MJ_SHUTDOWN
IoBuildDeviceIoControlRequest
创建同步IRP
类型: IRP_MJ_INTERNAL_DEVICE_CONTROL , IRP_MJ_DEVICE_CONTROL
以上3个函数是调用此函数实现的,系统自动删除IRP,而此函数需要手动调用IoFreeIrp删除IRP
IoAllocateIrp
创建任意类型IRP
- 派遣IRP
IoCallDriver
步骤:
- 获得设备对象指针(非句柄)
- 创建IRP
- 构造IRP的I/O堆栈
- 调用IoCallDriver内核函数,内部会调用派遣函数