windows-nt/Source/XPSP1/NT/admin/activec/nodemgr/regkeyex.cpp
2020-09-26 16:20:57 +08:00

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));
}