supcent
驱动牛犊
驱动牛犊
  • 注册日期2003-12-18
  • 最后登录2005-11-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:930回复:0

求助: HID过滤驱动,CUSTOM DPC的问题

楼主#
更多 发布于:2004-01-16 11:43
各位大侠:
请帮忙看看,
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****\"));
}

游客

返回顶部