[CSR]
[reactos.git] / reactos / subsystems / win / basesrv / init.c
index 54f5a44..b08d6bc 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] =
 {
@@ -95,6 +97,11 @@ BOOLEAN BaseServerApiServerValidTable[BasepMaxApiNumber - BASESRV_FIRST_API_NUMB
     TRUE,   // BaseSrvNlsGetUserInfo
 };
 
+/*
+ * On Windows Server 2003, CSR Servers contain
+ * the API Names Table only in Debug Builds.
+ */
+#ifdef CSR_DBG
 PCHAR BaseServerApiNameTable[BasepMaxApiNumber - BASESRV_FIRST_API_NUMBER] =
 {
     "BaseCreateProcess",
@@ -129,10 +136,31 @@ PCHAR BaseServerApiNameTable[BasepMaxApiNumber - BASESRV_FIRST_API_NUMBER] =
     "BaseRegisterThread",
     "BaseNlsGetUserInfo",
 };
-
+#endif
 
 /* 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,
@@ -258,6 +286,7 @@ NTAPI
 BaseInitializeStaticServerData(IN PCSR_SERVER_DLL LoadedServerDll)
 {
     NTSTATUS Status;
+    BOOLEAN Success;
     WCHAR Buffer[MAX_PATH];
     PWCHAR HeapBuffer;
     UNICODE_STRING SystemRootString;
@@ -305,21 +334,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");
@@ -418,6 +447,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;
@@ -540,7 +573,9 @@ CSR_SERVER_DLL_INIT(ServerDllInitialization)
     LoadedServerDll->HighestApiSupported = BasepMaxApiNumber;
     LoadedServerDll->DispatchTable = BaseServerApiDispatchTable;
     LoadedServerDll->ValidTable = BaseServerApiServerValidTable;
+#ifdef CSR_DBG
     LoadedServerDll->NameTable = BaseServerApiNameTable;
+#endif
     LoadedServerDll->SizeOfProcessData = 0;
     LoadedServerDll->ConnectCallback = NULL;
     LoadedServerDll->DisconnectCallback = NULL;