So, ich weiß nicht weiter und finde auch nichts drüber Vielleicht kann mir hier ja jemand weiterhelfen?
Ziel ist ein Dienst, der im Kontext "local system" arbeiten soll und bestimmte Prozesse beim aktuell angemeldeten Benutzer starten und überwachen soll. Dazu habe ich diese zwei Funktionen folgendermaßen in meinen Code eingehängt:
Im weiteren Verlauf werden die Funktionen dann folgendermaßen aufgerufen:
Zunächst hatte ich eine ganz konkrete Befürchtung: "Scheisse, unter Vista läuft das niemals" - aber kam ganz anders: unter Vista funktioniert der Code prima! Die ID der aktiven Konsolensitzung wird geholt und mit dieser dann das UserToken des angemeldeten Benutzers ermittelt. Alles wunderbar!
Die Ernüchterung kam dann auf XP. Dort bekomme ich beim Aufruf von WTSQueryUserToken den Fehlercode 997 zurück (ERROR_IO_PENDING). Daraufhin hab ich ein wenig nachgeforscht und nun bin ich so schlau, dass es sich hier um einen asynchronen Vorgang handelt und man das bei managed Code wohl mit Overlapping "in den Griff bekommen kann". Allerdings hänge ich genau an dieser Stelle nun fest. Kann doch nicht sein, dass WTSQueryUserToken unter Vista synchron und unter XP asynchron arbeitet. Zumindest entsteht der Eindruck, denn unter Vista gibt es da kein Murren und kein Meckern, während XP da garnix macht und mir durch die Blume sagt, dass ich erstmal warten soll...
Ich hoffe, die Codeausschnitte reichen, denn das ganze Projekt zu posten wäre ein wenig Overkill. Kennt jemand diese Problematik und kann mir vielleicht Tips geben? Ich dreh mich hier grad ein wenig im Kreis...
Vielversprechend hat anfangs das hier auf mich gewirkt:
http://www.beefycode.com/post/Using-...aged-Code.aspx
Wobei mein Problem dabei ist, dass WTSQueryUserToken keinen Parameter für Overlapping bereitstellt.
Ziel ist ein Dienst, der im Kontext "local system" arbeiten soll und bestimmte Prozesse beim aktuell angemeldeten Benutzer starten und überwachen soll. Dazu habe ich diese zwei Funktionen folgendermaßen in meinen Code eingehängt:
Code:
[DllImport("Wtsapi32.dll", EntryPoint = "WTSQueryUserToken", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] unsafe private static extern bool WTSQueryUserToken(UInt32 SessionId, out IntPtr phToken); [DllImport("kernel32.dll")] private static extern int WTSGetActiveConsoleSessionId();
Code:
IntPtr oToken = new IntPtr(); UInt32 oSessionID = WTSGetActiveConsoleSessionId(); if (WTSQueryUserToken(oSessionID, out oToken)) { int err = Marshal.GetLastWin32Error(); if (err == 0) { ... } else { ... } }
Die Ernüchterung kam dann auf XP. Dort bekomme ich beim Aufruf von WTSQueryUserToken den Fehlercode 997 zurück (ERROR_IO_PENDING). Daraufhin hab ich ein wenig nachgeforscht und nun bin ich so schlau, dass es sich hier um einen asynchronen Vorgang handelt und man das bei managed Code wohl mit Overlapping "in den Griff bekommen kann". Allerdings hänge ich genau an dieser Stelle nun fest. Kann doch nicht sein, dass WTSQueryUserToken unter Vista synchron und unter XP asynchron arbeitet. Zumindest entsteht der Eindruck, denn unter Vista gibt es da kein Murren und kein Meckern, während XP da garnix macht und mir durch die Blume sagt, dass ich erstmal warten soll...
Ich hoffe, die Codeausschnitte reichen, denn das ganze Projekt zu posten wäre ein wenig Overkill. Kennt jemand diese Problematik und kann mir vielleicht Tips geben? Ich dreh mich hier grad ein wenig im Kreis...
Vielversprechend hat anfangs das hier auf mich gewirkt:
http://www.beefycode.com/post/Using-...aged-Code.aspx
Wobei mein Problem dabei ist, dass WTSQueryUserToken keinen Parameter für Overlapping bereitstellt.
Comment