C++通过写注册表实现将文件夹映射为系统虚拟盘
来源:互联网 发布:数据线上带充电宝 编辑:程序博客网 时间:2024/05/19 22:57
TRACE(location);char szUserName[MAX_NAME] = {0};char szUserSid[MAX_NAME] = {0};char szUserDomain[MAX_NAME] = {0};SID_NAME_USE snu;DWORD dwNameLen;DWORD dwSidLen;DWORD dwDomainLen;lstrcpy(szSid, "");dwNameLen = 256;dwSidLen = 256;dwDomainLen = 256;if (!GetUserName(szUserName,&dwNameLen)){TRACE("Fail To Get UserName\n");return FALSE;}dwNameLen = strlen(szUserName) + 1;if (LookupAccountName(NULL,szUserName,(PSID)szUserSid,&dwSidLen,szUserDomain,&dwDomainLen,&snu)){if (IsValidSid((PSID)szUserSid)){if (ConvertSid((PSID)szUserSid,szSid,&dwSize)){//TRACE(m_strDirectoryToMonitor);TCHAR exeFullPath[MAX_PATH]; // MAX_PATHGetModuleFileName(NULL,exeFullPath,MAX_PATH -1);CFileHandle m_fhandle;CString strRelativePath = m_fhandle.ExtractFromFullname(exeFullPath, DRIVE) + m_fhandle.ExtractFromFullname(exeFullPath,DIR);CString strIco = strRelativePath + "setup.ico";TRACE(strIco);HKEY hkey; DWORD dWord;//设置盘名称//{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}为程序独有的128位CLSID,这里为了方便直接写了,应该调用系统工具生成以免重复DWORD DS = RegCreateKeyEx(HKEY_CLASSES_ROOT/*HKEY_LOCAL_MACHINE*/,"CLSID\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS | KEY_WOW64_64KEY,NULL,&hkey,&dWord);if (DS != ERROR_SUCCESS){//AfxMessageBox("写入CLASS_ROOT失败");}RegSetValue(hkey, NULL, REG_SZ, "虚拟盘名字",strlen("虚拟盘名字"));DWORD dw = RegSetValueEx(hkey, "InfoTip", 0, REG_SZ, (CONST BYTE*)"进入虚拟盘",strlen("进入虚拟盘"));
//设置虚拟盘的图标
RegCreateKeyEx(HKEY_CLASSES_ROOT/*HKEY_LOCAL_MACHINE*/,"CLSID\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}\\DefaultIcon",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS | KEY_WOW64_64KEY,NULL,&hkey,&dWord);TRACE(strIco);RegSetValue(hkey, NULL, REG_SZ, strIco,strlen(strIco));//将设备添加到左侧组织条RegCreateKeyEx(HKEY_CLASSES_ROOT/*HKEY_LOCAL_MACHINE*/,"CLSID\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}\\InprocServer32",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS | KEY_WOW64_64KEY,NULL,&hkey,&dWord);RegSetValue(hkey, NULL, REG_SZ, "shdocvw.dll",strlen("shdocvw.dll"));RegSetValueEx(hkey, "ThreadingModel", 0, REG_SZ, (CONST BYTE*)"Apartment",strlen("Apartment"));//将云盘设置为系统文件夹RegCreateKeyEx(HKEY_CLASSES_ROOT/*HKEY_LOCAL_MACHINE*/,"CLSID\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}\\Instance",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS | KEY_WOW64_64KEY,NULL,&hkey,&dWord);RegSetValue(hkey, NULL, REG_SZ, "",strlen(""));RegSetValueEx(hkey, "CLSID", 0, REG_SZ, (CONST BYTE*)"{0afaced1-e828-11d1-9187-b532f1e9575d}",strlen("{0afaced1-e828-11d1-9187-b532f1e9575d}"));//设置云盘路径RegCreateKeyEx(HKEY_CLASSES_ROOT/*HKEY_LOCAL_MACHINE*/,"CLSID\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}\\Instance\\InitPropertyBag",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS | KEY_WOW64_64KEY,NULL,&hkey,&dWord);RegSetValue(hkey, NULL, REG_SZ, "",strlen(""));char *p = (LPSTR)(LPCTSTR)location;RegSetValueEx(hkey, "Target", 0, REG_SZ, (CONST BYTE*)p,strlen(location));RegCreateKeyEx(HKEY_CLASSES_ROOT/*HKEY_LOCAL_MACHINE*/,"CLSID\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}\\ShellFolder",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS | KEY_WOW64_64KEY,NULL,&hkey,&dWord);RegSetValue(hkey, NULL, REG_SZ, "",strlen(""));DWORD dwBuf=0xf8800108; RegSetValueExA(hkey,(char*)"Attributes",0,REG_DWORD,(BYTE*)&dwBuf,sizeof(dwBuf));RegSetValueEx(hkey, "PinToNameSpaceTree", 0, REG_SZ, (CONST BYTE*)"",strlen(""));RegSetValueEx(hkey, "QueryForOverlay", 0, REG_SZ, (CONST BYTE*)"",strlen(""));RegSetValueEx(hkey, "wantsFORPARSING", 0, REG_SZ, (CONST BYTE*)"",strlen(""));//将云盘显示出来CString m_str1=szSid;CString m_str2="\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}";CString namespacestr=m_str1+m_str2;RegCreateKeyEx(HKEY_USERS,namespacestr,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS | KEY_WOW64_64KEY,NULL,&hkey,&dWord);//add 2013/8/6 DWORD re; CString str11= "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}"; re = RegCreateKeyEx(HKEY_CURRENT_USER,str11,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS | KEY_WOW64_64KEY,NULL,&hkey,&dWord); re=RegSetValue(hkey, NULL, REG_SZ, "虚拟盘",strlen("虚拟盘"));RegCloseKey(hkey);return TRUE;}}}return FALSE;}
由于每台电脑的情况(操作系统版本,32位或者64位)所以调用的注册表项可以能也不同,所以要将其中的:设置云盘名字,设置虚拟图标,添加到左侧组织条,将云盘设置为系统文件夹,设置云盘路径。这些写到注册表不同的位置中:
1.HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\CLSID\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}"
2.HKEY_CLASSES_ROOT,"Wow6432Node\\CLSID\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}"
3.HKEY_CURRENT_USER,"Software\\Classes\\CLSID\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}"
4.HKEY_CURRENT_USER,"Software\\Classes\\Wow6432Node\\CLSID\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}"
5.HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\Wow6432Node\\CLSID\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}"
6.(HKEY_LOCAL_MACHINE,"SOFTWARE\\Classes\\Wow6432Node\\Classes\\CLSID\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}
7. CString strSid = szSid;
CString csp = strSid + "\\";
csp += "Software\\Classes\\CLSid\\{0A379CC9-C4E2-4504-B2EE-4A9B40E25FC4}";
DWORD DS = RegCreateKeyEx(HKEY_USERS,csp,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS | KEY_WOW64_64KEY,NULL,&hkey,&dWord);
以上这些我也不是很明白为什么,希望有动注册表的同学指教一下,这些路径分别是代表什么意思。
P.S第一次写帖子可能排版有些乱希望见谅
- C++通过写注册表实现将文件夹映射为系统虚拟盘
- Windows下映射文件夹为虚拟磁盘
- dos命令映射文件夹为虚拟磁盘分区
- WIN7通过注册表移动我的文档等系统文件夹默认位置
- WIN7通过注册表移动我的文档等系统文件夹默认位置
- 通过简单C编程实现注册表修改
- 用批处理将文件夹设为虚拟磁盘
- 巩固C语言(三)----系统随机数 & 将文件写到指定文件夹
- 将linux文件夹映射为网络盘,并使用tfs,无效!
- 将本机文件夹映射为磁盘的方法
- linux下c通过虚拟地址映射读写文件
- C++_IA32体系linux系统虚拟地址映射
- UAC与数据虚拟化(低权限无法正常写系统目录和注册表)
- 通过设置注册表将桌面文件放到D盘
- 【C语言】【unix c】使用mmap将物理地址映射到进程的虚拟地址空间
- c++ 如何监控本机共享文件夹变化(通过监控注册表来实现)
- 通过注册表获取系统信息
- 通过注册表获得系统语言
- Dragons
- 在安装phpmyadmin出现错误,提示缺少 mysqli 扩展。请检查 PHP 配置解决方案
- ORA-12091: 不能联机重新定义具有实体化视图的表
- System of Equations
- uva 10557
- C++通过写注册表实现将文件夹映射为系统虚拟盘
- IOS 图片阴影,圆角等处理
- 解决sqlplus连接oracle乱码
- Delphi SendMessage 使用
- What Are You Talking About(hdu1075字典树)
- 如何查看linux/unix查看wwn号
- 第一次进csdn的博客
- Win8 安装Oracle 10g 提示“程序异常终止”的解决方案
- 开启远程数据库组件