diff --git a/reactos/include/reactos/subsys/win/base.h b/reactos/include/reactos/subsys/win/base.h index ad5dacaa7bc..e2254f60212 100644 --- a/reactos/include/reactos/subsys/win/base.h +++ b/reactos/include/reactos/subsys/win/base.h @@ -62,6 +62,44 @@ typedef struct _NLS_USER_INFO } NLS_USER_INFO, *PNLS_USER_INFO; C_ASSERT(sizeof(NLS_USER_INFO) == 0x1870); +typedef struct _INIFILE_MAPPING_TARGET +{ + struct _INIFILE_MAPPING_TARGET *Next; + UNICODE_STRING RegistryPath; +} INIFILE_MAPPING_TARGET, *PINIFILE_MAPPING_TARGET; + +typedef struct _INIFILE_MAPPING_VARNAME +{ + struct _INIFILE_MAPPING_VARNAME *Next; + UNICODE_STRING Name; + ULONG MappingFlags; + PINIFILE_MAPPING_TARGET MappingTarget; +} INIFILE_MAPPING_VARNAME, *PINIFILE_MAPPING_VARNAME; + +typedef struct _INIFILE_MAPPING_APPNAME +{ + struct _INIFILE_MAPPING_APPNAME *Next; + UNICODE_STRING Name; + PINIFILE_MAPPING_VARNAME VariableNames; + PINIFILE_MAPPING_VARNAME DefaultVarNameMapping; +} INIFILE_MAPPING_APPNAME, *PINIFILE_MAPPING_APPNAME; + +typedef struct _INIFILE_MAPPING_FILENAME +{ + struct _INIFILE_MAPPING_FILENAME *Next; + UNICODE_STRING Name; + PINIFILE_MAPPING_APPNAME ApplicationNames; + PINIFILE_MAPPING_APPNAME DefaultAppNameMapping; +} INIFILE_MAPPING_FILENAME, *PINIFILE_MAPPING_FILENAME; + +typedef struct _INIFILE_MAPPING +{ + PINIFILE_MAPPING_FILENAME FileNames; + PINIFILE_MAPPING_FILENAME DefaultFileNameMapping; + PINIFILE_MAPPING_FILENAME WinIniFileMapping; + ULONG Reserved; +} INIFILE_MAPPING, *PINIFILE_MAPPING; + typedef struct _BASE_STATIC_SERVER_DATA { UNICODE_STRING WindowsDirectory; diff --git a/reactos/subsystems/win/basesrv/init.c b/reactos/subsystems/win/basesrv/init.c index 54f5a44e60e..c13925e2649 100644 --- a/reactos/subsystems/win/basesrv/init.c +++ b/reactos/subsystems/win/basesrv/init.c @@ -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] = { @@ -130,9 +132,29 @@ PCHAR BaseServerApiNameTable[BasepMaxApiNumber - BASESRV_FIRST_API_NUMBER] = "BaseNlsGetUserInfo", }; - /* FUNCTIONS ******************************************************************/ +NTSTATUS +NTAPI +BaseSrvInitializeIniFileMappings(IN PBASE_STATIC_SERVER_DATA StaticServerData) +{ + /* Allocate the mapping blob */ + BaseSrvIniFileMapping = RtlAllocateHeap(BaseSrvHeap, + 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, @@ -418,6 +440,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;