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] =
{
BaseSrvNlsUpdateCacheCount,
BaseSrvSetTermsrvClientTimeZone,
BaseSrvSxsCreateActivationContext,
- BaseSrvDebugProcess,
+ BaseSrvUnknown,
BaseSrvRegisterThread,
BaseSrvNlsGetUserInfo,
};
TRUE, // BaseSrvNlsUpdateCacheCount
TRUE, // BaseSrvSetTermsrvClientTimeZone
TRUE, // BaseSrvSxsCreateActivationContext
- TRUE, // BasepDebugProcess
+ TRUE, // BaseSrvUnknown
TRUE, // BaseSrvRegisterThread
TRUE, // BaseSrvNlsGetUserInfo
};
"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,
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;
ASSERT(NT_SUCCESS(Status));
}
+ /* Initialize NLS */
+ BaseSrvNLSInit(BaseStaticServerData);
+
/* Finally, set the pointer */
LoadedServerDll->SharedSection = BaseStaticServerData;
}