https://git.reactos.org/?p=reactos.git;a=commitdiff;h=905d65b75b6f00be642ada60af4a937071c817dc
commit 905d65b75b6f00be642ada60af4a937071c817dc Author: Eric Kohl <[email protected]> AuthorDate: Sat Feb 10 14:23:11 2018 +0100 Commit: Eric Kohl <[email protected]> CommitDate: Sat Feb 10 14:23:11 2018 +0100 [SERVICES] Support the NoInteractiveServices registry value --- base/system/services/database.c | 44 +++++++++++++++++++++++++++++++++-------- boot/bootdata/hivesys.inf | 1 + 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/base/system/services/database.c b/base/system/services/database.c index 9822d6048e..19c4e05724 100644 --- a/base/system/services/database.c +++ b/base/system/services/database.c @@ -27,6 +27,7 @@ LIST_ENTRY ServiceListHead; static RTL_RESOURCE DatabaseLock; static DWORD ResumeCount = 1; +static DWORD NoInteractiveServices = 0; /* The critical section synchronizes service control requests */ static CRITICAL_SECTION ControlServiceCriticalSection; @@ -832,6 +833,33 @@ ScmDeleteMarkedServices(VOID) } +static +VOID +ScmGetNoInteractiveServicesValue(VOID) +{ + HKEY hKey; + DWORD dwKeySize; + LONG lError; + + lError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"SYSTEM\\CurrentControlSet\\Control\\Windows", + 0, + KEY_READ, + &hKey); + if (lError == ERROR_SUCCESS) + { + dwKeySize = sizeof(NoInteractiveServices); + lError = RegQueryValueExW(hKey, + L"NoInteractiveServices", + 0, + NULL, + (LPBYTE)&NoInteractiveServices, + &dwKeySize); + RegCloseKey(hKey); + } +} + + DWORD ScmCreateServiceDatabase(VOID) { @@ -845,11 +873,15 @@ ScmCreateServiceDatabase(VOID) DPRINT("ScmCreateServiceDatabase() called\n"); + /* Retrieve the NoInteractiveServies value */ + ScmGetNoInteractiveServicesValue(); + + /* Create the service group list */ dwError = ScmCreateGroupList(); if (dwError != ERROR_SUCCESS) return dwError; - /* Initialize basic variables */ + /* Initialize image and service lists */ InitializeListHead(&ImageListHead); InitializeListHead(&ServiceListHead); @@ -1637,10 +1669,8 @@ ScmStartUserModeService(PSERVICE Service, ZeroMemory(&ProcessInformation, sizeof(ProcessInformation)); /* Use the interactive desktop if the service is interactive */ - // TODO: We should also check the value "NoInteractiveServices ": - // See https://msdn.microsoft.com/en-us/library/windows/desktop/ms683502(v=vs.85).aspx - // for more details. - if (Service->Status.dwServiceType & SERVICE_INTERACTIVE_PROCESS) + if ((NoInteractiveServices == 0) && + (Service->Status.dwServiceType & SERVICE_INTERACTIVE_PROCESS)) StartupInfo.lpDesktop = L"WinSta0\\Default"; if (Service->lpImage->hToken) @@ -1920,9 +1950,7 @@ ScmAutoStartServices(VOID) */ ASSERT(ScmInitialize); - /* - * Retrieve the SafeBoot parameter. - */ + /* Retrieve the SafeBoot parameter */ dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\SafeBoot\\Option", 0, diff --git a/boot/bootdata/hivesys.inf b/boot/bootdata/hivesys.inf index 07e98be494..bb0b3b8257 100644 --- a/boot/bootdata/hivesys.inf +++ b/boot/bootdata/hivesys.inf @@ -1308,6 +1308,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\ReactOS\Settings\Version","ReportAsWorkst ; Some installers check for SP2 HKLM,"SYSTEM\CurrentControlSet\Control\Windows","CSDReleaseType",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Control\Windows","CSDVersion",0x00010001,0x00000200 +HKLM,"SYSTEM\CurrentControlSet\Control\Windows","NoInteractiveServices",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Control\SecurityProviders","SecurityProviders",2,"schannel.dll" HKLM,"SYSTEM\CurrentControlSet\Control\SecurityProviders\SaslProfiles",,0x00000012
