const std::string& getInstallDirectory() { static string installDir; if(installDir.empty()) { installDir = getRegString(REG_KEY_PATH, "InstallPath"); if(installDir.empty()) { messageErrorAndExit("Could not read the install location from the registry.\nMake sure to extract the downloaded files to a suitable location and run GeDoSaToTool.exe"); } } return installDir; }
// ------------------------------------------ // Global Functions // ------------------------------------------ LONG RegisterAsioDriver (CLSID clsid,char *szdllname,char *szregname,char *szasiodesc,char *szthreadmodel) { HMODULE hMod; char szDLLPath[MAX_PATH_LEN]; char szModuleName[MAX_PATH_LEN]; char szregpath[MAX_PATH_LEN]; char szclsid[CLSID_STRING_LEN]; LPOLESTR wszCLSID = NULL; BOOL newregentry = FALSE; LONG rc; // create HKEY_LOCAL_MACHINE\SOFTWARE\ASIO key HKEY hKey; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\ASIO",0,KEY_ALL_ACCESS,&hKey)!=ERROR_SUCCESS) { RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\ASIO",&hKey); } RegCloseKey(hKey); hMod = GetModuleHandle(szdllname); if (!hMod) return ERRSREG_MODULE_NOT_FOUND; szModuleName[0] = 0; GetModuleFileName(hMod,szModuleName,MAX_PATH_LEN); if (!szModuleName[0]) return ERRSREG_MODPATH_NOT_FOUND; CharLower((LPTSTR)szModuleName); rc = (LONG)StringFromCLSID(clsid,&wszCLSID); if (rc != S_OK) return ERRSREG_STRING_FROM_CLSID; rc = (LONG)WideCharToMultiByte(CP_ACP,0,(LPWSTR)wszCLSID,-1,szclsid,CLSID_STRING_LEN,0,0); if (!rc) return ERRSREG_CHAR_TO_MULTIBYTE; sprintf(szregpath,"%s\\%s",SZREGSTR_CLSID,szclsid); rc = findRegPath(HKEY_CLASSES_ROOT,szregpath); if (rc) { sprintf(szregpath,"%s\\%s\\%s",SZREGSTR_CLSID,szclsid,SZREGSTR_INPROCSERVER32); getRegString (HKEY_CLASSES_ROOT,szregpath,0,(LPVOID)szDLLPath,MAX_PATH_LEN); CharLower((LPTSTR)szDLLPath); rc = (LONG)strcmp(szDLLPath,szModuleName); if (rc) { // delete old regentry sprintf(szregpath,"%s",SZREGSTR_CLSID); deleteRegPath(HKEY_CLASSES_ROOT,szregpath,szclsid); newregentry = TRUE; } } else newregentry = TRUE; if (newregentry) { // HKEY_CLASSES_ROOT\CLSID\{...} sprintf(szregpath,"%s",SZREGSTR_CLSID); createRegPath (HKEY_CLASSES_ROOT,szregpath,szclsid); // HKEY_CLASSES_ROOT\CLSID\{...} -> Description sprintf(szregpath,"%s\\%s",SZREGSTR_CLSID,szclsid); createRegStringValue(HKEY_CLASSES_ROOT,szregpath,0,szasiodesc); // HKEY_CLASSES_ROOT\CLSID\InProcServer32 sprintf(szregpath,"%s\\%s",SZREGSTR_CLSID,szclsid); createRegPath (HKEY_CLASSES_ROOT,szregpath,SZREGSTR_INPROCSERVER32); // HKEY_CLASSES_ROOT\CLSID\InProcServer32 -> DLL path sprintf(szregpath,"%s\\%s\\%s",SZREGSTR_CLSID,szclsid,SZREGSTR_INPROCSERVER32); createRegStringValue(HKEY_CLASSES_ROOT,szregpath,0,szModuleName); // HKEY_CLASSES_ROOT\CLSID\InProcServer32 -> ThreadingModel createRegStringValue(HKEY_CLASSES_ROOT,szregpath,SZREGSTR_THREADINGMODEL,szthreadmodel); } // HKEY_LOCAL_MACHINE\SOFTWARE\ASIO sprintf(szregpath,"%s\\%s",SZREGSTR_SOFTWARE,SZREGSTR_ASIO); rc = findRegPath(HKEY_LOCAL_MACHINE,szregpath); if (rc) { sprintf(szregpath,"%s\\%s\\%s",SZREGSTR_SOFTWARE,SZREGSTR_ASIO,szregname); rc = findRegPath(HKEY_LOCAL_MACHINE,szregpath); if (rc) { sprintf(szregpath,"%s\\%s",SZREGSTR_SOFTWARE,SZREGSTR_ASIO); deleteRegPath(HKEY_LOCAL_MACHINE,szregpath,szregname); } } else { // HKEY_LOCAL_MACHINE\SOFTWARE\ASIO sprintf(szregpath,"%s",SZREGSTR_SOFTWARE); createRegPath (HKEY_LOCAL_MACHINE,szregpath,SZREGSTR_ASIO); } // HKEY_LOCAL_MACHINE\SOFTWARE\ASIO\<szregname> sprintf(szregpath,"%s\\%s",SZREGSTR_SOFTWARE,SZREGSTR_ASIO); createRegPath (HKEY_LOCAL_MACHINE,szregpath,szregname); // HKEY_LOCAL_MACHINE\SOFTWARE\ASIO\<szregname> -> CLSID // HKEY_LOCAL_MACHINE\SOFTWARE\ASIO\<szregname> -> Description sprintf(szregpath,"%s\\%s\\%s",SZREGSTR_SOFTWARE,SZREGSTR_ASIO,szregname); createRegStringValue(HKEY_LOCAL_MACHINE,szregpath,SZREGSTR_CLSID,szclsid); createRegStringValue(HKEY_LOCAL_MACHINE,szregpath,SZREGSTR_DESCRIPTION,szasiodesc); return 0; }
const bool getUseBlacklist() { return getRegString(REG_KEY_PATH, "UseBlacklist") == "True"; }
void Ez80::printReg(unsigned int num,unsigned int size) { DEBUG_OUT<<getRegString(num,size); }