Die Ausführung von code in einem anderen Benutzer-Kontext

Ich habe eine Anwendung mit einem manifest, das erfordert, die als administrator ausgeführt, aber ein Teil der app ist das anzeigen eines Laufwerks mit WNetAddConnection2, die ich glauben verlangt, führen Sie in die normal-user-Kontext aufgrund Anmeldeinformationen etc. Gibt es eine Möglichkeit zum ausführen dieses Stück code in die normal-user-Kontext, ohne die Schaffung einer separaten Prozess.

BEARBEITEN

Aus den Kommentaren habe ich so weit gekommen, aber es funktioniert nicht. Ich erwartete es nicht zu, da ich nicht wirklich verstehe durchaus, wie sollte ich diesen verwenden. Vielleicht ist es am besten, wenn ich öffnen Sie eine neue Frage?

class Program
{
    [DllImport("advapi32.DLL")]
    public static extern bool ImpersonateLoggedOnUser(IntPtr hToken);
    [DllImport("advapi32.DLL")]
    public static extern bool RevertToSelf();

    static void Main(string[] args)
    {
        IntPtr phToken = IntPtr.Zero;
        ImpersonateLoggedOnUser(phToken);
        MapDrives();
        RevertToSelf();
    }
}

BEARBEITEN

Wenn der aktuelle Benutzer hat admin-Rechte, dann der wichtigste Prozess erhoben mit dem manifest, in dem code, die ist erhöht, ich möchte einen Befehl ausführen, in der der Nutzer nicht mit erhöhten rechten Platz wie diesem zu haben scheint, verschiedene Umgebungsvariablen, etc. Ich glaube, dass sobald ein thread gestartet wird, kann es nicht die Veränderung selbst, die es braucht, um führen Sie einen neuen ein.

  • Die Art und Weise, um die aktuelle Benutzer-Authentifizierung token wird durch WindowsIdentity.GetCurrent().Token. Ich denke aber, in deinem Fall wird es wieder die token der Benutzer "administrator" (wie Sie Ihre Anwendung als administrator ausgeführt).
  • Dies ist der Identitätswechsel. Eine sehr praktische nuget package und die post, um das gleiche zu erreichen durch LogonUser() p/invoke-Aufruf.
Schreibe einen Kommentar