大部分的IRP都源于文件I/O处理Win32API,如CreateFile、ReadFIle等。处理这些IRP最简单的方法是在相应的派遣函数中,将IRP的状态设置为成功,然后结束IRP的请求,并让派遣函数返回成功。结束IRP的请求使用函数IoCompleteRequest。下面的代码演示了一种最简单的处理IRP请求的派遣函数。
NTSTATUS HELLODDKDispatchRoutin(IN PDEVICE_OBJECT pDevObj,IN PIRP pIrp)
{
KdPrint(("Enter HelloDDkDispatchRout in\n"));
//对一般IRP的简单操作,后面会介绍对IRP更复杂的操作
NTSTATUS status=STATUS_SUCCESS;
//设置IRP完成状态
pIrp->IoStatus.Status=status;
//设置IRP操作了多少字节
pIrp->IoStaus.Information=0 //设置这个IRP操作了多少个字节数
IocompleteRequest(pIrp,IO_NO_INCREMENT);
KdPrint(("Leave HelloDDKDispatchRout in\n"));
return status;