https://git.reactos.org/?p=reactos.git;a=commitdiff;h=905d65b75b6f00be642ada...
commit 905d65b75b6f00be642ada60af4a937071c817dc Author: Eric Kohl eric.kohl@reactos.org AuthorDate: Sat Feb 10 14:23:11 2018 +0100 Commit: Eric Kohl eric.kohl@reactos.org 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).a... - // 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