在资源管理器中隐藏指定分区

◇◆丶佛笑我妖孽 提交于 2019-12-08 06:47:08

好久没写东西了,忙了好久的小论文。

涉及到一个小需求:想隐藏某一个分区,尽量不被用户看到,但是为了方便编程、维护,又希望可以通过盘符地址访问,怎么办呢?

这个问题可以通过修改注册表的方式解决:

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();

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!