|
|
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
ntenv.c
Abstract:
Environment routines to emulate NT environment
Author:
Jim Schmidt (jimschm) 24-Aug-1998
Revision History:
Name (alias) Date Description
--*/
#include "pch.h"
static PMAPSTRUCT g_NtSysEnvMap; static PMAPSTRUCT g_NtUserEnvMap;
VOID InitNtEnvironment ( VOID ) { TCHAR Buf[4096];
g_NtSysEnvMap = CreateStringMapping(); g_NtUserEnvMap = CreateStringMapping();
//
// Add the basics
//
// %COMPUTERNAME%
if (GetUpgradeComputerName (Buf)) { MapNtSystemEnvironmentVariable (TEXT("%COMPUTERNAME%"), Buf); }
// %HOMEDRIVE% (%HOMEPATH% is unknown)
MapNtSystemEnvironmentVariable (TEXT("%HOMEDRIVE%"), g_BootDrive);
// %OS%
MapNtSystemEnvironmentVariable (TEXT("%OS%"), TEXT("Windows_NT"));
// %ProgramFiles%
MapNtSystemEnvironmentVariable (TEXT("%ProgramFiles%"), g_ProgramFilesDir);
// %SystemDrive%
MapNtSystemEnvironmentVariable (TEXT("%SystemDrive%"), g_WinDrive);
// %SystemRoot%, %windir%
MapNtSystemEnvironmentVariable (TEXT("%SystemRoot%"), g_WinDir); MapNtSystemEnvironmentVariable (TEXT("%windir%"), g_WinDir);
// %AllUsersProfile% is unknown, but we use a symbolic representation until GUI mode
MapNtSystemEnvironmentVariable (TEXT("%AllUsersProfile%"), TEXT(">") S_DOT_ALLUSERS); }
VOID TerminateNtEnvironment ( VOID ) { DestroyStringMapping (g_NtSysEnvMap); DestroyStringMapping (g_NtUserEnvMap); }
VOID InitNtUserEnvironment ( IN PUSERENUM UserEnumPtr ) { DestroyStringMapping (g_NtUserEnvMap); g_NtUserEnvMap = CreateStringMapping();
//
// Add per-user settings
//
// %USERNAME%
MapNtUserEnvironmentVariable (TEXT("%USERNAME%"), UserEnumPtr->FixedUserName);
// %USERDNSDOMAIN%, %USERDOMAIN% and %USERPROFILE% are not known. However, we use
// a symbolic path for %USERPROFILE% (>username).
MapNtUserEnvironmentVariable (TEXT("%USERPROFILE%"), UserEnumPtr->NewProfilePath);
}
VOID TerminateNtUserEnvironment ( VOID ) { //
// Simply blow away old mapping and make an empty one
//
DestroyStringMapping (g_NtUserEnvMap); g_NtUserEnvMap = CreateStringMapping(); }
VOID MapNtUserEnvironmentVariable ( IN PCSTR Variable, IN PCSTR Value ) { AddStringMappingPair (g_NtUserEnvMap, Variable, Value); }
VOID MapNtSystemEnvironmentVariable ( IN PCSTR Variable, IN PCSTR Value ) { AddStringMappingPair (g_NtSysEnvMap, Variable, Value); }
BOOL ExpandNtEnvironmentVariables ( IN PCSTR SourceString, OUT PSTR DestinationString, // can be the same as SourceString
IN INT DestSizeInBytes ) { BOOL Changed;
Changed = MappingSearchAndReplaceEx ( g_NtUserEnvMap, SourceString, DestinationString, 0, NULL, DestSizeInBytes, STRMAP_ANY_MATCH, NULL, NULL );
Changed |= MappingSearchAndReplaceEx ( g_NtSysEnvMap, DestinationString, DestinationString, 0, NULL, DestSizeInBytes, STRMAP_ANY_MATCH, NULL, NULL );
return Changed; }
|