diff --git a/base/services/umpnpmgr/precomp.h b/base/services/umpnpmgr/precomp.h index d6a5daa4a59..e687bb19bcf 100644 --- a/base/services/umpnpmgr/precomp.h +++ b/base/services/umpnpmgr/precomp.h @@ -105,6 +105,7 @@ extern HKEY hEnumKey; extern HKEY hClassKey; extern BOOL g_IsUISuppressed; extern BOOL g_ShuttingDown; +extern BOOL g_IsLiveMedium; BOOL GetSuppressNewUIValue(VOID); diff --git a/base/services/umpnpmgr/rpcserver.c b/base/services/umpnpmgr/rpcserver.c index 422ab98864d..7d40cbcf447 100644 --- a/base/services/umpnpmgr/rpcserver.c +++ b/base/services/umpnpmgr/rpcserver.c @@ -791,7 +791,7 @@ PNP_ReportLogOn( hBinding, Admin, ProcessId); /* Fail, if the caller is not an interactive user */ - if (!IsCallerInteractive(hBinding)) + if ((g_IsLiveMedium == FALSE) && (IsCallerInteractive(hBinding) == FALSE)) goto cleanup; /* Get the users token */ diff --git a/base/services/umpnpmgr/umpnpmgr.c b/base/services/umpnpmgr/umpnpmgr.c index 60194bd458d..4bfc3dfdf46 100644 --- a/base/services/umpnpmgr/umpnpmgr.c +++ b/base/services/umpnpmgr/umpnpmgr.c @@ -45,6 +45,7 @@ HKEY hEnumKey = NULL; HKEY hClassKey = NULL; BOOL g_IsUISuppressed = FALSE; BOOL g_ShuttingDown = FALSE; +BOOL g_IsLiveMedium = FALSE; /* FUNCTIONS *****************************************************************/ @@ -200,6 +201,18 @@ GetSuppressNewUIValue(VOID) return bSuppressNewHWUI; } +BOOL +RunningOnLiveMedium(VOID) +{ + WCHAR LogPath[MAX_PATH]; + + GetSystemWindowsDirectoryW(LogPath, ARRAYSIZE(LogPath)); + if (GetDriveTypeW(LogPath) == DRIVE_FIXED) + return FALSE; + + return TRUE; +} + VOID WINAPI ServiceMain(DWORD argc, LPTSTR *argv) { @@ -211,6 +224,8 @@ ServiceMain(DWORD argc, LPTSTR *argv) DPRINT("ServiceMain() called\n"); + g_IsLiveMedium = RunningOnLiveMedium(); + ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName, ServiceControlHandler, NULL);