//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1996. // // File: registry.cxx // // Contents: Registry utilities // // Classes: // // Functions: // // History: 23-May-1996 RamV (Ram Viswanathan) Created // //---------------------------------------------------------------------------- #include "procs.hxx" #pragma hdrstop //+--------------------------------------------------------------------------- // // Function: SetKeyAndValue // // Synopsis: Used for setting a key value // // // Arguments: pszRegLocation: where to look for/create key // pszKey : name of the Key // pszSubKey: name of the subkey // pszValue : Value to set // // Returns: HRESULT // // Modifies: // // History: 5/21/1996 RamV Created. // //---------------------------------------------------------------------------- HRESULT SetKeyAndValue( LPTSTR pszRegLocation, LPTSTR pszKey, LPTSTR pszSubKey, LPTSTR pszValue ) { HKEY hKey; TCHAR szKey[MAX_PATH]; LONG lErrorCode; HRESULT hr = S_OK; _tcscpy(szKey, pszRegLocation); if (pszSubKey != NULL){ _tcscpy(szKey, TEXT("\\")); _tcscat(szKey, pszSubKey); } lErrorCode = RegCreateKeyEx(HKEY_CURRENT_USER, szKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); if (lErrorCode != ERROR_SUCCESS){ return HRESULT_FROM_WIN32(lErrorCode); } if (pszValue != NULL){ lErrorCode = RegSetValueEx(hKey, pszKey, 0, REG_SZ, (BYTE *)pszValue, (_tcslen(pszValue)+1)*sizeof(TCHAR)); if(lErrorCode != ERROR_SUCCESS){ hr = HRESULT_FROM_WIN32(lErrorCode); goto cleanup; } } cleanup: RegCloseKey(hKey); return S_OK; } HRESULT QueryKeyValue( LPTSTR pszRegLocation, LPTSTR pszKey, LPTSTR * ppszValue ) { LONG lErrorCode; TCHAR szKey[MAX_PATH]; DWORD dwDataLen; DWORD dwType; HKEY hKey = NULL; HRESULT hr = S_OK; dwDataLen = sizeof(TCHAR)* MAX_PATH; *ppszValue = (LPTSTR)AllocADsMem( dwDataLen ); if(!*ppszValue){ hr = E_OUTOFMEMORY; goto cleanup; } _tcscpy(szKey, pszRegLocation); lErrorCode = RegOpenKeyEx(HKEY_CURRENT_USER, szKey, NULL, KEY_READ, &hKey); if( lErrorCode != ERROR_SUCCESS){ hr = HRESULT_FROM_WIN32(lErrorCode); goto cleanup; } lErrorCode = RegQueryValueEx(hKey, pszKey, NULL, &dwType, (LPBYTE)*ppszValue, &dwDataLen); if (lErrorCode == ERROR_MORE_DATA){ FreeADsMem(*ppszValue); *ppszValue = NULL; *ppszValue = (LPTSTR)AllocADsMem (dwDataLen); if(!*ppszValue){ hr = E_OUTOFMEMORY; goto cleanup; } lErrorCode = RegQueryValueEx(hKey, pszKey, NULL, &dwType, (LPBYTE)*ppszValue, &dwDataLen); hr = HRESULT_FROM_WIN32(lErrorCode); BAIL_IF_ERROR(hr); } else if (lErrorCode != ERROR_SUCCESS) { hr = HRESULT_FROM_WIN32(lErrorCode); FreeADsMem(*ppszValue); *ppszValue = NULL; } cleanup: if(hKey){ RegCloseKey(hKey); } RRETURN(hr); }