// 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);
}
//
#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);
}