Archive for 1. Januar 2013

Eingabeaufforderung mit lokalen Systemdienst-Rechten unter Windows 8 und Windows Server 2012

1 Januar 2013

Gerade erst gebloggt und doch schon nicht mehr aktuell. Blöd sowas aber wer konnte damit rechnen, dass Microsoft eine bestehende Funktionen die seit Ewigkeiten da ist, degradiert. Es geht um diesen Artikel: https://newyear2006.wordpress.com/2012/12/29/eingabeaufforderung-mit-lokalen-systemdienst-rechten-unter-windows/

Ausgehend von

sc create ntauthcmd binpath= "cmd /K start" type= own type= interact

und mittels

sc start ntauthcmd

konnte bisher eine Kommandozeile mit lokalen Systemdienstrechten gestartet werden und mehr oder weniger einfach darauf zugegriffen werden.

Dies funktioniert unter Windows 8 und Windows Server 2012 nicht mehr! Zumindest von Haus aus.

Wenn man unter diesen Systemen den Dienst startet, wird kein Icon in der Taskleiste angezeigt. Die Frage ist generell ob die Methode überhaupt noch funktioniert?

Mittels

TASKLIST /FI "IMAGENAME eq cmd.exe"

bekommt man jedoch schnell Klarheit. Denn mit jedem Aufruf von sc start ntauthcmd wird ein weiterer cmd.exe Eintrag hinzugefügt. Auch taucht die cmd.exe unter Services und mit Nummer 0 auf, also scheint dies noch perfekt zu funktionieren. Auch der Taskmanager führt die CMD.EXEs als Hintergrundprozesse.

Aber wie kommt man nun in die 0er Session?

Auf der Suche nach der Lösung hatte ich mir natürlich den Dienst UI0Detect, auch bekannt als “Erkennung interaktiver Dienste” oder in englisch “Interactive Service Detection”, angeschaut. Zunächst dachte ich, die Lösung wäre ganz einfach, denn dieser Dienst ist unter Windows 8 einfach auf manuellen Start eingestellt.

Mittels

sc qc UI0Detect

bekommt man die passenden Infos über den Dienst, hier die Ausgabe bei Windows 7

[SC] QueryServiceConfig ERFOLG

SERVICE_NAME: UI0Detect
        TYPE               : 110  WIN32_OWN_PROCESS (interactive)
        START_TYPE         : 3   DEMAND_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\Windows\system32\UI0Detect.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Erkennung interaktiver Dienste
        DEPENDENCIES       :
        SERVICE_START_NAME : LocalSystem

Was soll das? DEMAND_START ist Starttyp Manuell in der GUI! Also kein Unterschied, dennoch läuft das Ding auf Windows 7 automatisch aber bei Windows 8 nicht. Wer es startet? Keine Ahnung.

Aber man kann ja den Dienst einfach mal selber starten. Was scheren einen schon unzählige Programme die leider immer noch nicht sauber mit der Trennung von Diensten und UI umgehen können. Also

sc start UI0Detect

abgesetzt und dies erhalten

SERVICE_NAME: ui0detect
        TYPE               : 110  WIN32_OWN_PROCESS  (interactive)
        STATE              : 4  RUNNING
                                (STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 6804
        FLAGS              :

Na also sieht doch gut aus, blöd nur dass

sq query ui0detect

dies zurückgibt

SERVICE_NAME: ui0detect
        TYPE               : 110  WIN32_OWN_PROCESS  (interactive)
        STATE              : 1 STOPPED
        WIN32_EXIT_CODE    : 1  (0x1)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

Verdammt, es könnte alles so einfach sein. Unter der GUI heißt die offizielle Meldung:

Der Dienst "Erkennung interaktiver Dienste" auf "Lokaler Computer" konnte nicht gestartet werden.

Fehler 1: Unzulässige Funktion.

Supi und jetzt?

Die Suchmaschine meines Vertrauens förderte gleich beim ersten Eintrag einen brauchbaren Link hervor, nachdem man sie mit den richtigen Parametern gefüttert hatte. https://www.google.de/search?q="interactive+service+detection"+"error+1"

Der Link ist http://www.coretechnologies.com/WindowsServices/FAQ.html#UI0DetectFailsToStart und beschreibt genau obiges Problem. Dabei wird ein Registrierungseintrag beschrieben  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows mit Namen NoInteractiveServices beschrieben.

Also diesen mal kurz abgefragt mittels

reg query HKLM\SYSTEM\CurrentControlSet\Control\Windows /v N
oInteractiveServices

ergibt unter Windows 7

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows
    NoInteractiveServices    REG_DWORD    0x0

und unter Windows 8:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows
    NoInteractiveServices    REG_DWORD    0x1

Also tatsächlich ein Unterschied. Also diesen Wert mittels

reg add HKLM\SYSTEM\CurrentControlSet\Control\Windows /v N
oInteractiveServices /t REG_DWORD /d 0

geändert und nochmal den Dienst gestartet und flutsch, alles funktioniert wieder so wie gewohnt!

So das war mal wieder viel Geschreibsel für nichts. Aber die entscheidenden Zeilen unter Windows 8 sind:

sc create ntauthcmd binpath= "cmd /K start" type= own type= interact

reg add HKLM\SYSTEM\CurrentControlSet\Control\Windows /v NoInteractiveServices /t REG_DWORD /d 0

sc start ntauthcmd

Dabei ist anzumerken, dass die Änderung an der Registrierung nur einmalig gemacht werden muss. Danach reagiert Windows 8 wie Windows 7 und reagiert auf künftige sc start ntauthcmd automatisch.

Auf der Suche nach der Lösung bin ich noch über diese Blogeinträge gestolpert, welche einem das Thema mit UI0Detect und mögliche Problemlösungen nahebringen: http://blogs.msdn.com/b/patricka/archive/2010/04/27/what-is-interactive-services-detection-and-why-is-it-blinking-at-me.aspx und http://blogs.msdn.com/b/patricka/archive/2011/03/14/troubleshooting-interactive-services-detection.aspx. Wenn ich mir dabei die Kommentare so anschaue, dann scheint das immer noch aktuell ein Thema zu sein, dabei ist die Umstellung, wo mit Vista kam, jetzt schon so alt. Vielleicht hat MS die Funktion doch zu früh deaktiviert.

Werbeanzeigen