阅读:1389回复:2
急问使用Kpciconfiguration::readheader()读配置空间的问题(30\')请帮我挑挑毛病,搞了一晚上。头都想破了,也不知道错误在哪。:( 目的:用Kpciconfiguration::readheader()读出9052配置空间头区域的前20字节,返回给应用程序,在屏幕上显示结果。 思路:声明Kpciconfiguration类m_cfg并初始化。写一个执行于passive级的XXhandler(I),Devicecontrol(I)例程判断接收到正确 的CTL_CODE后调用该例程。然后在该例程中调用m_cfg.readheader() 把字节读入到I.IoctlBuffer()中。从而返回给应用程序中的deviceIOcontrol函数。 引用代码: -----驱动部分------- Pci9052Device::Pci9052Device(PDEVICE_OBJECT Pdo, ULONG Unit) :KPnpDevice(Pdo, &Pci9052Device_Guid), m_cfg(NULL) {... m_cfg.Initialize(m_Lower.DeviceObject()); ...} NTSTATUS Pci9052Device::DeviceControl(KIrp I) {... switch (I.IoctlCode()) {... case PCI9052_IOCTL_800: status = PCI9052_IOCTL_800_Handler(I); break; default: ....break;} ...} NTSTATUS Pci9052Device::PCI9052_IOCTL_800_Handler(KIrp I) { NTSTATUS status = STATUS_SUCCESS; m_cfg.ReadHeader((PUCHAR)I.IoctlBuffer(), 0, 20); I.Information() = 20; return status; } -----应用程序部分----- #define IOCTL_OUTBUF_SIZE 20 void Test_PCI9052_IOCTL_800(void) { PUCHAR bufOutput[IOCTL_OUTBUF_SIZE]; ULONG nOutput; printf(\"Issuing Ioctl to device - \"); if ( DeviceIoControl(hDevice, PCI9052_IOCTL_800,NULL,0, bufOutput, IOCTL_OUTBUF_SIZE,&nOutput,NULL)) {// 打印返回的结果 int j,i = 0; while(i < IOCTL_OUTBUF_SIZE) { j = min((i+26),IOCTL_OUTBUF_SIZE); for(; i < j; i++) {printf(\"%c, \", bufOutput); } printf(\"\\n\"); } //打印返回的字节数 printf(\"%d bytes read from device.\\n\", nOutput);} //打印出错信息 else { printf(\"ERROR: DeviceIoControl returns 0x.\", GetLastError()); Exit(1); } } 运行应用程序总是提示上面的出错信息。大侠教我 |
|
|
沙发#
发布于:2003-10-18 09:22
驱动程序有错
|
|
|
板凳#
发布于:2003-10-18 17:33
具体发我信箱吧,多谢
|
|
|