240 lines
5.9 KiB
C++
240 lines
5.9 KiB
C++
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
//
|
||
|
// Copyright (C) Microsoft Corporation, 1999 - 1999
|
||
|
//
|
||
|
// File: regkeyex.cpp
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
|
||
|
|
||
|
//____________________________________________________________________________
|
||
|
//
|
||
|
// Member: CRegKeyEx::ScCreate
|
||
|
//
|
||
|
// Synopsis: Same meaning as for RegCreateKeyEx API.
|
||
|
//
|
||
|
// Arguments: [hKeyAncestor] -- IN
|
||
|
// [lpszKeyName] -- IN
|
||
|
// [security] -- IN
|
||
|
// [pdwDisposition] -- OUT
|
||
|
// [dwOption] -- IN
|
||
|
// [pSecurityAttributes] -- OUT
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
// History: 5/24/1996 RaviR Created
|
||
|
//____________________________________________________________________________
|
||
|
//
|
||
|
|
||
|
SC CRegKeyEx::ScCreate (
|
||
|
HKEY hKeyParent,
|
||
|
LPCTSTR lpszKeyName,
|
||
|
LPTSTR lpszClass,
|
||
|
DWORD dwOptions,
|
||
|
REGSAM samDesired,
|
||
|
LPSECURITY_ATTRIBUTES lpSecAttr,
|
||
|
LPDWORD lpdwDisposition)
|
||
|
{
|
||
|
DECLARE_SC (sc, _T("CRegKeyEx::ScCreate"));
|
||
|
|
||
|
LONG error = Create (hKeyParent, lpszKeyName, lpszClass, dwOptions,
|
||
|
samDesired, lpSecAttr, lpdwDisposition);
|
||
|
|
||
|
return (sc = ScFromWin32(error));
|
||
|
}
|
||
|
|
||
|
//____________________________________________________________________________
|
||
|
//
|
||
|
// Member: CRegKeyEx::ScOpen
|
||
|
//
|
||
|
// Synopsis: Same meaning as RegOpenKeyEx
|
||
|
//
|
||
|
// Arguments: [hKeyAncestor] -- IN
|
||
|
// [lpszKeyName] -- IN
|
||
|
// [security] -- IN
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
// History: 6/6/1996 RaviR Created
|
||
|
//
|
||
|
//____________________________________________________________________________
|
||
|
|
||
|
SC CRegKeyEx::ScOpen (
|
||
|
HKEY hKeyAncestor,
|
||
|
LPCTSTR lpszKeyName,
|
||
|
REGSAM security)
|
||
|
{
|
||
|
/*
|
||
|
* Open will frequently return ERROR_FILE_NOT_FOUND, which we
|
||
|
* don't want to be inundated with. Don't assign to a tracing SC.
|
||
|
*/
|
||
|
return (ScFromWin32 (Open(hKeyAncestor, lpszKeyName, security)));
|
||
|
}
|
||
|
|
||
|
|
||
|
//____________________________________________________________________________
|
||
|
//
|
||
|
// Member: IsValuePresent
|
||
|
//
|
||
|
// Arguments: [lpszValueName] -- IN
|
||
|
//
|
||
|
// Returns: BOOL.
|
||
|
//
|
||
|
// History: 3/21/1997 RaviR Created
|
||
|
//____________________________________________________________________________
|
||
|
//
|
||
|
|
||
|
BOOL CRegKeyEx::IsValuePresent(LPCTSTR lpszValueName)
|
||
|
{
|
||
|
DWORD cbData = 0;
|
||
|
LONG error = ::RegQueryValueEx (m_hKey, lpszValueName, 0, NULL,
|
||
|
NULL, &cbData);
|
||
|
|
||
|
return (error == ERROR_SUCCESS);
|
||
|
}
|
||
|
|
||
|
|
||
|
//____________________________________________________________________________
|
||
|
//
|
||
|
// Member: CRegKeyEx::ScQueryValue
|
||
|
//
|
||
|
// Synopsis: Same meaning as for RegQueryValueEx API.
|
||
|
//
|
||
|
// Arguments: [lpszValueName] -- IN
|
||
|
// [pType] -- IN
|
||
|
// [pData] -- IN
|
||
|
// [pLen] -- IN
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
// History: 6/6/1996 RaviR Created
|
||
|
//
|
||
|
//____________________________________________________________________________
|
||
|
|
||
|
SC CRegKeyEx::ScQueryValue (
|
||
|
LPCTSTR lpszValueName,
|
||
|
LPDWORD pType,
|
||
|
PVOID pData,
|
||
|
LPDWORD pLen)
|
||
|
{
|
||
|
ASSERT(pLen != NULL);
|
||
|
ASSERT(m_hKey != NULL);
|
||
|
|
||
|
LONG error = ::RegQueryValueEx (m_hKey, lpszValueName, 0, pType,
|
||
|
(LPBYTE)pData, pLen);
|
||
|
|
||
|
// Do not trace the error as it is legal for ScQueryValue to fail.
|
||
|
return (ScFromWin32 (error));
|
||
|
}
|
||
|
|
||
|
|
||
|
//____________________________________________________________________________
|
||
|
//
|
||
|
// Member: CRegKeyEx::ScEnumKey
|
||
|
//
|
||
|
// Synopsis: Same meaning as for RegEnumKeyEx API.
|
||
|
//
|
||
|
// Arguments: [iSubkey] -- IN
|
||
|
// [lpszName] -- OUT place to store the name
|
||
|
// [dwLen] -- IN
|
||
|
// [lpszLastModified] -- IN
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
// History: 5/22/1996 RaviR Created
|
||
|
//
|
||
|
//____________________________________________________________________________
|
||
|
|
||
|
SC CRegKeyEx::ScEnumKey (
|
||
|
DWORD iSubkey,
|
||
|
LPTSTR lpszName,
|
||
|
LPDWORD lpcchName,
|
||
|
PFILETIME lpftLastModified)
|
||
|
{
|
||
|
DECLARE_SC (sc, _T("CRegKeyEx::ScEnumKey"));
|
||
|
|
||
|
/*
|
||
|
* validate input
|
||
|
*/
|
||
|
sc = ScCheckPointers (lpszName, lpcchName);
|
||
|
if (sc)
|
||
|
return (sc);
|
||
|
|
||
|
if (*lpcchName == 0)
|
||
|
return (sc = E_UNEXPECTED);
|
||
|
|
||
|
/*
|
||
|
* make sure the key is open
|
||
|
*/
|
||
|
if (m_hKey == NULL)
|
||
|
return (sc = E_UNEXPECTED);
|
||
|
|
||
|
LONG error = ::RegEnumKeyEx (m_hKey, iSubkey, lpszName, lpcchName,
|
||
|
NULL, NULL, NULL, lpftLastModified);
|
||
|
|
||
|
/*
|
||
|
* RegEnumKeyEx will frequently return ERROR_NO_MORE_ITEMS, which we
|
||
|
* don't want to be inundated with. Don't assign to a tracing SC.
|
||
|
*/
|
||
|
return (ScFromWin32 (error));
|
||
|
}
|
||
|
|
||
|
//____________________________________________________________________________
|
||
|
//
|
||
|
// Member: CRegKeyEx::ScEnumValue
|
||
|
//
|
||
|
// Synopsis: Same meaning as for RegEnumValue API.
|
||
|
//
|
||
|
// Arguments: [iValue] -- IN
|
||
|
// [lpszValue] -- OUT
|
||
|
// [lpcchValue] -- OUT
|
||
|
// [lpdwType] -- OUT
|
||
|
// [lpbData] -- OUT
|
||
|
// [lpcbData] -- OUT
|
||
|
//
|
||
|
// Returns: SC
|
||
|
//
|
||
|
// History: 6/6/1996 RaviR Created
|
||
|
//
|
||
|
//____________________________________________________________________________
|
||
|
|
||
|
SC CRegKeyEx::ScEnumValue (
|
||
|
DWORD iValue,
|
||
|
LPTSTR lpszValue,
|
||
|
LPDWORD lpcchValue,
|
||
|
LPDWORD lpdwType,
|
||
|
LPBYTE lpbData,
|
||
|
LPDWORD lpcbData)
|
||
|
{
|
||
|
DECLARE_SC (sc, _T("CRegKeyEx::ScEnumValue"));
|
||
|
|
||
|
/*
|
||
|
* validate input
|
||
|
*/
|
||
|
sc = ScCheckPointers (lpszValue, lpcchValue);
|
||
|
if (sc)
|
||
|
return (sc);
|
||
|
|
||
|
if ((lpcbData == NULL) && (lpbData != NULL))
|
||
|
return (sc = E_INVALIDARG);
|
||
|
|
||
|
/*
|
||
|
* make sure the key is open
|
||
|
*/
|
||
|
if (m_hKey == NULL)
|
||
|
return (sc = E_UNEXPECTED);
|
||
|
|
||
|
LONG error = ::RegEnumValue (m_hKey, iValue, lpszValue, lpcchValue,
|
||
|
NULL, lpdwType, lpbData, lpcbData);
|
||
|
|
||
|
/*
|
||
|
* RegEnumValue will frequently return ERROR_NO_MORE_ITEMS, which we
|
||
|
* don't want to be inundated with. Don't assign to a tracing SC.
|
||
|
*/
|
||
|
return (ScFromWin32 (error));
|
||
|
}
|