249 lines
6.7 KiB
C++
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;
|
|
}
|
|
|