windows驱动IoSetCompletionRoutine向回调传值有关问题

windows驱动IoSetCompletionRoutine向回调传值问题.

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必须用非分页内存.