windows-nt/Source/XPSP1/NT/admin/services/drizzle/utils/cfreg.cpp
2020-09-26 16:20:57 +08:00

249 lines
6.7 KiB
C++

/************************************************************************
Copyright (c) 2000 - 2000 Microsoft Corporation
Module Name :
cfreg.cpp
Abstract :
Registry wrapper functions.
Author :
Revision History :
***********************************************************************/
#include "qmgrlibp.h"
#if !defined(BITS_V12_ON_NT4)
#include "cfreg.tmh"
#endif
////////////////////////////////////////////////////////////////////////////
//
// Public Function GetRegStringValue()
// Read the registry value of timestamp for last detection
// Input: Name of value
// Output: SYSTEMTIME structure contains the time
// Return: HRESULT flag indicating the success of this function
//
////////////////////////////////////////////////////////////////////////////
HRESULT GetRegStringValue(LPCTSTR lpszValueName, LPTSTR lpszBuffer, int iBufferSize)
{
HKEY hKey;
DWORD dwType = REG_SZ;
DWORD dwSize = iBufferSize;
DWORD dwRet;
if (lpszValueName == NULL || lpszBuffer == NULL)
{
return E_INVALIDARG;
}
//
// query the last timestamp value
//
dwRet = RegQueryValueEx(
g_GlobalInfo->m_QmgrRegistryRoot,
lpszValueName,
NULL,
&dwType,
(LPBYTE)lpszBuffer,
&dwSize);
if (dwRet == ERROR_SUCCESS && dwType == REG_SZ)
{
return S_OK;
}
return E_FAIL;
}
////////////////////////////////////////////////////////////////////////////
//
// Public Function SetRegStringValue()
// Set the registry value of timestamp as current system local time
// Input: name of the value to set. pointer to the time structure to set time. if null,
// we use current system time.
// Output: None
// Return: HRESULT flag indicating the success of this function
//
////////////////////////////////////////////////////////////////////////////
HRESULT SetRegStringValue(LPCTSTR lpszValueName, LPCTSTR lpszNewValue)
{
HKEY hKey;
HRESULT hRet = E_FAIL;
DWORD dwResult;
if (lpszValueName == NULL || lpszNewValue == NULL)
{
return E_INVALIDARG;
}
//
// set the time to the lasttimestamp value
//
hRet = (RegSetValueEx( //SEC: REVIEWED 2002-03-28
g_GlobalInfo->m_QmgrRegistryRoot,
lpszValueName,
0,
REG_SZ,
(const unsigned char *)lpszNewValue,
lstrlen(lpszNewValue) + 1 // SEC: REVIEWED 2002-03-28
) == ERROR_SUCCESS) ? S_OK : E_FAIL;
return hRet;
}
////////////////////////////////////////////////////////////////////////////
//
// Public Function DeleteRegStringValue()
// Delete the registry value entry
// Input: name of the value to entry,
// Output: None
// Return: HRESULT flag indicating the success of this function
//
////////////////////////////////////////////////////////////////////////////
HRESULT DeleteRegStringValue(LPCTSTR lpszValueName)
{
HKEY hKey;
HRESULT hRet = E_FAIL;
DWORD dwResult;
if (lpszValueName == NULL)
{
return E_INVALIDARG;
}
//
// set the time to the lasttimestamp value
//
hRet = (RegDeleteValue(
g_GlobalInfo->m_QmgrRegistryRoot,
lpszValueName
) == ERROR_SUCCESS) ? S_OK : E_FAIL;
return hRet;
}
////////////////////////////////////////////////////////////////////////////
//
// Public Function GetRegDWordValue()
// Get a DWORD from specified regustry value name
// Input: name of the value to retrieve value
// Output: pointer to the retrieved value
// Return: HRESULT flag indicating the success of this function
//
////////////////////////////////////////////////////////////////////////////
HRESULT GetRegDWordValue(LPCTSTR lpszValueName, LPDWORD pdwValue)
{
HKEY hKey;
int iRet;
DWORD dwType = REG_DWORD, dwSize = sizeof(DWORD);
if (lpszValueName == NULL)
{
return E_INVALIDARG;
}
//
// open critical fix key
//
iRet = RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
C_QMGR_REG_KEY,
0,
KEY_READ,
&hKey);
if (iRet == ERROR_SUCCESS)
{
//
// query the last timestamp value
//
iRet = RegQueryValueEx( //SEC: REVIEWED 2002-03-28
hKey,
lpszValueName,
NULL,
&dwType,
(LPBYTE)pdwValue,
&dwSize);
RegCloseKey(hKey);
if (iRet == ERROR_SUCCESS)
{
if (dwType == REG_DWORD)
{
return S_OK;
}
return E_FAIL;
}
}
return HRESULT_FROM_WIN32( iRet );
}
////////////////////////////////////////////////////////////////////////////
//
// Public Function SetRegDWordValue()
// Set the registry value as a DWORD
// Input: name of the value to set. value to set
// Output: None
// Return: HRESULT flag indicating the success of this function
//
////////////////////////////////////////////////////////////////////////////
HRESULT SetRegDWordValue(LPCTSTR lpszValueName, DWORD dwValue)
{
HKEY hKey;
HRESULT hRet = E_FAIL;
DWORD dwResult;
if (lpszValueName == NULL)
{
return E_INVALIDARG;
}
//
// open the key
//
if (RegCreateKeyEx( //SEC: REVIEWED 2002-03-28
HKEY_LOCAL_MACHINE, // root key
C_QMGR_REG_KEY, // subkey
0, // reserved
NULL, // class name
REG_OPTION_NON_VOLATILE, // option
KEY_WRITE, // security
NULL, // security attribute
&hKey,
&dwResult) == ERROR_SUCCESS)
{
//
// set the time to the lasttimestamp value
//
hRet = (RegSetValueEx( //SEC: REVIEWED 2002-03-28
hKey,
lpszValueName,
0,
REG_DWORD,
(LPBYTE)&dwValue,
sizeof(DWORD)
) == ERROR_SUCCESS) ? S_OK : E_FAIL;
RegCloseKey(hKey);
}
return hRet;
}