From 9970e49c9d7c09e67e40c3ee1d6473ebb2f4237d Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Fri, 1 Oct 2010 14:18:12 -0500 Subject: [PATCH 04/20] mscoree: Use the new search methods for GetCORVersion/GetCORSystemDirectory. --- dlls/mscoree/mscoree_main.c | 72 ++++++++++++------------------------------ 1 files changed, 21 insertions(+), 51 deletions(-) diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c index a57d766..cb55d63 100644 --- a/dlls/mscoree/mscoree_main.c +++ b/dlls/mscoree/mscoree_main.c @@ -186,28 +186,6 @@ static BOOL get_mono_path(LPWSTR path) return get_mono_path_from_registry(path); } -static BOOL get_install_root(LPWSTR install_dir) -{ - const WCHAR dotnet_key[] = {'S','O','F','T','W','A','R','E','\\','M','i','c','r','o','s','o','f','t','\\','.','N','E','T','F','r','a','m','e','w','o','r','k','\\',0}; - const WCHAR install_root[] = {'I','n','s','t','a','l','l','R','o','o','t',0}; - - DWORD len; - HKEY key; - - if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, dotnet_key, 0, KEY_READ, &key)) - return FALSE; - - len = MAX_PATH; - if (RegQueryValueExW(key, install_root, 0, NULL, (LPBYTE)install_dir, &len)) - { - RegCloseKey(key); - return FALSE; - } - RegCloseKey(key); - - return TRUE; -} - static CRITICAL_SECTION mono_lib_cs; static CRITICAL_SECTION_DEBUG mono_lib_cs_debug = { @@ -460,56 +438,48 @@ HRESULT WINAPI _CorValidateImage(PVOID* imageBase, LPCWSTR imageName) HRESULT WINAPI GetCORSystemDirectory(LPWSTR pbuffer, DWORD cchBuffer, DWORD *dwLength) { - static const WCHAR slash[] = {'\\',0}; - WCHAR system_dir[MAX_PATH]; - WCHAR version[MAX_PATH]; + ICLRRuntimeInfo *info; + HRESULT ret; - FIXME("(%p, %d, %p): semi-stub!\n", pbuffer, cchBuffer, dwLength); + TRACE("(%p, %d, %p)!\n", pbuffer, cchBuffer, dwLength); - if (!dwLength) + if (!dwLength || !pbuffer) return E_POINTER; - if (!pbuffer) - return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); + ret = get_runtime_info(NULL, NULL, NULL, 0, RUNTIME_INFO_UPGRADE_VERSION, TRUE, &info); - if (!get_install_root(system_dir)) - { - ERR("error reading registry key for installroot, returning empty path\n"); - *dwLength = 0; - } - else + if (SUCCEEDED(ret)) { - GetCORVersion(version, MAX_PATH, dwLength); - lstrcatW(system_dir, version); - lstrcatW(system_dir, slash); - *dwLength = lstrlenW(system_dir) + 1; - - if (cchBuffer < *dwLength) - return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); + *dwLength = cchBuffer; + ret = ICLRRuntimeInfo_GetRuntimeDirectory(info, pbuffer, dwLength); - lstrcpyW(pbuffer, system_dir); + ICLRRuntimeInfo_Release(info); } - return S_OK; + return ret; } HRESULT WINAPI GetCORVersion(LPWSTR pbuffer, DWORD cchBuffer, DWORD *dwLength) { - static const WCHAR version[] = {'v','2','.','0','.','5','0','7','2','7',0}; + ICLRRuntimeInfo *info; + HRESULT ret; - FIXME("(%p, %d, %p): semi-stub!\n", pbuffer, cchBuffer, dwLength); + TRACE("(%p, %d, %p)!\n", pbuffer, cchBuffer, dwLength); if (!dwLength || !pbuffer) return E_POINTER; - *dwLength = lstrlenW(version) + 1; + ret = get_runtime_info(NULL, NULL, NULL, 0, RUNTIME_INFO_UPGRADE_VERSION, TRUE, &info); - if (cchBuffer < *dwLength) - return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); + if (SUCCEEDED(ret)) + { + *dwLength = cchBuffer; + ret = ICLRRuntimeInfo_GetVersionString(info, pbuffer, dwLength); - lstrcpyW(pbuffer, version); + ICLRRuntimeInfo_Release(info); + } - return S_OK; + return ret; } HRESULT WINAPI GetRequestedRuntimeInfo(LPCWSTR pExe, LPCWSTR pwszVersion, LPCWSTR pConfigurationFile, -- 1.7.1