From e4484b0bde0df1f3d3ed2b05d8636ffd27f52de9 Mon Sep 17 00:00:00 2001 From: Thomas Bluemel Date: Sat, 14 Jan 2006 23:17:26 +0000 Subject: [PATCH] - implemented RegDisablePredefinedCache() - added stubs for RegEnableReflectionKey(), RegDisableReflectionKey() and RegQueryReflectionKey() svn path=/trunk/; revision=20870 --- reactos/lib/advapi32/advapi32.def | 5 ++- reactos/lib/advapi32/reg/reg.c | 70 +++++++++++++++++++++++++++++-- reactos/w32api/include/winreg.h | 8 ++++ 3 files changed, 78 insertions(+), 5 deletions(-) diff --git a/reactos/lib/advapi32/advapi32.def b/reactos/lib/advapi32/advapi32.def index 175ddb9b5dd..72637e4cd1a 100644 --- a/reactos/lib/advapi32/advapi32.def +++ b/reactos/lib/advapi32/advapi32.def @@ -482,8 +482,10 @@ RegDeleteTreeA@8 RegDeleteTreeW@8 RegDeleteValueA@8 RegDeleteValueW@8 -;RegDisablePredefinedCache +RegDisablePredefinedCache@0 RegDisablePredefinedCacheEx@0 +RegDisableReflectionKey@4 +RegEnableReflectionKey@4 RegEnumKeyA@16 RegEnumKeyExA@32 RegEnumKeyExW@32 @@ -508,6 +510,7 @@ RegQueryInfoKeyA@48 RegQueryInfoKeyW@48 RegQueryMultipleValuesA@20 RegQueryMultipleValuesW@20 +RegQueryReflectionKey@8 RegQueryValueA@16 RegQueryValueExA@24 RegQueryValueExW@24 diff --git a/reactos/lib/advapi32/reg/reg.c b/reactos/lib/advapi32/reg/reg.c index e7c06d0749e..fa86a15e451 100644 --- a/reactos/lib/advapi32/reg/reg.c +++ b/reactos/lib/advapi32/reg/reg.c @@ -30,6 +30,7 @@ static RTL_CRITICAL_SECTION HandleTableCS; static HANDLE DefaultHandleTable[MAX_DEFAULT_HANDLES]; static HANDLE ProcessHeap; static BOOLEAN DefaultHandlesDisabled = FALSE; +static BOOLEAN DefaultHandleHKUDisabled = FALSE; /* PROTOTYPES ***************************************************************/ @@ -143,7 +144,7 @@ MapDefaultKey (OUT PHANDLE RealKey, { PHANDLE Handle; ULONG Index; - BOOLEAN DoOpen; + BOOLEAN DoOpen, DefDisabled; NTSTATUS Status = STATUS_SUCCESS; TRACE("MapDefaultKey (Key %x)\n", Key); @@ -162,8 +163,13 @@ MapDefaultKey (OUT PHANDLE RealKey, } RtlEnterCriticalSection (&HandleTableCS); - - if (!DefaultHandlesDisabled) + + if (Key == HKEY_CURRENT_USER) + DefDisabled = DefaultHandleHKUDisabled; + else + DefDisabled = DefaultHandlesDisabled; + + if (!DefDisabled) { Handle = &DefaultHandleTable[Index]; DoOpen = (*Handle == NULL); @@ -183,7 +189,7 @@ MapDefaultKey (OUT PHANDLE RealKey, if (NT_SUCCESS(Status)) { - if (!DefaultHandlesDisabled) + if (!DefDisabled) *RealKey = *Handle; else *(PULONG_PTR)Handle |= 0x1; @@ -294,6 +300,21 @@ OpenCurrentConfigKey (PHANDLE KeyHandle) } +/************************************************************************ + * RegDisablePredefinedCache + * + * @implemented + */ +LONG WINAPI +RegDisablePredefinedCache(VOID) +{ + RtlEnterCriticalSection (&HandleTableCS); + DefaultHandleHKUDisabled = TRUE; + RtlLeaveCriticalSection (&HandleTableCS); + return ERROR_SUCCESS; +} + + /************************************************************************ * RegDisablePredefinedCacheEx * @@ -1633,6 +1654,32 @@ RegDeleteTreeA(IN HKEY hKey, } +/************************************************************************ + * RegDisableReflectionKey + * + * @unimplemented + */ +LONG WINAPI +RegDisableReflectionKey(IN HKEY hBase) +{ + DPRINT1("RegDisableReflectionKey(0x%p) UNIMPLEMENTED!\n", hBase); + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/************************************************************************ + * RegEnableReflectionKey + * + * @unimplemented + */ +LONG WINAPI +RegEnableReflectionKey(IN HKEY hBase) +{ + DPRINT1("RegEnableReflectionKey(0x%p) UNIMPLEMENTED!\n", hBase); + return ERROR_CALL_NOT_IMPLEMENTED; +} + + /************************************************************************ * RegSetKeyValueW * @@ -3371,6 +3418,21 @@ RegQueryMultipleValuesW (HKEY hKey, } +/************************************************************************ + * RegQueryReflectionKey + * + * @unimplemented + */ +LONG WINAPI +RegQueryReflectionKey(IN HKEY hBase, + OUT BOOL* bIsReflectionDisabled) +{ + DPRINT1("RegQueryReflectionKey(0x%p, 0x%p) UNIMPLEMENTED!\n", + hBase, bIsReflectionDisabled); + return ERROR_CALL_NOT_IMPLEMENTED; +} + + /************************************************************************ * RegQueryValueExW * diff --git a/reactos/w32api/include/winreg.h b/reactos/w32api/include/winreg.h index 452639690e0..c121c4e20f2 100644 --- a/reactos/w32api/include/winreg.h +++ b/reactos/w32api/include/winreg.h @@ -78,8 +78,13 @@ LONG WINAPI RegDeleteTreeW(HKEY,LPCWSTR); #endif LONG WINAPI RegDeleteValueA(HKEY,LPCSTR); LONG WINAPI RegDeleteValueW(HKEY,LPCWSTR); +#if (_WIN32_WINNT >= 0x0500) +LONG WINAPI RegDisablePredefinedCache(VOID); +#endif #if (_WIN32_WINNT >= 0x0600) LONG WINAPI RegDisablePredefinedCacheEx(VOID); +LONG WINAPI RegDisableReflectionKey(HKEY); +LONG WINAPI RegEnableReflectionKey(HKEY); #endif LONG WINAPI RegEnumKeyA(HKEY,DWORD,LPSTR,DWORD); LONG WINAPI RegEnumKeyW(HKEY,DWORD,LPWSTR,DWORD); @@ -104,6 +109,9 @@ LONG WINAPI RegQueryInfoKeyA(HKEY,LPSTR,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWOR LONG WINAPI RegQueryInfoKeyW(HKEY,LPWSTR,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PFILETIME); LONG WINAPI RegQueryMultipleValuesA(HKEY,PVALENTA,DWORD,LPSTR,LPDWORD); LONG WINAPI RegQueryMultipleValuesW(HKEY,PVALENTW,DWORD,LPWSTR,LPDWORD); +#if (_WIN32_WINNT >= 0x0600) +LONG WINAPI RegQueryReflectionKey(HKEY,BOOL*); +#endif LONG WINAPI RegQueryValueA(HKEY,LPCSTR,LPSTR,PLONG); LONG WINAPI RegQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD); LONG WINAPI RegQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);