LogonUser erstellt eine neue LogonSession. Eine Session ist ein
LUID-Typ, der den neuen eingeloggten Benutzer auszeichnet. Mit dieser Session wird man auch bei anderen Computern angemeldet. D.h. jede Session hat eine andere Remote-Anmeldung. Daher kann man auf bereits existierende Netzwerkresourcen nicht zugreifen. Man muss sie erneut erstellen.
Übrigens habe ich erfahren, dass so erstellte Programme auch keine Nachricht bekommen, wenn der Computer herunterfährt. Das muss der eigene Dienst übernehmen, die Programme zu benachrichtigen.
Übrigens ist die folgende Reihenfolge von Funktionsaufrufen sehr empfehlenswert:
LogonUser
LoadUserProfile
CreateEnvironmentBlock(p^)
CreateProcessAsUser
Wait for Process (ka wie das genau heißt)
delete p;
UnloadUserProfile
für nicht Administratoren muss es so aussehen:
LogonUser
LoadUserProfile
CreateEnvironmentBlock(p^)
-hinzufügen von Benutzer in DACL von Winstation und Desktops
CreateProcessAsUser
Wait for Process (ka wie das genau heißt)
delete p;
UnloadUserProfile
-entfernen von Benutzer aus DACL von Winstation und Desktops
Alternative zur Änderung der W/D DACL wäre:
-Hinzufügen der LogonSID des Konsolenbenutzers in die TokenGruppen
LsaLogonUser(TokenGruppen)
LoadUserProfile
CreateEnvironmentBlock(p^)
CreateProcessAsUser
Wait for Process (ka wie das genau heißt)
delete p;
UnloadUserProfile