两种方法,
方法一 查找注册表
思路:首先枚举注册表路径"HKEY_LOCAL_MACHINE//Drivers//Active"下的子键,从子键中查找键项"Key"的值是否包含"Drivers//USB//ClientDrivers//Mass_Storage_Class"字段,如果包含再取该键的键项"Name"的值,获取名字devName后调用如下代码,实现禁用
HANDLE hnd = OpenStore(devName);//(L"DSK1:")
if(hnd == NULL)
{
::MessageBox(NULL, L"USB打开失败", L"notice", MB_OK );
return ;
}
BOOL ret = DismountStore(hnd);
CloseHandle(hnd);
流程:
启动对话框的时候先调用EnumActiveDir枚举注册表项"HKEY_LOCAL_MACHINE//Drivers//Active"下的子键,然后调用 SearchAndDismountUsbStro(PREG_ITEM_NAME change_itemStruct)函数对USB存储设备进行dismount
响应窗口回调函数WindowProc,当接收到WM_DEVICECHANGE消息时,判断是否接入或者移除了USB存储设备,弹出提示对话框,根据用户的选择来dismount或者不处理。
启用的话就是重新插入设备
相关函数:
SearchAndDismountUsbStro
EnumActiveDir
WindowProc
方法二 存储设备处理
思路:
禁用:
USB存储设备,如果存储设备被打开其它人就没办法使用即可实现禁用效果,并且将"System//StorageManager//Profiles//USBHDProfile";中写入键项 MountHidden= 1,dismount掉SD卡
启用:
将"System//StorageManager//Profiles//SDMemory";中写入键项 MountHidden= 0,mountSD卡
重新插入SD卡即可启用
禁用USB存储设备
启用USB存储设备