阅读:1544回复:1
hid filter driver custom dpc 的问题求助!
各位大侠:
请帮忙看看, CUSTOM dpc 老是出现蓝屏,代码如下: AddDevice中初始化如下: PDEVICE_OBJECT fido; status = IoCreateDevice(DriverObject, sizeof(DEVICE_EXTENSION), NULL, FILE_DEVICE_UNKNOWN, 0, FALSE, &fido); pdx->PollingInterval=RtlConvertLongToLargeInteger(500*-10); KeInitializeTimer(&pdx->PollingTimer); KeInitializeDpc(&pdx->PollingDpc,SamPollingTimerDpc,(PVOID)fido); 在DISPATCH例程中: if ((IoControlCode == IOCTL_INTERNAL_USB_SUBMIT_URB) && (USBfunction == URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER)) { if(pdx->IsMouseStart==TRUE){ KdPrint((\"插入DPC过程处理--》\\n\")); IoMarkIrpPending(Irp); ----------- 挂起IRP,待DPC中完成 KeSetTimer(&pdx->PollingTimer,pdx->PollingInterval,&pdx->PollingDpc); return STATUS_PENDING; VOID SamPollingTimerDpc(IN PKDPC Dpc,IN PVOID Context,IN PVOID SystemArgument1,IN PVOID SystemArgument2) { KdPrint((\"*****TimerDpc****\")); PDEVICE_OBJECT fido=(PDEVICE_OBJECT)Context; PDEVICE_EXTENSION pdx =(PDEVICE_EXTENSION)fido->DeviceExtension; PIRP Irp=fido->CurrentIrp; /* -----------访问堆栈就当机 PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp); PURB urb = (PURB)stack->Parameters.Others.Argument1; */ if(pdx->IsMouseStart==FALSE){ return; } pdx->IsMouseStart=FALSE; /* ------------URB 数据修改 unsigned char* ReportBuffer = (unsigned char*)urb->UrbBulkOrInterruptTransfer.TransferBuffer; urb->UrbBulkOrInterruptTransfer.TransferBufferLength=5; *ReportBuffer=0x1; */ Irp->IoStatus.Status=STATUS_SUCCESS; Irp->IoStatus.Information=5; IoReleaseRemoveLock(&pdx->RemoveLock, Irp); // IoCompleteRequest(Irp,IO_NO_INCREMENT); -------------调用本句当机 KdPrint((\"*****TimerDpc****\")); } |
|
沙发#
发布于:2004-01-16 21:34
up!
|
|