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

hid filter driver custom dpc 的问题求助!

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

Yss
Yss
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2005-06-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-16 21:34
up!
游客

返回顶部