[SERVICES] Support the NoInteractiveServices registry value

This commit is contained in:
Eric Kohl 2018-02-10 14:23:11 +01:00
parent a6e080bd3d
commit 905d65b75b
2 changed files with 37 additions and 8 deletions

View file

@ -27,6 +27,7 @@ LIST_ENTRY ServiceListHead;
static RTL_RESOURCE DatabaseLock; static RTL_RESOURCE DatabaseLock;
static DWORD ResumeCount = 1; static DWORD ResumeCount = 1;
static DWORD NoInteractiveServices = 0;
/* The critical section synchronizes service control requests */ /* The critical section synchronizes service control requests */
static CRITICAL_SECTION ControlServiceCriticalSection; 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 DWORD
ScmCreateServiceDatabase(VOID) ScmCreateServiceDatabase(VOID)
{ {
@ -845,11 +873,15 @@ ScmCreateServiceDatabase(VOID)
DPRINT("ScmCreateServiceDatabase() called\n"); DPRINT("ScmCreateServiceDatabase() called\n");
/* Retrieve the NoInteractiveServies value */
ScmGetNoInteractiveServicesValue();
/* Create the service group list */
dwError = ScmCreateGroupList(); dwError = ScmCreateGroupList();
if (dwError != ERROR_SUCCESS) if (dwError != ERROR_SUCCESS)
return dwError; return dwError;
/* Initialize basic variables */ /* Initialize image and service lists */
InitializeListHead(&ImageListHead); InitializeListHead(&ImageListHead);
InitializeListHead(&ServiceListHead); InitializeListHead(&ServiceListHead);
@ -1637,10 +1669,8 @@ ScmStartUserModeService(PSERVICE Service,
ZeroMemory(&ProcessInformation, sizeof(ProcessInformation)); ZeroMemory(&ProcessInformation, sizeof(ProcessInformation));
/* Use the interactive desktop if the service is interactive */ /* Use the interactive desktop if the service is interactive */
// TODO: We should also check the value "NoInteractiveServices ": if ((NoInteractiveServices == 0) &&
// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms683502(v=vs.85).aspx (Service->Status.dwServiceType & SERVICE_INTERACTIVE_PROCESS))
// for more details.
if (Service->Status.dwServiceType & SERVICE_INTERACTIVE_PROCESS)
StartupInfo.lpDesktop = L"WinSta0\\Default"; StartupInfo.lpDesktop = L"WinSta0\\Default";
if (Service->lpImage->hToken) if (Service->lpImage->hToken)
@ -1920,9 +1950,7 @@ ScmAutoStartServices(VOID)
*/ */
ASSERT(ScmInitialize); ASSERT(ScmInitialize);
/* /* Retrieve the SafeBoot parameter */
* Retrieve the SafeBoot parameter.
*/
dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
L"SYSTEM\\CurrentControlSet\\Control\\SafeBoot\\Option", L"SYSTEM\\CurrentControlSet\\Control\\SafeBoot\\Option",
0, 0,

View file

@ -1308,6 +1308,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\ReactOS\Settings\Version","ReportAsWorkst
; Some installers check for SP2 ; Some installers check for SP2
HKLM,"SYSTEM\CurrentControlSet\Control\Windows","CSDReleaseType",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Control\Windows","CSDReleaseType",0x00010001,0x00000000
HKLM,"SYSTEM\CurrentControlSet\Control\Windows","CSDVersion",0x00010001,0x00000200 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","SecurityProviders",2,"schannel.dll"
HKLM,"SYSTEM\CurrentControlSet\Control\SecurityProviders\SaslProfiles",,0x00000012 HKLM,"SYSTEM\CurrentControlSet\Control\SecurityProviders\SaslProfiles",,0x00000012