Hvis der er nogle, der står med det sammen problem, så vil jeg lige skrive, hvad jeg har tænkt mig at gøre.
Jeg vil også gerne høre, hvis der er nogle, der har nogle tanker om eller erfaringer med den løsning, jeg foreslår. Jeg føler mig lidt på tynd is her.
Til at starte med, kan jeg sige, at min overskrift var lidt forkert. Man kan godt lave impersonation i WinForms, men det jeg spurgte om var, om man kan ændre på den bruger, der kører en proces i Windows.
Det kan man ikke! Når en proces startes i Windows, knyttes den til en token, der repræsenterer en brugerkonto, og dette proces-token kan ikke ændres - på nogen måde overhoved.
Man kan så bruge Impersonation til at lade som om, at en tråd udføres af en anden bruger vha. WindowsIdentity.Impersonate() som forklaret i link'et ovenfor. Hvis den tråd nu fx. forsøger at få adgang til en fil, så vil det ske som den impersonated brugerkonto. Hvis jeg udfører en
WindowsIdentity.GetCurrent() så vil jeg få fat i den impersonated bruger.
Men hvis jeg udfører en Threads.CurrentPrincipal, så vil jeg få fat i den oprindelige bruger!
Så efter
WindowsIdentity.Impersonate();
skal jeg udføre en
Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent())
Thread.CurrentPrincipal følger ikke automatisk WindowPrincipal.GetCurrent() - det skal jeg selv sørge for (hvis det er det, jeg ønsker (og det er det)).
Thread.CurrentPrincipal har betydning for den rollebaserede sikkerhed i .NET og indtil jeg fik sat den, så connected min program til SQL Server med den oprindelige bruger ikke den impersonated bruger.
WindowsIdentity.Impersonate() og Thread.CurrentPrincipal berører kun den aktuelle tråd, så når mine baggrundstråde starter med at køre, skal jeg sørge for at de også kalder Impersonate() og sætter CurrentPrincipal til den bruger, der er 'logget på' forgrundstråden.
I øvrigt: Mine baggrundstråde bliver startet op med en Timer, og når de er færdige og går tilbage i ConnectionPool'en, så bliver de ikke 'nulstillet' til den oprindelige brugerkonto, de bevarer 'impersoneringen'.
Jeg har haft rigtig god nytte af følgende online bog:
http://alt.pluralsight.com/wiki/default.aspx/Keith.GuideBook.HomePagearne_v: Jeg håber, det er i orden, at du ikke får 200 point for dit link.