187 lines
4.1 KiB
C++
187 lines
4.1 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// 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);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|