基于消息方式的usb监测完整基础代码

 //   der_USB_Dieb.cpp   :   Defines   the   entry   point   for   the   application.  
  //  
   
  #include   "stdafx.h"  
  #include   "resource.h"  
   
  #include     <setupapi.h>      
     
  #include     <regstr.h>      
  #include     <winbase.h>      
     
  #include     <Dbt.h>  
   
  LPVOID   pszMySharedMapView;  
   
  char   FirstDriveFromMask   (ULONG   unitmask)  
  {  
        char   i;  
   
        for   (i   =   0;   i   <   26;   ++i)  
        {  
              if   (unitmask   &   0x1)  
                    break;  
              unitmask   =   unitmask   >>   1;  
        }  
   
        return   (i   +   'A');  
  }  
   
  void   DeviceChangeEventOpt(WPARAM   wParam,   LPARAM   lParam)  
  {  
  switch(wParam)  
  {  
  // case   DBT_CONFIGCHANGECANCELED:  
  // MessageBox(NULL,"设备改变DBT_CONFIGCHANGECANCELED","提示",MB_OK);  
  // break;  
  // case   DBT_CONFIGCHANGED:  
  // MessageBox(NULL,"设备改变DBT_CONFIGCHANGED","提示",MB_OK);  
  // break;  
  // case   DBT_CUSTOMEVENT:    
  // MessageBox(NULL,"设备改变DBT_CUSTOMEVENT","提示",MB_OK);  
  // break;  
  case   DBT_DEVICEARRIVAL:   //   A   device   has   been   inserted   and   is   now   available.      
   
  // MessageBox(NULL,"设备改变DBT_DEVICEARRIVAL","提示",MB_OK);  
   
  DEV_BROADCAST_HDR   *stHDR;  
  stHDR   =   (DEV_BROADCAST_HDR   *)lParam;  
   
  //判断设备类型  
  switch(stHDR->dbch_devicetype)  
  {  
  // case   DBT_DEVTYP_DEVICEINTERFACE:    
  // MessageBox(NULL,"设备类型   DBT_DEVTYP_DEVICEINTERFACE","提示",MB_OK);  
  // break;  
  // case   DBT_DEVTYP_HANDLE:    
  // MessageBox(NULL,"设备类型   DBT_DEVTYP_HANDLE","提示",MB_OK);  
  // break;  
  // case   DBT_DEVTYP_OEM:    
  // MessageBox(NULL,"设备类型   DBT_DEVTYP_OEM","提示",MB_OK);  
  // break;  
  // case   DBT_DEVTYP_PORT:  
  // MessageBox(NULL,"设备类型   DBT_DEVTYP_PORT","提示",MB_OK);  
  // break;  
  case   DBT_DEVTYP_VOLUME:// Logical   volume.   This   structure   is   a   DEV_BROADCAST_VOLUME   structure  
  DEV_BROADCAST_VOLUME   *lpdbv=(DEV_BROADCAST_VOLUME   *)&stHDR;  
  char   szPath[_MAX_PATH]={0};  
   
  sprintf(szPath,"%c,%lx",  
  FirstDriveFromMask(lpdbv   ->dbcv_unitmask),lpdbv->dbcv_flags);  
  MessageBox(NULL,szPath,"提示",MB_OK);  
  break;  
  }  
  //  
   
  break;  
  // case   DBT_DEVICEQUERYREMOVE:    
  // MessageBox(NULL,"设备改变DBT_DEVICEQUERYREMOVE","提示",MB_OK);  
  // break;  
  // case   DBT_DEVICEQUERYREMOVEFAILED:    
  // MessageBox(NULL,"设备改变DBT_DEVICEQUERYREMOVEFAILED","提示",MB_OK);  
  // break;  
  // case   DBT_DEVICEREMOVECOMPLETE://   A   device   has   been   removed.    
  // MessageBox(NULL,"设备改变DBT_DEVICEREMOVECOMPLETE","提示",MB_OK);  
  // break;  
  // case   DBT_DEVICEREMOVEPENDING://    
  // MessageBox(NULL,"设备改变DBT_DEVICEREMOVEPENDING","提示",MB_OK);  
  // break;  
  // case   DBT_DEVICETYPESPECIFIC://    
  // MessageBox(NULL,"设备改变DBT_DEVICETYPESPECIFIC","提示",MB_OK);  
  // break;  
  // case   DBT_QUERYCHANGECONFIG:      
  // MessageBox(NULL,"设备改变DBT_QUERYCHANGECONFIG","提示",MB_OK);  
  // break;  
  // case   DBT_USERDEFINED   ://  
  // MessageBox(NULL,"设备改变DBT_USERDEFINED","提示",MB_OK);  
  // break;  
   
  }  
   
  //       PDEV_BROADCAST_HDR   lpdb   =   (PDEV_BROADCAST_HDR)lParam;  
  //       char   szMsg[80];  
  //  
  //       switch(wParam)  
  //       {  
  //             case   DBT_DEVICEARRIVAL:  
  //                   //   Check   whether   a   CD   or   DVD   was   inserted   into   a   drive.  
  //                   if   (lpdb   ->   dbch_devicetype   ==   DBT_DEVTYP_VOLUME)  
  //                   {  
  //                         PDEV_BROADCAST_VOLUME   lpdbv   =   (PDEV_BROADCAST_VOLUME)lpdb;  
  //  
  //                         if   (lpdbv   ->   dbcv_flags   &   DBTF_MEDIA)  
  //                         {  
  //                               sprintf   (szMsg,   "Drive   %c:   Media   has   arrived./n",  
  //                                                   FirstDriveFromMask(lpdbv   ->dbcv_unitmask));  
  //  
  //                               MessageBox   (NULL,   szMsg,   "WM_DEVICECHANGE",   MB_OK);  
  //                         }  
  //                   }  
  //                   break;  
  //  
  //             case   DBT_DEVICEREMOVECOMPLETE:  
  //                   //   Check   whether   a   CD   or   DVD   was   removed   from   a   drive.  
  //                   if   (lpdb   ->   dbch_devicetype   ==   DBT_DEVTYP_VOLUME)  
  //                   {  
  //                         PDEV_BROADCAST_VOLUME   lpdbv   =   (PDEV_BROADCAST_VOLUME)lpdb;  
  //  
  //                         if   (lpdbv   ->   dbcv_flags   &   DBTF_MEDIA)  
  //                         {  
  //                               sprintf   (szMsg,   "Drive   %c:   Media   was   removed./n",  
  //                                                   FirstDriveFromMask(lpdbv   ->dbcv_unitmask));  
  //  
  //                               MessageBox   (NULL,   szMsg,   "WM_DEVICECHANGE",   MB_OK);  
  //                         }  
  //                   }  
  //                   break;  
  //  
  //             default:  
  //                       /*  
  //                             Process   other   WM_DEVICECHANGE   notifications   for   other    
  //                             devices   or   reasons.  
  //                       */    
  //                         ;  
  //       }  
   
  }  
   
   
   
  INT_PTR   CALLBACK   DialogProc(                     HWND   hDlg,  
          UINT   uMsg,  
          WPARAM   wParam,  
          LPARAM   lParam  
  )  
  {  
  switch   (uMsg)   {    
  case   WM_INITDIALOG:    
  {  
  //only   one   instance  
  HANDLE   hInstanceMap=CreateFileMapping(((HANDLE)0xFFFFFFFF),  
  NULL,PAGE_READWRITE,0,0x10,"der   USB   Dieb");  
   
  if   (hInstanceMap   !=   NULL   &&   GetLastError()   ==   ERROR_ALREADY_EXISTS)    
  {    
  MessageBox(hDlg,"ALREADY_EXISTS","exit",MB_ICONEXCLAMATION|MB_OK);  
  CloseHandle(hInstanceMap);    
  hInstanceMap   =   NULL;  
  PostMessage(hDlg,WM_CLOSE,0,0);  
  return   TRUE;  
  }    
  pszMySharedMapView=MapViewOfFile(hInstanceMap,FILE_MAP_READ|FILE_MAP_WRITE  
  ,0,0,0);    
  //sprintf(pszMySharedMapView,"%d");  
  //CopyMemory(pszMySharedMapView,&hDlg,sizeof(hDlg));  
  sprintf((PCHAR)pszMySharedMapView,"%lx",(long)hDlg);  
   
  //Setup   USB   message   receiver  
  DEV_BROADCAST_DEVICEINTERFACE   NotificationFilter;  
  DWORD   Err;  
   
  ZeroMemory(   &NotificationFilter,   sizeof(NotificationFilter)   );  
  NotificationFilter.dbcc_size   =    
  sizeof(DEV_BROADCAST_DEVICEINTERFACE);  
  NotificationFilter.dbcc_devicetype   =   DBT_DEVTYP_DEVICEINTERFACE;  
  //NotificationFilter.dbcc_classguid   =   GUID_DEVINTERFACE_USB_DEVICE;  
   
  HANDLE   hDevNotify   =   RegisterDeviceNotification(   GetModuleHandle(NULL),    
  &NotificationFilter,  
  DEVICE_NOTIFY_WINDOW_HANDLE  
  );  
   
  if(!hDevNotify)    
  {  
  Err   =   GetLastError();  
  PostMessage(hDlg,WM_CLOSE,0,0);  
  return   TRUE;  
  }  
   
  return   TRUE;    
  }  
  case   WM_COMMAND:    
  switch(LOWORD(wParam)){    
  case   IDOK:    
  case   IDCANCEL:    
  EndDialog(hDlg,   LOWORD(wParam));    
  }    
  return   TRUE;    
   
  case   WM_NCPAINT   :    
  //Hide   window  
  ShowWindow(hDlg,SW_HIDE);  
  return   TRUE;    
  break;  
  // case   WM_DESTROY   :    
  case   WM_NCDESTROY   :    
  MessageBox(hDlg,"WM_DESTROY","exit",MB_ICONEXCLAMATION|MB_OK);  
  if   (!UnmapViewOfFile(pszMySharedMapView))  
  {}  
  return   TRUE;    
  break;  
  case   WM_DEVICECHANGE:  
  DeviceChangeEventOpt(wParam,lParam);  
  return   TRUE;    
  }    
  return FALSE;    
  }  
   
   
  int   APIENTRY   WinMain(HINSTANCE   hInstance,  
                                            HINSTANCE   hPrevInstance,  
                                            LPSTR           lpCmdLine,  
                                            int               nCmdShow)  
  {  
    int   ret=DialogBoxParam   (hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL,(DLGPROC)DialogProc,0);  
   
  return(ret   !=   IDOK);    
  }   
    
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值