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_PATH
GetModuleFileName(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第一次写帖子可能排版有些乱希望见谅