bigbian
驱动牛犊
驱动牛犊
  • 注册日期2003-08-23
  • 最后登录2013-01-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望74点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
阅读:1385回复:3

请问这样和驱动通信可以么?[高分]

楼主#
更多 发布于:2004-12-07 18:22
我测试NDIS用的win32程序
BOOL GetMyDrvier()
{
ULONG a;
           DWORD dw = sizeof(ULONG);
           HANDLE h          

           h = CreateFile(
//.//NDIShook,
GENERIC_READ,
FILE_SHARE_READ,//| FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
    
if ( h == INVALID_HANDLE_VALUE )
MessageBox("无法打开驱动程序");

else
          {
              if (! DeviceIoControl( h,
  IOCTL_GET_MY_DRIVER,
  NULL,
  0,
  &a,
  dw,
  &dw,
  FALSE)
  )  
              MessageBox("通信失败");
              else   MessageBox("通信成功");
             }
   
}

每次我的win32程序连接了设备后,关闭程序.再次连接驱动程序时就显示"无法打开驱动程序",这是为什么?
请大家指点小弟一二.
 



[编辑 -  12/8/04 by  bigbian]

[编辑 -  12/8/04 by  bigbian]
做人要厚道
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-08 13:18
你没有CloseHandle(h)
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
zgc7622
驱动小牛
驱动小牛
  • 注册日期2003-02-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分136分
  • 威望15点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-08 14:50
没有关闭句柄
bigbian
驱动牛犊
驱动牛犊
  • 注册日期2003-08-23
  • 最后登录2013-01-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望74点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-08 16:47
加上后还是不行啊

HANDLE GetMydriver()
{
  HANDLE h;
  h = CreateFile( ".ndishook",
  GENERIC_READ,
  FILE_SHARE_READ/*|FILE_SHARE_WRITE*/ /*FILE_SHARE_READ*/,
  NULL,
  OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,
  NULL
  );
  if ( h == INVALID_HANDLE_VALUE )
  {
  MessageBox(NULL,"连接驱动失败",NULL,MB_OK);
  return NULL ;
  }
  else return h;
 
}

void SentMyIoctl1 ( HANDLE h )
{
DWORD dwBytes = sizeof(ULONG);
ULONG out;
if ( ! DeviceIoControl( h,
               IOCTL_GET_MY_DRIVER,
NULL,
0,
&out,
dwBytes,
&dwBytes,
FALSE
) )
MessageBox(NULL,"通信失败",NULL,MB_OK);
else
{
MessageBox(NULL,"传送IOCTL_GET_MY_DRIVER成功",NULL,MB_OK);
}
}

void SentMyIoctl2 ( HANDLE h )
{
DWORD dwBytes2 = sizeof(ULONG);
ULONG out2;
if ( ! DeviceIoControl( h,
               IOCTL_GET_MY_DRIVER2,
NULL,
0,
&out2,
dwBytes2,
&dwBytes2,
FALSE
) )
MessageBox(NULL,"通信失败",NULL,MB_OK);
else
{
MessageBox(NULL,"传送IOCTL_GET_MY_DRIVER2成功",NULL,MB_OK);
}
}

void CUSENDISHOOKDlg::OnButtonCommu()
{
// TODO: Add your control notification handler code here
HANDLE h;
h = GetMydriver();
    SentMyIoctl1(h);
CloseHandle(h);
}

void CUSENDISHOOKDlg::OnButtonCommu2()
{
// TODO: Add your control notification handler code here
HANDLE h;
h = GetMydriver();
    SentMyIoctl1(h);
CloseHandle(h);
}

修改后还是第一次可以连接驱动,显示,"传送IOCTL_GET_MY_DRIVER成功",可再次按下按钮时就显示"通信失败".
做人要厚道
游客

返回顶部