阅读:1197回复:14
DeviceIoControl的参数怎么错了???
ULONG nOutput=0;
void* reVal; if (!DeviceIoControl( hDevice, YK_IOCTL_DRIVER_802, NULL, // input data buffer 0, // size of input data buffer reVal, // output data buffer 100, // size of output data buffer &nOutput, NULL) ) { DWORD dError=GetLastError();//87 ->The parameter is incorrect. if(dError==87) AfxMessageBox("87 ->The parameter is incorrect"); |
|
|
沙发#
发布于:2004-12-22 16:33
你跟到驱动的相关部分,看看哪里的问题.
|
|
|
板凳#
发布于:2004-12-22 16:43
reVal, // output data buffer
100, // size of output data buffer 是不要指定一块内存, 不能仅仅void* reVal;这样子吧 |
|
|
地板#
发布于:2004-12-22 17:09
reVal, // output data buffer 对,需要分配空间,堆栈也可以 |
|
|
地下室#
发布于:2004-12-22 19:09
也不正确 char reVal[100];
|
|
|
5楼#
发布于:2004-12-22 19:23
也不正确char* reVal= new char[100];
|
|
|
6楼#
发布于:2004-12-22 20:24
关键是看你驱动部分是如何处理的,STATUS和INFORMATION部分是否都设置正确了,你在应用部分整有什么用??
|
|
|
7楼#
发布于:2004-12-22 20:26
是驱动返回的错误
|
|
8楼#
发布于:2004-12-23 08:30
检查一下驱动端对YK_IOCTL_DRIVER_802的处理
|
|
|
9楼#
发布于:2004-12-23 10:06
非常郁闷:
居然没有输出 handle YK_IOCTL_DRIVER_802 NTSTATUS Camera_DriverDevice::DeviceControl(KIrp I) { NTSTATUS status; t << "Entering Camera_DriverDevice::Device Control, " << I <<"*****"<<I.IoctlCode()<< EOL; switch (I.IoctlCode()) { case YK_IOCTL_DRIVER_802://获得驱动程序版本信息 t<<"handle YK_IOCTL_DRIVER_802"<<EOL; status = YK_IOCTL_DRIVER_802_Handler(I); break; |
|
|
10楼#
发布于:2004-12-23 10:49
那就是驱动端的代码有问题
或者驱动没有正确加载 |
|
|
11楼#
发布于:2004-12-23 10:56
驱动其它功能一切正常!
相关代码我贴出来了! :( |
|
|
12楼#
发布于:2004-12-23 11:04
YK_IOCTL_DRIVER_802
这个值是在驱动程序中定义的,应用程序必须与驱动程序中的一样,所以,看你是否包含了定义它的头文件 |
|
13楼#
发布于:2004-12-23 11:47
你在驱动的该处下断点然后跟踪看看是什么问题.最好看汇编代码这样就很清楚了.
|
|
|
14楼#
发布于:2004-12-23 12:26
你在驱动的该处下断点然后跟踪看看是什么问题 怎么操作?? |
|
|