limee
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1010回复:1

为什么我用异步方式打开设备会失败

楼主#
更多 发布于:2005-04-08 17:01
应用的测试程序如下,驱动程序没有StartIo的IRP串行排队。
使用同步方式打开,驱动工作正常。
异步方式打开,返回错误。哪怕是只发送了一次DeviceIoControl
也不行,请教是为什么?
hDevice=CreateFile(MY_DEVICE_NAME,
                   GENERIC_READ|GENERIC_WRITE,
                   0,
                   NULL,
                   OPEN_EXISTING,
                   FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
                   NULL);
......
      OVERLAPPED   ol;
         if (!(DeviceIoControl(hDevice,
                               START_HELLPWORLD,
                               NULL,
                               0,
                               NULL,
                   NULL);
......
      OVERLAPPED   ol;
         if (!(DeviceIoControl(hDevice,
                               START_HELLPWORLD,
                               NULL,
                               0,
                               NULL,
                               0,
                               &RetBytes,
                               &ol)))
   {
     #ifdef DEBUGMSG
         printf(\"Can\'t deal with the IRP\\n\");
         printf(\"DeviceIoControl() GetLastError reports \\
                %d\\n\",erron);
     #endif
//             CloseHandle(hDevice);
//             return FALSE;
         }
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-04-10 10:02
应用的测试程序如下,驱动程序没有StartIo的IRP串行排队。
使用同步方式打开,驱动工作正常。
异步方式打开,返回错误。哪怕是只发送了一次DeviceIoControl
也不行,请教是为什么?
hDevice=CreateFile(MY_DEVICE_NAME,
                   GENERIC_READ|GENERIC_WRITE,
                   0,
                   NULL,
                   OPEN_EXISTING,
                   FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
                   NULL);
......
      OVERLAPPED   ol;
         if (!(DeviceIoControl(hDevice,
                               START_HELLPWORLD,
                               NULL,
                               0,
                               NULL,
                   NULL);
......
      OVERLAPPED   ol;
         if (!(DeviceIoControl(hDevice,
                               START_HELLPWORLD,
                               NULL,
                               0,
                               NULL,
                               0,
                               &RetBytes,
                               &ol)))
   {
     #ifdef DEBUGMSG
         printf(\"Can\'t deal with the IRP\\n\");
         printf(\"DeviceIoControl() GetLastError reports \\
                %d\\n\",erron);
     #endif
//             CloseHandle(hDevice);
//             return FALSE;
         }
 


OVERLAPPED 结构要清0并创建EVENT才行啊
---内核开发合作或提供基础技术服务QQ:22863668 ---
游客

返回顶部