一个简单的派遣函数格式
NTSTATUS DispatchFunction(PDEVICE_OBJECT pDeviceObject, PIRP pIrp) { //业务代码区 //设置返回状态 pIrp->IoStatus.Status = STATUS_SUCCESS;//getLastError()得到的值 pIrp->IoStatus.Information = 0; //返回给3环多少数据,没有填0 IoCompleteRequest(pIrp, IO_NO_INCREMENT); DbgPrint("create device success...%d", pDeviceObject->ActiveThreadCount); return STATUS_SUCCESS; }
函数中,设置了IRP的完成状态为STATUS_SUCCESS,这样发起I/O请求的用户层api将会返回TRUE;
反之,会返回FALSE,此时,可以通过GetLastError(),获取错误代码