NTSTATUS DefaultDispatch(PDEVICE_OBJECT pDeviceObject,PIRP pIrp)
{
IRPCompleteCallBackArg *cbArg;//传到回调中的结构参数
switch (irpStack->MajorFunction)
{
case IRP_MJ_CREATE:
cbArg=(IRPCompleteCallBackArg*)ExAllocatePool(PagedPool,sizeof(IRPCompleteCallBackArg));
cbArg->create_IrpStack=irpStack;
cbArg->queryIrp=query_irp;
cbArg->sourceDevice=srcDevice;
IoSetCompletionRoutine(pIrp,CompletedFunction,(PVOID)cbArg,TRUE,TRUE,TRUE);
break;
}
......略....
}
回调函数:
NTSTATUS CompletedFunction(PVOID context)//
{
//问题出在这里,这里的context为什么一直是NULL,无法将值传过来...
IRPCompleteCallBackArg *cbArg=(IRPCompleteCallBackArg*)context;
ASSERT(cbArg);
KdPrint(("---=== %s \n",str));
//KdPrint(("完成函数被执行 IRP指针:0x%x 源设备指针:0x%x IRP栈指针:0x%x...\n",cbArg->queryIrp,cbArg->sourceDevice,cbArg->create_IrpStack));
return STATUS_SUCCESS;
}
回调函数中的上下文参数总是NULL,,,,也就是说没有将参数传入回调函数中...如何将内容传入回调函数中???
------解决方案--------------------
Context必须用非分页内存.