好久没写东西了,忙了好久的小论文。
涉及到一个小需求:想隐藏某一个分区,尽量不被用户看到,但是为了方便编程、维护,又希望可以通过盘符地址访问,怎么办呢?
这个问题可以通过修改注册表的方式解决:
1. 注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer下新建键值对NoDrives,类型选择DWORD就好
2. 对应的值value |= (1 << 盘符 >= 'a' ? 盘符 - 'a' : 盘符 - 'A'))
3. 重启Windows资源管理器
一个小demo放到GitHub了 :https://github.com/Hilaver/partition-hiding
下面是代码
HKEY hKey = NULL;
TCHAR *subKey;
LONG lReturned = 0;
DWORD dwMusk = 0x00;
char volLetter[512];
printf("输入要隐藏的盘符(如C,D,F):");
scanf_s("%s",volLetter,sizeof(volLetter));
for (int i = 0; i < strlen(volLetter); i++) {
if ((volLetter[i] >= 'a'&&volLetter[i] <= 'z') || (volLetter[i] >= 'A'&&volLetter[i] <= 'Z')) {
dwMusk |= (1 << (volLetter[i] >= 'a' ? volLetter[i] - 'a' : volLetter[i] - 'A'));
}
}
if (RegCreateKeyEx(HKEY_CURRENT_USER,
_T("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hKey,
NULL) != ERROR_SUCCESS)
{
printf("创建/打开注册表键失败[%d]\n", GetLastError());
getchar();
return -1;
}
lReturned = RegSetValueEx(hKey, _T("NoDrives"), 0, REG_DWORD, (LPBYTE)&dwMusk, (DWORD)sizeof(dwMusk));
if (lReturned != ERROR_SUCCESS)
{
//
// 写入注册表退出标志位失败
//
printf("更新注册表键失败[%d]\n", GetLastError());
getchar();
return -1;
}
RegCloseKey(hKey);
printf("注册表修改成功\n");
system("taskkill -im explorer.exe -f");
system("ping -n 2 127.0.0.1 > nul");
system("start c:\\windows\\explorer.exe");
printf("重启资源管理器\n");
printf("修改成功\n");
getchar();
来源:CSDN
作者:我是NeroZhang
链接:https://blog.csdn.net/Hilavergil/article/details/88140848