[BASESRV]
[reactos.git] / reactos / subsystems / win / basesrv / init.c
index 7c6754a..6489ca8 100644 (file)
@@ -24,6 +24,8 @@ HANDLE BaseSrvHeap = NULL;          // Our own heap.
 HANDLE BaseSrvSharedHeap = NULL;    // Shared heap with CSR. (CsrSrvSharedSectionHeap)
 PBASE_STATIC_SERVER_DATA BaseStaticServerData = NULL;   // Data that we can share amongst processes. Initialized inside BaseSrvSharedHeap.
 
+PINIFILE_MAPPING BaseSrvIniFileMapping;
+
 // Windows Server 2003 table from http://j00ru.vexillium.org/csrss_list/api_list.html#Windows_2k3
 PCSR_API_ROUTINE BaseServerApiDispatchTable[BasepMaxApiNumber - BASESRV_FIRST_API_NUMBER] =
 {
@@ -55,7 +57,7 @@ PCSR_API_ROUTINE BaseServerApiDispatchTable[BasepMaxApiNumber - BASESRV_FIRST_AP
     BaseSrvNlsUpdateCacheCount,
     BaseSrvSetTermsrvClientTimeZone,
     BaseSrvSxsCreateActivationContext,
-    BaseSrvDebugProcess,
+    BaseSrvUnknown,
     BaseSrvRegisterThread,
     BaseSrvNlsGetUserInfo,
 };
@@ -90,7 +92,7 @@ BOOLEAN BaseServerApiServerValidTable[BasepMaxApiNumber - BASESRV_FIRST_API_NUMB
     TRUE,   // BaseSrvNlsUpdateCacheCount
     TRUE,   // BaseSrvSetTermsrvClientTimeZone
     TRUE,   // BaseSrvSxsCreateActivationContext
-    TRUE,   // BasepDebugProcess
+    TRUE,   // BaseSrvUnknown
     TRUE,   // BaseSrvRegisterThread
     TRUE,   // BaseSrvNlsGetUserInfo
 };
@@ -125,13 +127,34 @@ PCHAR BaseServerApiNameTable[BasepMaxApiNumber - BASESRV_FIRST_API_NUMBER] =
     "BaseNlsUpdateCacheCount",
     "BaseSetTermsrvClientTimeZone",
     "BaseSxsCreateActivationContext",
+    "BaseUnknown",
     "BaseRegisterThread",
     "BaseNlsGetUserInfo",
 };
 
-
 /* FUNCTIONS ******************************************************************/
 
+NTSTATUS
+NTAPI
+BaseSrvInitializeIniFileMappings(IN PBASE_STATIC_SERVER_DATA StaticServerData)
+{
+    /* Allocate the mapping blob */
+    BaseSrvIniFileMapping = RtlAllocateHeap(BaseSrvSharedHeap,
+                                            HEAP_ZERO_MEMORY,
+                                            sizeof(*BaseSrvIniFileMapping));
+    if (BaseSrvIniFileMapping == NULL)
+    {
+        DPRINT1("BASESRV: Unable to allocate memory in shared heap for IniFileMapping\n");
+        return STATUS_NO_MEMORY;
+    }
+
+    /* Set it*/
+    StaticServerData->IniFileMapping = BaseSrvIniFileMapping;
+
+    /* FIXME: Do the work to initialize the mappings */
+    return STATUS_SUCCESS;
+}
+
 NTSTATUS
 NTAPI
 CreateBaseAcls(OUT PACL* Dacl,
@@ -257,6 +280,7 @@ NTAPI
 BaseInitializeStaticServerData(IN PCSR_SERVER_DLL LoadedServerDll)
 {
     NTSTATUS Status;
+    BOOLEAN Success;
     WCHAR Buffer[MAX_PATH];
     PWCHAR HeapBuffer;
     UNICODE_STRING SystemRootString;
@@ -304,21 +328,21 @@ BaseInitializeStaticServerData(IN PCSR_SERVER_DLL LoadedServerDll)
 
     /* Create the base directory */
     Buffer[SystemRootString.Length / sizeof(WCHAR)] = UNICODE_NULL;
-    Status = RtlCreateUnicodeString(&BaseSrvWindowsDirectory,
-                                    SystemRootString.Buffer);
-    ASSERT(NT_SUCCESS(Status));
+    Success = RtlCreateUnicodeString(&BaseSrvWindowsDirectory,
+                                     SystemRootString.Buffer);
+    ASSERT(Success);
 
     /* Create the system directory */
     wcscat(SystemRootString.Buffer, L"\\System32");
-    Status = RtlCreateUnicodeString(&BaseSrvWindowsSystemDirectory,
-                                    SystemRootString.Buffer);
-    ASSERT(NT_SUCCESS(Status));
+    Success = RtlCreateUnicodeString(&BaseSrvWindowsSystemDirectory,
+                                     SystemRootString.Buffer);
+    ASSERT(Success);
 
     /* Create the kernel32 path */
     wcscat(SystemRootString.Buffer, L"\\kernel32.dll");
-    Status = RtlCreateUnicodeString(&BaseSrvKernel32DllPath,
-                                    SystemRootString.Buffer);
-    ASSERT(NT_SUCCESS(Status));
+    Success = RtlCreateUnicodeString(&BaseSrvKernel32DllPath,
+                                     SystemRootString.Buffer);
+    ASSERT(Success);
 
     /* FIXME: Check Session ID */
     wcscpy(Buffer, L"\\BaseNamedObjects");
@@ -417,6 +441,10 @@ BaseInitializeStaticServerData(IN PCSR_SERVER_DLL LoadedServerDll)
                                       NULL);
     ASSERT(NT_SUCCESS(Status));
 
+    /* Setup the ini file mappings */
+    Status = BaseSrvInitializeIniFileMappings(BaseStaticServerData);
+    ASSERT(NT_SUCCESS(Status));
+
     /* FIXME: Should query the registry for these */
     BaseStaticServerData->DefaultSeparateVDM = FALSE;
     BaseStaticServerData->IsWowTaskReady = FALSE;
@@ -525,6 +553,9 @@ BaseInitializeStaticServerData(IN PCSR_SERVER_DLL LoadedServerDll)
         ASSERT(NT_SUCCESS(Status));
     }
 
+    /* Initialize NLS */
+    BaseSrvNLSInit(BaseStaticServerData);
+
     /* Finally, set the pointer */
     LoadedServerDll->SharedSection = BaseStaticServerData;
 }