Author: fireball
Date: Thu Jun 11 15:42:07 2009
New Revision: 41379
URL:
http://svn.reactos.org/svn/reactos?rev=41379&view=rev
Log:
- Add a lazy-initializing hack until user32 is able to delay-load the advapi32 as it
should. It fixes a problem of trying to enter a non-initialized critical section object
and possibly hanging on every boot.
Modified:
trunk/reactos/dll/win32/advapi32/reg/reg.c
Modified: trunk/reactos/dll/win32/advapi32/reg/reg.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advapi32/reg/reg…
==============================================================================
--- trunk/reactos/dll/win32/advapi32/reg/reg.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/advapi32/reg/reg.c [iso-8859-1] Thu Jun 11 15:42:07 2009
@@ -31,6 +31,7 @@
static HANDLE ProcessHeap;
static BOOLEAN DefaultHandlesDisabled = FALSE;
static BOOLEAN DefaultHandleHKUDisabled = FALSE;
+static BOOLEAN DllInitialized = FALSE; /* HACK */
/* PROTOTYPES ***************************************************************/
@@ -66,10 +67,16 @@
{
TRACE("RegInitialize()\n");
- ProcessHeap = RtlGetProcessHeap();
- RtlZeroMemory(DefaultHandleTable,
- MAX_DEFAULT_HANDLES * sizeof(HANDLE));
- RtlInitializeCriticalSection(&HandleTableCS);
+ /* Lazy init hack */
+ if (!DllInitialized)
+ {
+ ProcessHeap = RtlGetProcessHeap();
+ RtlZeroMemory(DefaultHandleTable,
+ MAX_DEFAULT_HANDLES * sizeof(HANDLE));
+ RtlInitializeCriticalSection(&HandleTableCS);
+
+ DllInitialized = TRUE;
+ }
return TRUE;
}
@@ -161,7 +168,7 @@
{
return STATUS_INVALID_PARAMETER;
}
-
+ RegInitialize(); /* HACK until delay-loading is implemented */
RtlEnterCriticalSection (&HandleTableCS);
if (Key == HKEY_CURRENT_USER)
@@ -205,7 +212,7 @@
CloseDefaultKeys(VOID)
{
ULONG i;
-
+ RegInitialize(); /* HACK until delay-loading is implemented */
RtlEnterCriticalSection(&HandleTableCS);
for (i = 0; i < MAX_DEFAULT_HANDLES; i++)
@@ -311,6 +318,7 @@
LONG WINAPI
RegDisablePredefinedCache(VOID)
{
+ RegInitialize(); /* HACK until delay-loading is implemented */
RtlEnterCriticalSection(&HandleTableCS);
DefaultHandleHKUDisabled = TRUE;
RtlLeaveCriticalSection(&HandleTableCS);
@@ -326,6 +334,7 @@
LONG WINAPI
RegDisablePredefinedCacheEx(VOID)
{
+ RegInitialize(); /* HACK until delay-loading is implemented */
RtlEnterCriticalSection(&HandleTableCS);
DefaultHandlesDisabled = TRUE;
DefaultHandleHKUDisabled = TRUE;
@@ -371,7 +380,7 @@
ASSERT(hNewHKey != NULL);
}
-
+ RegInitialize(); /* HACK until delay-loading is implemented */
RtlEnterCriticalSection(&HandleTableCS);
/* close the currently mapped handle if existing */
@@ -3472,7 +3481,7 @@
handle for example! */
return RtlNtStatusToDosError(Status);
}
-
+ RegInitialize(); /* HACK until delay-loading is implemented */
TokenUserData = RtlAllocateHeap(ProcessHeap,
0,
RequiredLength);