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