wineboot: Use wide character string literals.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
0c68a1510e
commit
c42b415fab
|
@ -84,34 +84,28 @@ extern void kill_processes( BOOL kill_desktop );
|
|||
static WCHAR windowsdir[MAX_PATH];
|
||||
static const BOOL is_64bit = sizeof(void *) > sizeof(int);
|
||||
|
||||
static const WCHAR winebuilddirW[] = {'W','I','N','E','B','U','I','L','D','D','I','R',0};
|
||||
static const WCHAR winedatadirW[] = {'W','I','N','E','D','A','T','A','D','I','R',0};
|
||||
static const WCHAR wineconfigdirW[] = {'W','I','N','E','C','O','N','F','I','G','D','I','R',0};
|
||||
|
||||
/* retrieve the path to the wine.inf file */
|
||||
static WCHAR *get_wine_inf_path(void)
|
||||
{
|
||||
static const WCHAR loaderW[] = {'\\','l','o','a','d','e','r',0};
|
||||
static const WCHAR wine_infW[] = {'\\','w','i','n','e','.','i','n','f',0};
|
||||
WCHAR *dir, *name = NULL;
|
||||
|
||||
if ((dir = _wgetenv( winebuilddirW )))
|
||||
if ((dir = _wgetenv( L"WINEBUILDDIR" )))
|
||||
{
|
||||
if (!(name = HeapAlloc( GetProcessHeap(), 0,
|
||||
sizeof(loaderW) + sizeof(wine_infW) + lstrlenW(dir) * sizeof(WCHAR) )))
|
||||
sizeof(L"\\loader\\wine.inf") + lstrlenW(dir) * sizeof(WCHAR) )))
|
||||
return NULL;
|
||||
lstrcpyW( name, dir );
|
||||
lstrcatW( name, loaderW );
|
||||
lstrcatW( name, L"\\loader" );
|
||||
}
|
||||
else if ((dir = _wgetenv( winedatadirW )))
|
||||
else if ((dir = _wgetenv( L"WINEDATADIR" )))
|
||||
{
|
||||
if (!(name = HeapAlloc( GetProcessHeap(), 0, sizeof(wine_infW) + lstrlenW(dir) * sizeof(WCHAR) )))
|
||||
if (!(name = HeapAlloc( GetProcessHeap(), 0, sizeof(L"\\wine.inf") + lstrlenW(dir) * sizeof(WCHAR) )))
|
||||
return NULL;
|
||||
lstrcpyW( name, dir );
|
||||
}
|
||||
else return NULL;
|
||||
|
||||
lstrcatW( name, wine_infW );
|
||||
lstrcatW( name, L"\\wine.inf" );
|
||||
name[1] = '\\'; /* change \??\ to \\?\ */
|
||||
return name;
|
||||
}
|
||||
|
@ -119,15 +113,14 @@ static WCHAR *get_wine_inf_path(void)
|
|||
/* update the timestamp if different from the reference time */
|
||||
static BOOL update_timestamp( const WCHAR *config_dir, unsigned long timestamp )
|
||||
{
|
||||
static const WCHAR timestampW[] = {'\\','.','u','p','d','a','t','e','-','t','i','m','e','s','t','a','m','p',0};
|
||||
BOOL ret = FALSE;
|
||||
int fd, count;
|
||||
char buffer[100];
|
||||
WCHAR *file = HeapAlloc( GetProcessHeap(), 0, lstrlenW(config_dir) * sizeof(WCHAR) + sizeof(timestampW) );
|
||||
WCHAR *file = HeapAlloc( GetProcessHeap(), 0, lstrlenW(config_dir) * sizeof(WCHAR) + sizeof(L"\\.update-timestamp") );
|
||||
|
||||
if (!file) return FALSE;
|
||||
lstrcpyW( file, config_dir );
|
||||
lstrcatW( file, timestampW );
|
||||
lstrcatW( file, L"\\.update-timestamp" );
|
||||
|
||||
if ((fd = _wopen( file, O_RDWR )) != -1)
|
||||
{
|
||||
|
@ -164,10 +157,10 @@ done:
|
|||
static const WCHAR *prettyprint_configdir(void)
|
||||
{
|
||||
static WCHAR buffer[MAX_PATH];
|
||||
WCHAR *p, *path = _wgetenv( wineconfigdirW );
|
||||
WCHAR *p, *path = _wgetenv( L"WINECONFIGDIR" );
|
||||
|
||||
lstrcpynW( buffer, path, ARRAY_SIZE(buffer) );
|
||||
if (lstrlenW( wineconfigdirW ) >= ARRAY_SIZE(buffer) )
|
||||
if (lstrlenW( path ) >= ARRAY_SIZE(buffer) )
|
||||
lstrcpyW( buffer + ARRAY_SIZE(buffer) - 4, L"..." );
|
||||
|
||||
if (!wcsncmp( buffer, L"\\??\\unix\\", 9 ))
|
||||
|
@ -221,14 +214,12 @@ static unsigned int get_model( unsigned int reg0, unsigned int *stepping, unsign
|
|||
|
||||
static void get_identifier( WCHAR *buf, size_t size, const WCHAR *arch )
|
||||
{
|
||||
static const WCHAR fmtW[] = {'%','s',' ','F','a','m','i','l','y',' ','%','u',' ','M','o','d','e','l',
|
||||
' ','%','u',' ','S','t','e','p','p','i','n','g',' ','%','u',0};
|
||||
unsigned int family, model, stepping;
|
||||
int regs[4] = {0, 0, 0, 0};
|
||||
|
||||
__cpuid( regs, 1 );
|
||||
model = get_model( regs[0], &stepping, &family );
|
||||
swprintf( buf, size, fmtW, arch, family, model, stepping );
|
||||
swprintf( buf, size, L"%s Family %u Model %u Stepping %u", arch, family, model, stepping );
|
||||
}
|
||||
|
||||
static void get_vendorid( WCHAR *buf )
|
||||
|
@ -505,24 +496,6 @@ done:
|
|||
/* create the volatile hardware registry keys */
|
||||
static void create_hardware_registry_keys(void)
|
||||
{
|
||||
static const WCHAR SystemW[] = {'H','a','r','d','w','a','r','e','\\','D','e','s','c','r','i','p','t','i','o','n','\\',
|
||||
'S','y','s','t','e','m',0};
|
||||
static const WCHAR fpuW[] = {'F','l','o','a','t','i','n','g','P','o','i','n','t','P','r','o','c','e','s','s','o','r',0};
|
||||
static const WCHAR cpuW[] = {'C','e','n','t','r','a','l','P','r','o','c','e','s','s','o','r',0};
|
||||
static const WCHAR FeatureSetW[] = {'F','e','a','t','u','r','e','S','e','t',0};
|
||||
static const WCHAR IdentifierW[] = {'I','d','e','n','t','i','f','i','e','r',0};
|
||||
static const WCHAR ProcessorNameStringW[] = {'P','r','o','c','e','s','s','o','r','N','a','m','e','S','t','r','i','n','g',0};
|
||||
static const WCHAR SysidW[] = {'A','T',' ','c','o','m','p','a','t','i','b','l','e',0};
|
||||
static const WCHAR ARMSysidW[] = {'A','R','M',' ','p','r','o','c','e','s','s','o','r',' ','f','a','m','i','l','y',0};
|
||||
static const WCHAR mhzKeyW[] = {'~','M','H','z',0};
|
||||
static const WCHAR VendorIdentifierW[] = {'V','e','n','d','o','r','I','d','e','n','t','i','f','i','e','r',0};
|
||||
static const WCHAR PercentDW[] = {'%','d',0};
|
||||
static const WCHAR ARMCpuDescrW[] = {'A','R','M',' ','F','a','m','i','l','y',' ','%','d',' ','M','o','d','e','l',' ','%','d',
|
||||
' ','R','e','v','i','s','i','o','n',' ','%','d',0};
|
||||
static const WCHAR x86W[] = {'x','8','6',0};
|
||||
static const WCHAR intel64W[] = {'I','n','t','e','l','6','4',0};
|
||||
static const WCHAR amd64W[] = {'A','M','D','6','4',0};
|
||||
static const WCHAR authenticamdW[] = {'A','u','t','h','e','n','t','i','c','A','M','D',0};
|
||||
unsigned int i;
|
||||
HKEY hkey, system_key, cpu_key, fpu_key;
|
||||
SYSTEM_CPU_INFORMATION sci;
|
||||
|
@ -544,21 +517,22 @@ static void create_hardware_registry_keys(void)
|
|||
{
|
||||
case PROCESSOR_ARCHITECTURE_ARM:
|
||||
case PROCESSOR_ARCHITECTURE_ARM64:
|
||||
swprintf( id, ARRAY_SIZE(id), ARMCpuDescrW, sci.Level, HIBYTE(sci.Revision), LOBYTE(sci.Revision) );
|
||||
swprintf( id, ARRAY_SIZE(id), L"ARM Family %u Model %u Revision %u",
|
||||
sci.Level, HIBYTE(sci.Revision), LOBYTE(sci.Revision) );
|
||||
break;
|
||||
|
||||
case PROCESSOR_ARCHITECTURE_AMD64:
|
||||
get_identifier( id, ARRAY_SIZE(id), !wcscmp(vendorid, authenticamdW) ? amd64W : intel64W );
|
||||
get_identifier( id, ARRAY_SIZE(id), !wcscmp(vendorid, L"AuthenticAMD") ? L"AMD64" : L"Intel64" );
|
||||
break;
|
||||
|
||||
case PROCESSOR_ARCHITECTURE_INTEL:
|
||||
default:
|
||||
get_identifier( id, ARRAY_SIZE(id), x86W );
|
||||
get_identifier( id, ARRAY_SIZE(id), L"x86" );
|
||||
break;
|
||||
}
|
||||
|
||||
if (RegCreateKeyExW( HKEY_LOCAL_MACHINE, SystemW, 0, NULL, REG_OPTION_VOLATILE,
|
||||
KEY_ALL_ACCESS, NULL, &system_key, NULL ))
|
||||
if (RegCreateKeyExW( HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System", 0, NULL,
|
||||
REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &system_key, NULL ))
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, power_info );
|
||||
return;
|
||||
|
@ -568,22 +542,22 @@ static void create_hardware_registry_keys(void)
|
|||
{
|
||||
case PROCESSOR_ARCHITECTURE_ARM:
|
||||
case PROCESSOR_ARCHITECTURE_ARM64:
|
||||
set_reg_value( system_key, IdentifierW, ARMSysidW );
|
||||
set_reg_value( system_key, L"Identifier", L"ARM processor family" );
|
||||
break;
|
||||
|
||||
case PROCESSOR_ARCHITECTURE_INTEL:
|
||||
case PROCESSOR_ARCHITECTURE_AMD64:
|
||||
default:
|
||||
set_reg_value( system_key, IdentifierW, SysidW );
|
||||
set_reg_value( system_key, L"Identifier", L"AT compatible" );
|
||||
break;
|
||||
}
|
||||
|
||||
if (sci.Architecture == PROCESSOR_ARCHITECTURE_ARM ||
|
||||
sci.Architecture == PROCESSOR_ARCHITECTURE_ARM64 ||
|
||||
RegCreateKeyExW( system_key, fpuW, 0, NULL, REG_OPTION_VOLATILE,
|
||||
RegCreateKeyExW( system_key, L"FloatingPointProcessor", 0, NULL, REG_OPTION_VOLATILE,
|
||||
KEY_ALL_ACCESS, NULL, &fpu_key, NULL ))
|
||||
fpu_key = 0;
|
||||
if (RegCreateKeyExW( system_key, cpuW, 0, NULL, REG_OPTION_VOLATILE,
|
||||
if (RegCreateKeyExW( system_key, L"CentralProcessor", 0, NULL, REG_OPTION_VOLATILE,
|
||||
KEY_ALL_ACCESS, NULL, &cpu_key, NULL ))
|
||||
cpu_key = 0;
|
||||
|
||||
|
@ -591,16 +565,16 @@ static void create_hardware_registry_keys(void)
|
|||
{
|
||||
WCHAR numW[10];
|
||||
|
||||
swprintf( numW, ARRAY_SIZE(numW), PercentDW, i );
|
||||
swprintf( numW, ARRAY_SIZE(numW), L"%u", i );
|
||||
if (!RegCreateKeyExW( cpu_key, numW, 0, NULL, REG_OPTION_VOLATILE,
|
||||
KEY_ALL_ACCESS, NULL, &hkey, NULL ))
|
||||
{
|
||||
RegSetValueExW( hkey, FeatureSetW, 0, REG_DWORD, (BYTE *)&sci.FeatureSet, sizeof(DWORD) );
|
||||
set_reg_value( hkey, IdentifierW, id );
|
||||
RegSetValueExW( hkey, L"FeatureSet", 0, REG_DWORD, (BYTE *)&sci.FeatureSet, sizeof(DWORD) );
|
||||
set_reg_value( hkey, L"Identifier", id );
|
||||
/* TODO: report ARM properly */
|
||||
set_reg_value( hkey, ProcessorNameStringW, namestr );
|
||||
set_reg_value( hkey, VendorIdentifierW, vendorid );
|
||||
RegSetValueExW( hkey, mhzKeyW, 0, REG_DWORD, (BYTE *)&power_info[i].MaxMhz, sizeof(DWORD) );
|
||||
set_reg_value( hkey, L"ProcessorNameString", namestr );
|
||||
set_reg_value( hkey, L"VendorIdentifier", vendorid );
|
||||
RegSetValueExW( hkey, L"~MHz", 0, REG_DWORD, (BYTE *)&power_info[i].MaxMhz, sizeof(DWORD) );
|
||||
RegCloseKey( hkey );
|
||||
}
|
||||
if (sci.Architecture != PROCESSOR_ARCHITECTURE_ARM &&
|
||||
|
@ -608,7 +582,7 @@ static void create_hardware_registry_keys(void)
|
|||
!RegCreateKeyExW( fpu_key, numW, 0, NULL, REG_OPTION_VOLATILE,
|
||||
KEY_ALL_ACCESS, NULL, &hkey, NULL ))
|
||||
{
|
||||
set_reg_value( hkey, IdentifierW, id );
|
||||
set_reg_value( hkey, L"Identifier", id );
|
||||
RegCloseKey( hkey );
|
||||
}
|
||||
}
|
||||
|
@ -625,72 +599,49 @@ static void create_hardware_registry_keys(void)
|
|||
/* create the DynData registry keys */
|
||||
static void create_dynamic_registry_keys(void)
|
||||
{
|
||||
static const WCHAR StatDataW[] = {'P','e','r','f','S','t','a','t','s','\\',
|
||||
'S','t','a','t','D','a','t','a',0};
|
||||
static const WCHAR ConfigManagerW[] = {'C','o','n','f','i','g',' ','M','a','n','a','g','e','r','\\',
|
||||
'E','n','u','m',0};
|
||||
HKEY key;
|
||||
|
||||
if (!RegCreateKeyExW( HKEY_DYN_DATA, StatDataW, 0, NULL, 0, KEY_WRITE, NULL, &key, NULL ))
|
||||
if (!RegCreateKeyExW( HKEY_DYN_DATA, L"PerfStats\\StatData", 0, NULL, 0, KEY_WRITE, NULL, &key, NULL ))
|
||||
RegCloseKey( key );
|
||||
if (!RegCreateKeyExW( HKEY_DYN_DATA, ConfigManagerW, 0, NULL, 0, KEY_WRITE, NULL, &key, NULL ))
|
||||
if (!RegCreateKeyExW( HKEY_DYN_DATA, L"Config Manager\\Enum", 0, NULL, 0, KEY_WRITE, NULL, &key, NULL ))
|
||||
RegCloseKey( key );
|
||||
}
|
||||
|
||||
/* create the platform-specific environment registry keys */
|
||||
static void create_environment_registry_keys( void )
|
||||
{
|
||||
static const WCHAR EnvironW[] = {'S','y','s','t','e','m','\\',
|
||||
'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
|
||||
'C','o','n','t','r','o','l','\\',
|
||||
'S','e','s','s','i','o','n',' ','M','a','n','a','g','e','r','\\',
|
||||
'E','n','v','i','r','o','n','m','e','n','t',0};
|
||||
static const WCHAR NumProcW[] = {'N','U','M','B','E','R','_','O','F','_','P','R','O','C','E','S','S','O','R','S',0};
|
||||
static const WCHAR ProcArchW[] = {'P','R','O','C','E','S','S','O','R','_','A','R','C','H','I','T','E','C','T','U','R','E',0};
|
||||
static const WCHAR x86W[] = {'x','8','6',0};
|
||||
static const WCHAR intel64W[] = {'I','n','t','e','l','6','4',0};
|
||||
static const WCHAR amd64W[] = {'A','M','D','6','4',0};
|
||||
static const WCHAR authenticamdW[] = {'A','u','t','h','e','n','t','i','c','A','M','D',0};
|
||||
static const WCHAR commaW[] = {',',' ',0};
|
||||
static const WCHAR ProcIdW[] = {'P','R','O','C','E','S','S','O','R','_','I','D','E','N','T','I','F','I','E','R',0};
|
||||
static const WCHAR ProcLvlW[] = {'P','R','O','C','E','S','S','O','R','_','L','E','V','E','L',0};
|
||||
static const WCHAR ProcRevW[] = {'P','R','O','C','E','S','S','O','R','_','R','E','V','I','S','I','O','N',0};
|
||||
static const WCHAR PercentDW[] = {'%','d',0};
|
||||
static const WCHAR Percent04XW[] = {'%','0','4','x',0};
|
||||
static const WCHAR ARMCpuDescrW[] = {'A','R','M',' ','F','a','m','i','l','y',' ','%','d',' ','M','o','d','e','l',' ','%','d',
|
||||
' ','R','e','v','i','s','i','o','n',' ','%','d',0};
|
||||
HKEY env_key;
|
||||
SYSTEM_CPU_INFORMATION sci;
|
||||
WCHAR buffer[60], vendorid[13];
|
||||
const WCHAR *arch, *parch;
|
||||
|
||||
if (RegCreateKeyW( HKEY_LOCAL_MACHINE, EnvironW, &env_key )) return;
|
||||
if (RegCreateKeyW( HKEY_LOCAL_MACHINE, L"System\\CurrentControlSet\\Control\\Session Manager\\Environment", &env_key )) return;
|
||||
|
||||
get_vendorid( vendorid );
|
||||
NtQuerySystemInformation( SystemCpuInformation, &sci, sizeof(sci), NULL );
|
||||
|
||||
swprintf( buffer, ARRAY_SIZE(buffer), PercentDW, NtCurrentTeb()->Peb->NumberOfProcessors );
|
||||
set_reg_value( env_key, NumProcW, buffer );
|
||||
swprintf( buffer, ARRAY_SIZE(buffer), L"%u", NtCurrentTeb()->Peb->NumberOfProcessors );
|
||||
set_reg_value( env_key, L"NUMBER_OF_PROCESSORS", buffer );
|
||||
|
||||
switch (sci.Architecture)
|
||||
{
|
||||
case PROCESSOR_ARCHITECTURE_AMD64:
|
||||
arch = amd64W;
|
||||
parch = !wcscmp(vendorid, authenticamdW) ? amd64W : intel64W;
|
||||
arch = L"AMD64";
|
||||
parch = !wcscmp(vendorid, L"AuthenticAMD") ? L"AMD64" : L"Intel64";
|
||||
break;
|
||||
|
||||
case PROCESSOR_ARCHITECTURE_INTEL:
|
||||
default:
|
||||
arch = parch = x86W;
|
||||
arch = parch = L"x86";
|
||||
break;
|
||||
}
|
||||
set_reg_value( env_key, ProcArchW, arch );
|
||||
set_reg_value( env_key, L"PROCESSOR_ARCHITECTURE", arch );
|
||||
|
||||
switch (sci.Architecture)
|
||||
{
|
||||
case PROCESSOR_ARCHITECTURE_ARM:
|
||||
case PROCESSOR_ARCHITECTURE_ARM64:
|
||||
swprintf( buffer, ARRAY_SIZE(buffer), ARMCpuDescrW,
|
||||
swprintf( buffer, ARRAY_SIZE(buffer), L"ARM Family %u Model %u Revision %u",
|
||||
sci.Level, HIBYTE(sci.Revision), LOBYTE(sci.Revision) );
|
||||
break;
|
||||
|
||||
|
@ -698,81 +649,67 @@ static void create_environment_registry_keys( void )
|
|||
case PROCESSOR_ARCHITECTURE_INTEL:
|
||||
default:
|
||||
get_identifier( buffer, ARRAY_SIZE(buffer), parch );
|
||||
lstrcatW( buffer, commaW );
|
||||
lstrcatW( buffer, L", " );
|
||||
lstrcatW( buffer, vendorid );
|
||||
break;
|
||||
}
|
||||
set_reg_value( env_key, ProcIdW, buffer );
|
||||
set_reg_value( env_key, L"PROCESSOR_IDENTIFIER", buffer );
|
||||
|
||||
swprintf( buffer, ARRAY_SIZE(buffer), PercentDW, sci.Level );
|
||||
set_reg_value( env_key, ProcLvlW, buffer );
|
||||
swprintf( buffer, ARRAY_SIZE(buffer), L"%u", sci.Level );
|
||||
set_reg_value( env_key, L"PROCESSOR_LEVEL", buffer );
|
||||
|
||||
swprintf( buffer, ARRAY_SIZE(buffer), Percent04XW, sci.Revision );
|
||||
set_reg_value( env_key, ProcRevW, buffer );
|
||||
swprintf( buffer, ARRAY_SIZE(buffer), L"%04x", sci.Revision );
|
||||
set_reg_value( env_key, L"PROCESSOR_REVISION", buffer );
|
||||
|
||||
RegCloseKey( env_key );
|
||||
}
|
||||
|
||||
static void create_volatile_environment_registry_key(void)
|
||||
{
|
||||
static const WCHAR VolatileEnvW[] = {'V','o','l','a','t','i','l','e',' ','E','n','v','i','r','o','n','m','e','n','t',0};
|
||||
static const WCHAR AppDataW[] = {'A','P','P','D','A','T','A',0};
|
||||
static const WCHAR ClientNameW[] = {'C','L','I','E','N','T','N','A','M','E',0};
|
||||
static const WCHAR HomeDriveW[] = {'H','O','M','E','D','R','I','V','E',0};
|
||||
static const WCHAR HomePathW[] = {'H','O','M','E','P','A','T','H',0};
|
||||
static const WCHAR HomeShareW[] = {'H','O','M','E','S','H','A','R','E',0};
|
||||
static const WCHAR LocalAppDataW[] = {'L','O','C','A','L','A','P','P','D','A','T','A',0};
|
||||
static const WCHAR LogonServerW[] = {'L','O','G','O','N','S','E','R','V','E','R',0};
|
||||
static const WCHAR SessionNameW[] = {'S','E','S','S','I','O','N','N','A','M','E',0};
|
||||
static const WCHAR UserNameW[] = {'U','S','E','R','N','A','M','E',0};
|
||||
static const WCHAR UserDomainW[] = {'U','S','E','R','D','O','M','A','I','N',0};
|
||||
static const WCHAR UserProfileW[] = {'U','S','E','R','P','R','O','F','I','L','E',0};
|
||||
static const WCHAR ConsoleW[] = {'C','o','n','s','o','l','e',0};
|
||||
static const WCHAR EmptyW[] = {0};
|
||||
WCHAR path[MAX_PATH];
|
||||
WCHAR computername[MAX_COMPUTERNAME_LENGTH + 1 + 2];
|
||||
DWORD size;
|
||||
HKEY hkey;
|
||||
HRESULT hr;
|
||||
|
||||
if (RegCreateKeyExW( HKEY_CURRENT_USER, VolatileEnvW, 0, NULL, REG_OPTION_VOLATILE,
|
||||
if (RegCreateKeyExW( HKEY_CURRENT_USER, L"Volatile Environment", 0, NULL, REG_OPTION_VOLATILE,
|
||||
KEY_ALL_ACCESS, NULL, &hkey, NULL ))
|
||||
return;
|
||||
|
||||
hr = SHGetFolderPathW( NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, path );
|
||||
if (SUCCEEDED(hr)) set_reg_value( hkey, AppDataW, path );
|
||||
if (SUCCEEDED(hr)) set_reg_value( hkey, L"APPDATA", path );
|
||||
|
||||
set_reg_value( hkey, ClientNameW, ConsoleW );
|
||||
set_reg_value( hkey, L"CLIENTNAME", L"Console" );
|
||||
|
||||
/* Write the profile path's drive letter and directory components into
|
||||
* HOMEDRIVE and HOMEPATH respectively. */
|
||||
hr = SHGetFolderPathW( NULL, CSIDL_PROFILE | CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, path );
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
set_reg_value( hkey, UserProfileW, path );
|
||||
set_reg_value( hkey, HomePathW, path + 2 );
|
||||
set_reg_value( hkey, L"USERPROFILE", path );
|
||||
set_reg_value( hkey, L"HOMEPATH", path + 2 );
|
||||
path[2] = '\0';
|
||||
set_reg_value( hkey, HomeDriveW, path );
|
||||
set_reg_value( hkey, L"HOMEDRIVE", path );
|
||||
}
|
||||
|
||||
size = ARRAY_SIZE(path);
|
||||
if (GetUserNameW( path, &size )) set_reg_value( hkey, UserNameW, path );
|
||||
if (GetUserNameW( path, &size )) set_reg_value( hkey, L"USERNAME", path );
|
||||
|
||||
set_reg_value( hkey, HomeShareW, EmptyW );
|
||||
set_reg_value( hkey, L"HOMESHARE", L"" );
|
||||
|
||||
hr = SHGetFolderPathW( NULL, CSIDL_LOCAL_APPDATA | CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, path );
|
||||
if (SUCCEEDED(hr))
|
||||
set_reg_value( hkey, LocalAppDataW, path );
|
||||
set_reg_value( hkey, L"LOCALAPPDATA", path );
|
||||
|
||||
size = ARRAY_SIZE(computername) - 2;
|
||||
if (GetComputerNameW(&computername[2], &size))
|
||||
{
|
||||
set_reg_value( hkey, UserDomainW, &computername[2] );
|
||||
set_reg_value( hkey, L"USERDOMAIN", &computername[2] );
|
||||
computername[0] = computername[1] = '\\';
|
||||
set_reg_value( hkey, LogonServerW, computername );
|
||||
set_reg_value( hkey, L"LOGONSERVER", computername );
|
||||
}
|
||||
|
||||
set_reg_value( hkey, SessionNameW, ConsoleW );
|
||||
set_reg_value( hkey, L"SESSIONNAME", L"Console" );
|
||||
RegCloseKey( hkey );
|
||||
}
|
||||
|
||||
|
@ -781,10 +718,6 @@ static void create_volatile_environment_registry_key(void)
|
|||
*/
|
||||
static BOOL wininit(void)
|
||||
{
|
||||
static const WCHAR nulW[] = {'N','U','L',0};
|
||||
static const WCHAR renameW[] = {'r','e','n','a','m','e',0};
|
||||
static const WCHAR wininitW[] = {'w','i','n','i','n','i','t','.','i','n','i',0};
|
||||
static const WCHAR wininitbakW[] = {'w','i','n','i','n','i','t','.','b','a','k',0};
|
||||
WCHAR initial_buffer[1024];
|
||||
WCHAR *str, *buffer = initial_buffer;
|
||||
DWORD size = ARRAY_SIZE(initial_buffer);
|
||||
|
@ -792,7 +725,7 @@ static BOOL wininit(void)
|
|||
|
||||
for (;;)
|
||||
{
|
||||
if (!(res = GetPrivateProfileSectionW( renameW, buffer, size, wininitW ))) return TRUE;
|
||||
if (!(res = GetPrivateProfileSectionW( L"rename", buffer, size, L"wininit.ini" ))) return TRUE;
|
||||
if (res < size - 2) break;
|
||||
if (buffer != initial_buffer) HeapFree( GetProcessHeap(), 0, buffer );
|
||||
size *= 2;
|
||||
|
@ -809,7 +742,7 @@ static BOOL wininit(void)
|
|||
/* split the line into key and value */
|
||||
*value++ = 0;
|
||||
|
||||
if (!lstrcmpiW( nulW, str ))
|
||||
if (!lstrcmpiW( L"NUL", str ))
|
||||
{
|
||||
WINE_TRACE("Deleting file %s\n", wine_dbgstr_w(value) );
|
||||
if( !DeleteFileW( value ) )
|
||||
|
@ -827,7 +760,7 @@ static BOOL wininit(void)
|
|||
|
||||
if (buffer != initial_buffer) HeapFree( GetProcessHeap(), 0, buffer );
|
||||
|
||||
if( !MoveFileExW( wininitW, wininitbakW, MOVEFILE_REPLACE_EXISTING) )
|
||||
if( !MoveFileExW( L"wininit.ini", L"wininit.bak", MOVEFILE_REPLACE_EXISTING) )
|
||||
{
|
||||
WINE_ERR("Couldn't rename wininit.ini, error %d\n", GetLastError() );
|
||||
|
||||
|
@ -837,64 +770,24 @@ static BOOL wininit(void)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL pendingRename(void)
|
||||
static void pendingRename(void)
|
||||
{
|
||||
static const WCHAR ValueName[] = {'P','e','n','d','i','n','g',
|
||||
'F','i','l','e','R','e','n','a','m','e',
|
||||
'O','p','e','r','a','t','i','o','n','s',0};
|
||||
static const WCHAR SessionW[] = { 'S','y','s','t','e','m','\\',
|
||||
'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
|
||||
'C','o','n','t','r','o','l','\\',
|
||||
'S','e','s','s','i','o','n',' ','M','a','n','a','g','e','r',0};
|
||||
WCHAR *buffer=NULL;
|
||||
const WCHAR *src=NULL, *dst=NULL;
|
||||
DWORD dataLength=0;
|
||||
HKEY hSession=NULL;
|
||||
DWORD res;
|
||||
HKEY hSession;
|
||||
|
||||
WINE_TRACE("Entered\n");
|
||||
if (RegOpenKeyExW( HKEY_LOCAL_MACHINE, L"System\\CurrentControlSet\\Control\\Session Manager",
|
||||
0, KEY_ALL_ACCESS, &hSession ))
|
||||
return;
|
||||
|
||||
if( (res=RegOpenKeyExW( HKEY_LOCAL_MACHINE, SessionW, 0, KEY_ALL_ACCESS, &hSession ))
|
||||
!=ERROR_SUCCESS )
|
||||
{
|
||||
WINE_TRACE("The key was not found - skipping\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
res=RegQueryValueExW( hSession, ValueName, NULL, NULL /* The value type does not really interest us, as it is not
|
||||
truly a REG_MULTI_SZ anyways */,
|
||||
NULL, &dataLength );
|
||||
if( res==ERROR_FILE_NOT_FOUND )
|
||||
{
|
||||
/* No value - nothing to do. Great! */
|
||||
WINE_TRACE("Value not present - nothing to rename\n");
|
||||
res=TRUE;
|
||||
if (RegQueryValueExW( hSession, L"PendingFileRenameOperations", NULL, NULL, NULL, &dataLength ))
|
||||
goto end;
|
||||
}
|
||||
if (!(buffer = HeapAlloc( GetProcessHeap(), 0, dataLength ))) goto end;
|
||||
|
||||
if( res!=ERROR_SUCCESS )
|
||||
{
|
||||
WINE_ERR("Couldn't query value's length (%d)\n", res );
|
||||
res=FALSE;
|
||||
if (RegQueryValueExW( hSession, L"PendingFileRenameOperations", NULL, NULL,
|
||||
(LPBYTE)buffer, &dataLength ))
|
||||
goto end;
|
||||
}
|
||||
|
||||
buffer=HeapAlloc( GetProcessHeap(),0,dataLength );
|
||||
if( buffer==NULL )
|
||||
{
|
||||
WINE_ERR("Couldn't allocate %u bytes for the value\n", dataLength );
|
||||
res=FALSE;
|
||||
goto end;
|
||||
}
|
||||
|
||||
res=RegQueryValueExW( hSession, ValueName, NULL, NULL, (LPBYTE)buffer, &dataLength );
|
||||
if( res!=ERROR_SUCCESS )
|
||||
{
|
||||
WINE_ERR("Couldn't query value after successfully querying before (%u),\n"
|
||||
"please report to wine-devel@winehq.org\n", res);
|
||||
res=FALSE;
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Make sure that the data is long enough and ends with two NULLs. This
|
||||
* simplifies the code later on.
|
||||
|
@ -902,19 +795,13 @@ static BOOL pendingRename(void)
|
|||
if( dataLength<2*sizeof(buffer[0]) ||
|
||||
buffer[dataLength/sizeof(buffer[0])-1]!='\0' ||
|
||||
buffer[dataLength/sizeof(buffer[0])-2]!='\0' )
|
||||
{
|
||||
WINE_ERR("Improper value format - doesn't end with NULL\n");
|
||||
res=FALSE;
|
||||
goto end;
|
||||
}
|
||||
|
||||
for( src=buffer; (src-buffer)*sizeof(src[0])<dataLength && *src!='\0';
|
||||
src=dst+lstrlenW(dst)+1 )
|
||||
{
|
||||
DWORD dwFlags=0;
|
||||
|
||||
WINE_TRACE("processing next command\n");
|
||||
|
||||
dst=src+lstrlenW(src)+1;
|
||||
|
||||
/* We need to skip the \??\ header */
|
||||
|
@ -941,20 +828,11 @@ static BOOL pendingRename(void)
|
|||
}
|
||||
}
|
||||
|
||||
if((res=RegDeleteValueW(hSession, ValueName))!=ERROR_SUCCESS )
|
||||
{
|
||||
WINE_ERR("Error deleting the value (%u)\n", GetLastError() );
|
||||
res=FALSE;
|
||||
} else
|
||||
res=TRUE;
|
||||
|
||||
RegDeleteValueW(hSession, L"PendingFileRenameOperations");
|
||||
|
||||
end:
|
||||
HeapFree(GetProcessHeap(), 0, buffer);
|
||||
|
||||
if( hSession!=NULL )
|
||||
RegCloseKey( hSession );
|
||||
|
||||
return res;
|
||||
RegCloseKey( hSession );
|
||||
}
|
||||
|
||||
#define INVALID_RUNCMD_RETURN -1
|
||||
|
@ -1081,20 +959,19 @@ end:
|
|||
*/
|
||||
static void ProcessRunKeys( HKEY root, const WCHAR *keyname, BOOL delete, BOOL synchronous )
|
||||
{
|
||||
static const WCHAR keypathW[] =
|
||||
{'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
|
||||
'W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n',0};
|
||||
HKEY key;
|
||||
|
||||
if (root == HKEY_LOCAL_MACHINE)
|
||||
{
|
||||
WINE_TRACE( "Processing %s entries under HKLM.\n", wine_dbgstr_w(keyname) );
|
||||
if (!RegCreateKeyExW( root, keypathW, 0, NULL, 0, KEY_READ, NULL, &key, NULL ))
|
||||
if (!RegCreateKeyExW( root, L"Software\\Microsoft\\Windows\\CurrentVersion",
|
||||
0, NULL, 0, KEY_READ, NULL, &key, NULL ))
|
||||
{
|
||||
process_run_key( key, keyname, delete, synchronous );
|
||||
RegCloseKey( key );
|
||||
}
|
||||
if (is_64bit && !RegCreateKeyExW( root, keypathW, 0, NULL, 0, KEY_READ|KEY_WOW64_32KEY, NULL, &key, NULL ))
|
||||
if (is_64bit && !RegCreateKeyExW( root, L"Software\\Microsoft\\Windows\\CurrentVersion",
|
||||
0, NULL, 0, KEY_READ|KEY_WOW64_32KEY, NULL, &key, NULL ))
|
||||
{
|
||||
process_run_key( key, keyname, delete, synchronous );
|
||||
RegCloseKey( key );
|
||||
|
@ -1103,7 +980,8 @@ static void ProcessRunKeys( HKEY root, const WCHAR *keyname, BOOL delete, BOOL s
|
|||
else
|
||||
{
|
||||
WINE_TRACE( "Processing %s entries under HKCU.\n", wine_dbgstr_w(keyname) );
|
||||
if (!RegCreateKeyExW( root, keypathW, 0, NULL, 0, KEY_READ, NULL, &key, NULL ))
|
||||
if (!RegCreateKeyExW( root, L"Software\\Microsoft\\Windows\\CurrentVersion",
|
||||
0, NULL, 0, KEY_READ, NULL, &key, NULL ))
|
||||
{
|
||||
process_run_key( key, keyname, delete, synchronous );
|
||||
RegCloseKey( key );
|
||||
|
@ -1122,14 +1000,6 @@ static void ProcessRunKeys( HKEY root, const WCHAR *keyname, BOOL delete, BOOL s
|
|||
*/
|
||||
static int ProcessWindowsFileProtection(void)
|
||||
{
|
||||
static const WCHAR winlogonW[] = {'S','o','f','t','w','a','r','e','\\',
|
||||
'M','i','c','r','o','s','o','f','t','\\',
|
||||
'W','i','n','d','o','w','s',' ','N','T','\\',
|
||||
'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
|
||||
'W','i','n','l','o','g','o','n',0};
|
||||
static const WCHAR cachedirW[] = {'S','F','C','D','l','l','C','a','c','h','e','D','i','r',0};
|
||||
static const WCHAR dllcacheW[] = {'\\','d','l','l','c','a','c','h','e','\\','*',0};
|
||||
static const WCHAR wildcardW[] = {'\\','*',0};
|
||||
WIN32_FIND_DATAW finddata;
|
||||
HANDLE find_handle;
|
||||
BOOL find_rc;
|
||||
|
@ -1137,15 +1007,15 @@ static int ProcessWindowsFileProtection(void)
|
|||
HKEY hkey;
|
||||
LPWSTR dllcache = NULL;
|
||||
|
||||
if (!RegOpenKeyW( HKEY_LOCAL_MACHINE, winlogonW, &hkey ))
|
||||
if (!RegOpenKeyW( HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", &hkey ))
|
||||
{
|
||||
DWORD sz = 0;
|
||||
if (!RegQueryValueExW( hkey, cachedirW, 0, NULL, NULL, &sz))
|
||||
if (!RegQueryValueExW( hkey, L"SFCDllCacheDir", 0, NULL, NULL, &sz))
|
||||
{
|
||||
sz += sizeof(WCHAR);
|
||||
dllcache = HeapAlloc(GetProcessHeap(),0,sz + sizeof(wildcardW));
|
||||
RegQueryValueExW( hkey, cachedirW, 0, NULL, (LPBYTE)dllcache, &sz);
|
||||
lstrcatW( dllcache, wildcardW );
|
||||
dllcache = HeapAlloc(GetProcessHeap(),0,sz + sizeof(L"\\*"));
|
||||
RegQueryValueExW( hkey, L"SFCDllCacheDir", 0, NULL, (LPBYTE)dllcache, &sz);
|
||||
lstrcatW( dllcache, L"\\*" );
|
||||
}
|
||||
}
|
||||
RegCloseKey(hkey);
|
||||
|
@ -1153,9 +1023,9 @@ static int ProcessWindowsFileProtection(void)
|
|||
if (!dllcache)
|
||||
{
|
||||
DWORD sz = GetSystemDirectoryW( NULL, 0 );
|
||||
dllcache = HeapAlloc( GetProcessHeap(), 0, sz * sizeof(WCHAR) + sizeof(dllcacheW));
|
||||
dllcache = HeapAlloc( GetProcessHeap(), 0, sz * sizeof(WCHAR) + sizeof(L"\\dllcache\\*"));
|
||||
GetSystemDirectoryW( dllcache, sz );
|
||||
lstrcatW( dllcache, dllcacheW );
|
||||
lstrcatW( dllcache, L"\\dllcache\\*" );
|
||||
}
|
||||
|
||||
find_handle = FindFirstFileW(dllcache,&finddata);
|
||||
|
@ -1163,15 +1033,13 @@ static int ProcessWindowsFileProtection(void)
|
|||
find_rc = find_handle != INVALID_HANDLE_VALUE;
|
||||
while (find_rc)
|
||||
{
|
||||
static const WCHAR dotW[] = {'.',0};
|
||||
static const WCHAR dotdotW[] = {'.','.',0};
|
||||
WCHAR targetpath[MAX_PATH];
|
||||
WCHAR currentpath[MAX_PATH];
|
||||
UINT sz;
|
||||
UINT sz2;
|
||||
WCHAR tempfile[MAX_PATH];
|
||||
|
||||
if (wcscmp(finddata.cFileName,dotW) == 0 || wcscmp(finddata.cFileName,dotdotW) == 0)
|
||||
if (wcscmp(finddata.cFileName,L".") == 0 || wcscmp(finddata.cFileName,L"..") == 0)
|
||||
{
|
||||
find_rc = FindNextFileW(find_handle,&finddata);
|
||||
continue;
|
||||
|
@ -1208,18 +1076,12 @@ static int ProcessWindowsFileProtection(void)
|
|||
static BOOL start_services_process(void)
|
||||
{
|
||||
static const WCHAR svcctl_started_event[] = SVCCTL_STARTED_EVENT;
|
||||
static const WCHAR services[] = {'\\','s','e','r','v','i','c','e','s','.','e','x','e',0};
|
||||
PROCESS_INFORMATION pi;
|
||||
STARTUPINFOW si;
|
||||
STARTUPINFOW si = { sizeof(si) };
|
||||
HANDLE wait_handles[2];
|
||||
WCHAR path[MAX_PATH];
|
||||
|
||||
if (!GetSystemDirectoryW(path, MAX_PATH - lstrlenW(services)))
|
||||
return FALSE;
|
||||
lstrcatW(path, services);
|
||||
ZeroMemory(&si, sizeof(si));
|
||||
si.cb = sizeof(si);
|
||||
if (!CreateProcessW(path, path, NULL, NULL, TRUE, DETACHED_PROCESS, NULL, NULL, &si, &pi))
|
||||
if (!CreateProcessW(L"C:\\windows\\system32\\services.exe", NULL,
|
||||
NULL, NULL, TRUE, DETACHED_PROCESS, NULL, NULL, &si, &pi))
|
||||
{
|
||||
WINE_ERR("Couldn't start services.exe: error %u\n", GetLastError());
|
||||
return FALSE;
|
||||
|
@ -1278,14 +1140,7 @@ static HWND show_wait_window(void)
|
|||
|
||||
static HANDLE start_rundll32( const WCHAR *inf_path, BOOL wow64 )
|
||||
{
|
||||
static const WCHAR rundll[] = {'\\','r','u','n','d','l','l','3','2','.','e','x','e',0};
|
||||
static const WCHAR setupapi[] = {' ','s','e','t','u','p','a','p','i',',',
|
||||
'I','n','s','t','a','l','l','H','i','n','f','S','e','c','t','i','o','n',0};
|
||||
static const WCHAR definstall[] = {' ','D','e','f','a','u','l','t','I','n','s','t','a','l','l',0};
|
||||
static const WCHAR wowinstall[] = {' ','W','o','w','6','4','I','n','s','t','a','l','l',0};
|
||||
static const WCHAR flags[] = {' ','1','2','8',' ',0};
|
||||
|
||||
WCHAR app[MAX_PATH + ARRAY_SIZE(rundll)];
|
||||
WCHAR app[MAX_PATH + ARRAY_SIZE(L"\\rundll32.exe" )];
|
||||
STARTUPINFOW si;
|
||||
PROCESS_INFORMATION pi;
|
||||
WCHAR *buffer;
|
||||
|
@ -1300,16 +1155,16 @@ static HANDLE start_rundll32( const WCHAR *inf_path, BOOL wow64 )
|
|||
}
|
||||
else GetSystemDirectoryW( app, MAX_PATH );
|
||||
|
||||
lstrcatW( app, rundll );
|
||||
lstrcatW( app, L"\\rundll32.exe" );
|
||||
|
||||
len = lstrlenW(app) + ARRAY_SIZE(setupapi) + ARRAY_SIZE(definstall) + ARRAY_SIZE(flags) + lstrlenW(inf_path);
|
||||
len = lstrlenW(app) + ARRAY_SIZE(L" setupapi,InstallHinfSection DefaultInstall 128 ") + lstrlenW(inf_path);
|
||||
|
||||
if (!(buffer = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) return 0;
|
||||
|
||||
lstrcpyW( buffer, app );
|
||||
lstrcatW( buffer, setupapi );
|
||||
lstrcatW( buffer, wow64 ? wowinstall : definstall );
|
||||
lstrcatW( buffer, flags );
|
||||
lstrcatW( buffer, L" setupapi,InstallHinfSection" );
|
||||
lstrcatW( buffer, wow64 ? L" Wow64Install" : L" DefaultInstall" );
|
||||
lstrcatW( buffer, L" 128 " );
|
||||
lstrcatW( buffer, inf_path );
|
||||
|
||||
if (CreateProcessW( app, buffer, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ))
|
||||
|
@ -1375,12 +1230,6 @@ static void install_root_pnp_devices(void)
|
|||
|
||||
static void update_user_profile(void)
|
||||
{
|
||||
static const WCHAR profile_list[] = {'S','o','f','t','w','a','r','e','\\',
|
||||
'M','i','c','r','o','s','o','f','t','\\',
|
||||
'W','i','n','d','o','w','s',' ','N','T','\\',
|
||||
'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
|
||||
'P','r','o','f','i','l','e','L','i','s','t',0};
|
||||
static const WCHAR profile_image_path[] = {'P','r','o','f','i','l','e','I','m','a','g','e','P','a','t','h',0};
|
||||
char token_buf[sizeof(TOKEN_USER) + sizeof(SID) + sizeof(DWORD) * SID_MAX_SUB_AUTHORITIES];
|
||||
HANDLE token;
|
||||
WCHAR profile[MAX_PATH], *sid;
|
||||
|
@ -1396,15 +1245,15 @@ static void update_user_profile(void)
|
|||
|
||||
ConvertSidToStringSidW(((TOKEN_USER *)token_buf)->User.Sid, &sid);
|
||||
|
||||
if (!RegCreateKeyExW(HKEY_LOCAL_MACHINE, profile_list, 0, NULL, 0,
|
||||
KEY_ALL_ACCESS, NULL, &hkey, NULL))
|
||||
if (!RegCreateKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList",
|
||||
0, NULL, 0, KEY_ALL_ACCESS, NULL, &hkey, NULL))
|
||||
{
|
||||
if (!RegCreateKeyExW(hkey, sid, 0, NULL, 0,
|
||||
KEY_ALL_ACCESS, NULL, &profile_hkey, NULL))
|
||||
{
|
||||
DWORD flags = 0;
|
||||
if (SHGetSpecialFolderPathW(NULL, profile, CSIDL_PROFILE, TRUE))
|
||||
set_reg_value(profile_hkey, profile_image_path, profile);
|
||||
set_reg_value(profile_hkey, L"ProfileImagePath", profile);
|
||||
RegSetValueExW( profile_hkey, L"Flags", 0, REG_DWORD, (const BYTE *)&flags, sizeof(flags) );
|
||||
RegCloseKey(profile_hkey);
|
||||
}
|
||||
|
@ -1418,7 +1267,7 @@ static void update_user_profile(void)
|
|||
/* execute rundll32 on the wine.inf file if necessary */
|
||||
static void update_wineprefix( BOOL force )
|
||||
{
|
||||
const WCHAR *config_dir = _wgetenv( wineconfigdirW );
|
||||
const WCHAR *config_dir = _wgetenv( L"WINECONFIGDIR" );
|
||||
WCHAR *inf_path = get_wine_inf_path();
|
||||
int fd;
|
||||
struct stat st;
|
||||
|
@ -1563,13 +1412,6 @@ static void usage( int status )
|
|||
|
||||
int __cdecl main( int argc, char *argv[] )
|
||||
{
|
||||
static const WCHAR RunW[] = {'R','u','n',0};
|
||||
static const WCHAR RunOnceW[] = {'R','u','n','O','n','c','e',0};
|
||||
static const WCHAR RunServicesW[] = {'R','u','n','S','e','r','v','i','c','e','s',0};
|
||||
static const WCHAR RunServicesOnceW[] = {'R','u','n','S','e','r','v','i','c','e','s','O','n','c','e',0};
|
||||
static const WCHAR wineboot_eventW[] = {'\\','K','e','r','n','e','l','O','b','j','e','c','t','s',
|
||||
'\\','_','_','w','i','n','e','b','o','o','t','_','e','v','e','n','t',0};
|
||||
|
||||
/* First, set the current directory to SystemRoot */
|
||||
int i, j;
|
||||
BOOL end_session, force, init, kill, restart, shutdown, update;
|
||||
|
@ -1655,7 +1497,7 @@ int __cdecl main( int argc, char *argv[] )
|
|||
|
||||
/* create event to be inherited by services.exe */
|
||||
InitializeObjectAttributes( &attr, &nameW, OBJ_OPENIF | OBJ_INHERIT, 0, NULL );
|
||||
RtlInitUnicodeString( &nameW, wineboot_eventW );
|
||||
RtlInitUnicodeString( &nameW, L"\\KernelObjects\\__wineboot_event" );
|
||||
NtCreateEvent( &event, EVENT_ALL_ACCESS, &attr, NotificationEvent, 0 );
|
||||
|
||||
ResetEvent( event ); /* in case this is a restart */
|
||||
|
@ -1667,23 +1509,23 @@ int __cdecl main( int argc, char *argv[] )
|
|||
pendingRename();
|
||||
|
||||
ProcessWindowsFileProtection();
|
||||
ProcessRunKeys( HKEY_LOCAL_MACHINE, RunServicesOnceW, TRUE, FALSE );
|
||||
ProcessRunKeys( HKEY_LOCAL_MACHINE, L"RunServicesOnce", TRUE, FALSE );
|
||||
|
||||
if (init || (kill && !restart))
|
||||
{
|
||||
ProcessRunKeys( HKEY_LOCAL_MACHINE, RunServicesW, FALSE, FALSE );
|
||||
ProcessRunKeys( HKEY_LOCAL_MACHINE, L"RunServices", FALSE, FALSE );
|
||||
start_services_process();
|
||||
}
|
||||
if (init || update) update_wineprefix( update );
|
||||
|
||||
create_volatile_environment_registry_key();
|
||||
|
||||
ProcessRunKeys( HKEY_LOCAL_MACHINE, RunOnceW, TRUE, TRUE );
|
||||
ProcessRunKeys( HKEY_LOCAL_MACHINE, L"RunOnce", TRUE, TRUE );
|
||||
|
||||
if (!init && !restart)
|
||||
{
|
||||
ProcessRunKeys( HKEY_LOCAL_MACHINE, RunW, FALSE, FALSE );
|
||||
ProcessRunKeys( HKEY_CURRENT_USER, RunW, FALSE, FALSE );
|
||||
ProcessRunKeys( HKEY_LOCAL_MACHINE, L"Run", FALSE, FALSE );
|
||||
ProcessRunKeys( HKEY_CURRENT_USER, L"Run", FALSE, FALSE );
|
||||
ProcessStartupItems();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue