windows - CreateProcessAsUser ikke fra en tjeneste

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg ønsker at køre en ansøgning under en anden brugerkonto s (ikke forhøjet) legitimationsoplysninger, mens denne bruger allerede er logget ind. Specifikt vil jeg, at min applikations installatør (som kører under en administratorkonto) skal gyde processer i hver logfil - i brugerens desktop-session. Disse processer kommunikerer med en service og viser vinduer på skrivebordet for at brugeren kan interagere med.


Normalt, fra en tjeneste, der kører som LocalSystem, er tilgangen WTSQueryUserToken -> CreateProcessAsUser. Men WTSQueryUserToken vandt ikke uden for LocalSystem -kontoen (med SE\_TCB\_NAME privilegium), hvilket gør denne tilgang mislykket her.


Hvis brugeren ikke var logget ind allerede, kunne jeg bare registrere ansøgningen for at køre under HKLM...Run, så enhver logget bruger vil få en kopi af programmet, når de logger ind. Men hvis brugeren s allerede logget ind, det virker heller ikke (i det mindste ikke før de logger ud og logger ind igen).


Jeg kan se to mulige svar:



  1. Du kan ikke gøre det. Undskyld.

  2. Du kan få et token fra et andet sted (måske opregne explorer.exe-processer og trække adgangstoken fra hver enkelt?), ring DuplicateTokenEx og send derefter til CreateProcessAsUser. Jeg forsøgte denne tilgang og fik konsekvent modtaget 'adgang nægtet', når jeg forsøgte at OpenProcessToken på en proces, der kører under en anden brugersession, selvom debug privilegiet var aktiveret, og processen blev åbnet med PROCESS\_ALL\_ACCESS.



Hvad synes du?


Hvis svaret er # 1 ('du kan ikke gøre dette'), hvad er den anbefalede bedste praksis til at gyde ikke-forhøjede processer til at mægle mellem en tjeneste og brugeren? Er det bedste praksis for tjenesten at gyde disse processer ind i hver session via CreateProcessAsUser? Eller er det bedste praksis, at de ikke-forhøjede processer skal køres separat (f.eks. via HKLM...Run eller HKCU...Run)?

Bedste reference