hnfudy
驱动牛犊
驱动牛犊
  • 注册日期2004-08-19
  • 最后登录2005-06-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1923回复:5

关于监控USB设备

楼主#
更多 发布于:2004-09-21 16:39
  我想在文件过滤驱动里能监测USB设备的插入和拔出。在有USB插入时就attach一个filter到这个设备上,拔出的时候就unattach。看filemon的源码发现它没有实现这样的功能,请高手指教该如何实现?
KingV
驱动牛犊
驱动牛犊
  • 注册日期2001-11-27
  • 最后登录2006-08-04
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-27 14:51
用IoRegisterPlugPlayNotification可以监控到已知的USB设备的插入和移出,前提是你知道该设备的GUID,但根据DDK文档的说明似乎该函数不能针对任意的USB设备!但可以肯定的是,如果你知道某个USB设备的GUID,那么这个功能肯定能实现!我曾经做过类似的一个驱动,完全没有问题!
myelan
驱动牛犊
驱动牛犊
  • 注册日期2002-08-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-11-15 10:19
顶一下:)
足球是我的一部分
gooyan
驱动牛犊
驱动牛犊
  • 注册日期2004-08-16
  • 最后登录2007-10-10
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-11-17 22:29
你可以在上层获得加载信息,很简单用VC实现,然后传给驱动
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-11-18 09:53
 我想在文件过滤驱动里能监测USB设备的插入和拔出。在有USB插入时就attach一个filter到这个设备上,拔出的时候就unattach。看filemon的源码发现它没有实现这样的功能,请高手指教该如何实现?

总线过滤驱动,
不停学习
newkey
驱动小牛
驱动小牛
  • 注册日期2002-10-03
  • 最后登录2013-10-13
  • 粉丝1
  • 关注0
  • 积分45分
  • 威望392点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-11-18 13:24
csdn faq


你好,用过U盘的都知道,如果要安全的拔除U盘,必须通过右下的”安全拔下或弹出“的小工具来进行。我现在想自己写一段代码来安全地删除某个usb设备,不知如何下手,请高手赐教。  
 
谢谢。  
 
 
完整代码如下,在VC6,2000环境下编译通过。  
谢谢大家捧场,特别感谢codewarrior(会思考的草)和  holyeagle(一杯清茶)两位朋友,没有你们我肯定解决不了这个问题。另外,也感谢tikomo  software(日本),他们的例子让我少走了许多弯路。  
 
谢谢大家,散分了.  
 
#include  <tchar.h>  
#include  <stdio.h>  
#include  <windows.h>  
#include  <devguid.h>  
 
#define  DWORD_PTR  DWORD  
#define  ULONG_PTR  DWORD  
 
 
extern  "C"  {    
#include  "hidsdi.h"    
}  
//  需加入hid.lib  
 
#include  <setupapi.h>  
//  需加入setupapi.lib  
 
#include  <regstr.h>  
#include  <winbase.h>  
 
#include  <cfgmgr32.h>  
//  需要加入cfgmgr32.lib  
 
#include  <initguid.h>  
//#include  <usbiodef.h>  
DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE,  
   0xA5DCBF10L,  0x6530,  0x11D2,  0x90,  0x1F,  0x00,  0xC0,  0x4F,  0xB9,  0x51,  0xED);  
#define  GUID_CLASS_USB_DEVICE                      GUID_DEVINTERFACE_USB_DEVICE  
 
int  main(int  argc,  _TCHAR*  argv[])  
{  
     HDEVINFO  hDevInfo;  
      
     SP_DEVINFO_DATA  DeviceInfoData;  
     DWORD  i;  
 
     //--------------------------------------------------------------------------  
     //  获取设备信息  
     hDevInfo  =  SetupDiGetClassDevs((LPGUID)&GUID_CLASS_USB_DEVICE,  
             0,  //  Enumerator  
             0,  
             DIGCF_PRESENT    |  DIGCF_DEVICEINTERFACE  );  
     if  (hDevInfo  ==  INVALID_HANDLE_VALUE)  {  
             //  查询信息失败  
             printf("ERROR  -  SetupDiGetClassDevs()");  
             return  1;  
     }  
     //--------------------------------------------------------------------------  
 
     //  枚举每个USB设备  
     DeviceInfoData.cbSize  =  sizeof(SP_DEVINFO_DATA);  
     for  (i=0;SetupDiEnumDeviceInfo(hDevInfo,  i,  &DeviceInfoData);i++)  
     {  
               LPTSTR  buffer  =  NULL;  
               PVOID  buffer2  =  NULL;  
               DWORD  buffersize  =  0;  
               ULONG  len;  
               CONFIGRET      cr;  
               PNP_VETO_TYPE  pnpvietotype;  
               CHAR  vetoname[MAX_PATH];  
               ULONG  ulStatus;  
               ULONG  ulProblemNumber;  
 
               cr  =  CM_Get_DevNode_Status(  &ulStatus,  
                                                                       &ulProblemNumber,  
                                                                       DeviceInfoData.DevInst,  
                                                                       0);  
               if  (  CR_SUCCESS  ==  cr  )  {  
                       printf("OK  -  CM_Get_DevNode_Status()[%d]\n",  cr);  
                       printf("OK  -  CM_Get_DevNode_Status()  sts  [%x]\n",  ulStatus);  
                       printf("OK  -  CM_Get_DevNode_Status()  pro  [%x]\n",  ulProblemNumber);  
               }  else  {  
                       printf("ERROR  -  CM_Get_DevNode_Status()[%d]\n",  cr);  
                       printf("ERROR  -  CM_Get_DevNode_Status()[%d]\n",  GetLastError());  
               }  
               //  DN_DISABLEABLE  or  DN_REMOVABLE  
               if  ((DN_DISABLEABLE  &  ulStatus  )  !=  0  )  {  
                       printf("HAS  -  DN_DISABLEABLE()[%x]\n",  DN_DISABLEABLE  &  ulStatus);  
               }  else  {  
                     continue;  
               }  
               if  ((DN_REMOVABLE  &  ulStatus  )  !=  0  )  {  
                       printf("HAS  -  DN_REMOVABLE()[%x]\n",  DN_REMOVABLE  &  ulStatus);  
               }  else  {  
                     continue;  
               }  
 
               len  =  MAX_PATH;  
               //  pnpvietotype  =  PNP_VetoDevice;    
               cr  =  CM_Request_Device_Eject(  
                                                       DeviceInfoData.DevInst,  
                                                       &pnpvietotype,  
                                                       vetoname,  
                                                       len,  
                                                       0  
                                                       );  
               if  (  CR_SUCCESS  ==  cr  )  {  
                       printf("OK  -  CM_Request_Device_Eject()[%d]\n",  cr);  
               }  else  {  
                       printf("ERROR  -  CM_Request_Device_Eject()[%d]\n",  cr);  
                       printf("ERROR  -  CM_Request_Device_Eject()[%d]\n",  GetLastError());  
               }  
 
     }  
              
              
     if  (  GetLastError()!=NO_ERROR  &&  
               GetLastError()!=ERROR_NO_MORE_ITEMS  )  
     {  
             //  Insert  error  handling  here.  
             return  1;  
     }  
              
     //    Cleanup  
     SetupDiDestroyDeviceInfoList(hDevInfo);  
 
     return  0;  
}  
 
www.xDrv.com
游客

返回顶部