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] =
{
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",
"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,
BaseInitializeStaticServerData(IN PCSR_SERVER_DLL LoadedServerDll)
{
NTSTATUS Status;
+ BOOLEAN Success;
WCHAR Buffer[MAX_PATH];
PWCHAR HeapBuffer;
UNICODE_STRING SystemRootString;
/* 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");
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;
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;