VC 隐藏驱动器 -win7下测试可用
2017-09-28 15:29
267 查看
BOOL ReadRegistryDword(LPCTSTR lpSubKey, LPCTSTR lpName, DWORD *dwValue) { HKEY hKey = 0; DWORD dwSize = sizeof(*dwValue); DWORD dwType; LONG lStatus; SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = NULL; lStatus = RegOpenKeyEx(HKEY_CURRENT_USER, lpSubKey, 0, KEY_READ, &hKey); if (lStatus != ERROR_SUCCESS) { SetLastError(lStatus); return FALSE; } lStatus = RegQueryValueEx(hKey, lpName, NULL, &dwType, (BYTE *)dwValue, &dwSize); if (lStatus != ERROR_SUCCESS) { RegCloseKey(hKey); SetLastError(lStatus); return FALSE; } RegCloseKey(hKey); return dwType == REG_DWORD; } BOOL WriteRegistryDword(LPCTSTR lpSubKey, LPCTSTR lpName, DWORD dwValue) { HKEY hKey = 0; DWORD dwDisp; LONG lStatus; SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = NULL; lStatus = RegCreateKeyEx(HKEY_CURRENT_USER, lpSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, &sa, &hKey, &dwDisp); if (lStatus != ERROR_SUCCESS) { SetLastError(lStatus); return FALSE; } lStatus = RegSetValueEx(hKey, lpName, 0, REG_DWORD, (BYTE *)&dwValue, sizeof dwValue); if (lStatus != ERROR_SUCCESS) { RegCloseKey(hKey); SetLastError(lStatus); return FALSE; } RegCloseKey(hKey); return TRUE; } void HideVolume( int nDriveNo) { DWORD dwResult; DEV_BROADCAST_VOLUME* p01 = new DEV_BROADCAST_VOLUME; p01->dbcv_devicetype = 2; p01->dbcv_flags = 0; p01->dbcv_size = 20; p01->dbcv_unitmask = (1 << nDriveNo); char szRoot[] = { (char)(nDriveNo + 'A'), ':', '\\', 0 }; SHChangeNotify(SHCNE_DRIVEREMOVED, SHCNF_PATH, szRoot, NULL); DWORD dwRecipients = BSM_APPLICATIONS; BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_POSTMESSAGE | BSF_FORCEIFHUNG, &dwRecipients, WM_DEVICECHANGE, DBT_DEVNODES_CHANGED, NULL); dwRecipients = BSM_APPLICATIONS; BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_POSTMESSAGE | BSF_FORCEIFHUNG, &dwRecipients, WM_DEVICECHANGE, DBT_DEVICEREMOVECOMPLETE, (LPARAM)p01); DWORD value = 0; LPCTSTR skey = _T("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"); if (!ReadRegistryDword(skey, _T("NoDrives"), &value)) { value = 0; } value |= (1 << nDriveNo); WriteRegistryDword(skey, _T("NoDrives"), value); SHChangeNotify(SHCNE_DRIVEREMOVED, SHCNF_PATH, szRoot, NULL); //DWORD dwRecipients = BSM_APPLICATIONS; BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_POSTMESSAGE | BSF_FORCEIFHUNG, &dwRecipients, WM_DEVICECHANGE, DBT_DEVNODES_CHANGED, NULL); dwRecipients = BSM_APPLICATIONS; BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_POSTMESSAGE | BSF_FORCEIFHUNG, &dwRecipients, WM_DEVICECHANGE, DBT_DEVICEREMOVECOMPLETE, (LPARAM)p01); delete[] p01; SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, LPARAM("Policy"), SMTO_ABORTIFHUNG, 500, &dwResult); } void ShowVolume(int nDriveNo) { DWORD dwResult; DEV_BROADCAST_VOLUME* p01 = new DEV_BROADCAST_VOLUME; p01->dbcv_devicetype = 2; p01->dbcv_flags = 0; p01->dbcv_size = 20; p01->dbcv_unitmask = (1 << nDriveNo);//H char szRoot[] = { (char)(nDriveNo + 'A'), ':', '\\', 0 }; SHChangeNotify(SHCNE_DRIVEADD, SHCNF_PATH, szRoot, NULL); SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH, szRoot, NULL); DWORD dwRecipients = BSM_APPLICATIONS; BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_POSTMESSAGE | BSF_FORCEIFHUNG, &dwRecipients, WM_DEVICECHANGE, DBT_DEVNODES_CHANGED, NULL); dwRecipients = BSM_APPLICATIONS; BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_POSTMESSAGE | BSF_FORCEIFHUNG, &dwRecipients, WM_DEVICECHANGE, DBT_DEVICEARRIVAL, (LPARAM)p01); dwRecipients = BSM_APPLICATIONS; BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_POSTMESSAGE | BSF_FORCEIFHUNG, &dwRecipients, WM_DEVICECHANGE, DBT_DEVNODES_CHANGED, NULL); DWORD value = 0; LPCTSTR skey = _T("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"); if (!ReadRegistryDword(skey, _T("NoDrives"), &value)) { value = 0; } value &= ~(1 << nDriveNo); WriteRegistryDword(skey, _T("NoDrives"), value); SHChangeNotify(SHCNE_DRIVEADD, SHCNF_PATH, szRoot, NULL); SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH, szRoot, NULL); // DWORD dwRecipients = BSM_APPLICATIONS; BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_POSTMESSAGE | BSF_FORCEIFHUNG, &dwRecipients, WM_DEVICECHANGE, DBT_DEVNODES_CHANGED, NULL); dwRecipients = BSM_APPLICATIONS; BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_POSTMESSAGE | BSF_FORCEIFHUNG, &dwRecipients, WM_DEVICECHANGE, DBT_DEVICEARRIVAL, (LPARAM)p01); dwRecipients = BSM_APPLICATIONS; BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_POSTMESSAGE | BSF_FORCEIFHUNG, &dwRecipients, WM_DEVICECHANGE, DBT_DEVNODES_CHANGED, NULL); delete[] p01; SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, LPARAM("Policy"), SMTO_ABORTIFHUNG, 500, &dwResult); }
相关文章推荐
- VC++ 发送邮件封装类CSendMail,测试可用
- win7下virtualbox装linux共享win7文件问题(已测试可用)
- vc控制控件的可用和隐藏和名称
- 新装win7,之前xp哪些程序可用 测试
- Win7、Win8可用中文版VC6.0及其插件VC助手、行号显示
- 32位WIN7直接破解,上6G内存,已测试,6G全为可用内存
- 64位win7可用usbasp驱动,AVRfighter专用驱动,测试有效
- 测试C库函数字符串查找-win7-vc6
- Mysql高可用架构MHA搭建及测试故障转移
- SAP 动态设置 GUI STATUS 灰色不可用 或者隐藏
- VC 6.0下载|VC 6.0中文版下载|VC 6.0英文版下载【支持Win7和XP】
- 解决win7下安装时Microsoft Visual C++ 6.0(VC60)出现未响应
- Win7如何隐藏Administrator而又可以用来登入
- Ruby on rails安装后去掉DL is deprecated,please use Fiddle警告信息的方法【测试可用】
- 大平台可用的框架全文(控制隐藏)
- win7安装apache或者php 5.7缺少vcruntime140.dll的问题
- VC连接ADO方式ACCESS数据库在WIN7下编译到XP下不能运行解决方法
- Rabbitmq集群高可用测试
- 下载verycd的方法下载电驴资源隐藏资源的最新可用方法
- JS实现兼容各种浏览器的获取选择文本的方法【测试可用】