阅读:1116回复:4
救命啊!UMP蓝屏啦!
我按DS写了个验证的WDM
驱动里为: const char *FIRMWAR_GET=\"SYS OK\"; NTSTATUS NAFPCIDevice::NAFPCI4223_IOCTL_800_Handler(KIrp I) { ULONG fwLength=0; NTSTATUS status = STATUS_SUCCESS; fwLength=strlen(FIRMWAR_GET)+1; t << \"Entering NAFPCIDevice::NAFPCI4223_IOCTL_800_Handler, \" << I << EOL; if(I.IoctlOutputBufferSize()>=fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWAR_GET); return I.Complete(STATUS_SUCCESS); } else{ I.Information()=0; return I.Complete(STATUS_BUFFER_TOO_SMALL); } return status; } 程序中为: HANDLE hDevice; BOOLEAN b; CHAR FirmwareRev[60]; ULONG FirmwareRevSize; hDevice=CreateFile( \"\\\\\\\\.\\\\mydevice\", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if(hDevice==INVALID_HANDLE_VALUE) MessageBox(\"can\'t open the device\",NULL,MB_OK); MessageBox(\"port open\", MB_OK) ; b=DeviceIoControl( hDevice, NAFPCI4223_IOCTL_800, NULL, 0, FirmwareRev, sizeof(FirmwareRev), &FirmwareRevSize, NULL ); CloseHandle(hDevice); } 设备打开都没有问题,到IOCTROL后就蓝屏了!SOFTICE报告说是:MULTIPLE_IRQ_COMPLETE_REQUEST,哪儿不对呢?我实在找不出来!不过对DS的框架,我就只改了IOcontrol的操作,其他没有加。谢谢 |
|
沙发#
发布于:2003-05-28 10:36
同样问下,用inb()获得的是数据怎么传给应用程序?
用什么函数,和什么参数,我在DS上都没有看到!:( |
|
板凳#
发布于:2003-05-28 11:47
return
I.Complete(STATUS_BUFFER_TOO_SMALL); 这句不要用,要不会多重返回的,只返回状态status值就可以了 |
|
地板#
发布于:2003-05-28 13:32
厉害!一语中的,都怪我没认真分析!死机N次后终于得到结果!
但是我用下列语句访问我的板上IO资源,怎么老是死循环呢? 0xc是IO口偏移地址,对基地址而言的。 *(UCHAR*)I.IoctlBuffer()=m_IoPortRange0.inb(0xc); I.Information()=1; return status; |
|
地下室#
发布于:2003-05-29 19:14
???怎么没人回答?
|
|