阅读:1385回复:3
请问这样和驱动通信可以么?[高分]
我测试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] |
|
|
沙发#
发布于:2004-12-08 13:18
你没有CloseHandle(h)
|
|
|
板凳#
发布于:2004-12-08 14:50
没有关闭句柄
|
|
地板#
发布于: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成功",可再次按下按钮时就显示"通信失败". |
|
|