c # - Lås Windows op programmatisk

Indlæg af Hanne Mølgaard Plasc

Problem



I min nuværende C # kode kan jeg låse en Windows-bruger session programmatisk (samme som Windows + L).


Da appen stadig ville køre, er der nogen måde at låse op for sessionen fra det C # program. Bruger legitimationsoplysninger er kendt. Appen kører på Windows 7.

Bedste reference


Du skal bruge en brugerdefineret Windows-credential provider til at logge ind for dig. Du skal også gemme brugerens legitimationsoplysninger et sted for at logge ind. Der er nogle prøver i Windows SDK 7 https://www.microsoft.com/en-us/download/details.aspx?id=8279[6]


Der er en flok projekter for at komme i gang under Samplessecuritycredentialproviders.


Sådan låser du skærmen op:



  • Indstil brugernavn/adgangskode i CSampleCredential::Initialize

  • indstil autologin til sand i CSampleCredential::SetSelected

  • Søg i hardwareleverandørprøven for WM\_TOGGLE\_CONNECTED\_STATUS besked for at se, hvordan du aktiverer login

  • Opret en eller anden måde at kommunikere med din app for at udløse oplåsningen (f.eks. lokale tcp-servere)



Det er en smerte i røvet, men det virker.

Andre referencer 1


Her er nogle hackery at gøre det: http://www.codeproject.com/Articles/16197/Remotely-Unlock-a-Windows-Workstation
Har det ikke testet mig selv. [7]


Ikke for. NET del, men du kan også lave din egen brugerdefinerede Logon UI og injicere en mekanisme der. Det kan dog nemt blive sikkerhedsproblem.

Andre referencer 2


    var path = new ManagementPath();
    path.NamespacePath = "\ROOT\CIMV2\Security\MicrosoftVolumeEncryption"; path.ClassName = "Win32\_EncryptableVolume";

    var scope = new ManagementScope(path, new ConnectionOptions() { Impersonation = ImpersonationLevel.Impersonate });

    var management = new ManagementClass(scope, path, new ObjectGetOptions());

    foreach (ManagementObject vol in management.GetInstances())
    {

        Console.WriteLine("----" + vol["DriveLetter"]);
        switch ((uint)vol["ProtectionStatus"])
        {
            case 0:
                Console.WriteLine("not protected by bitlocker");
                break;
            case 1:
                Console.WriteLine("unlocked");
                break;
            case 2:
                Console.WriteLine("locked");
                break;
        }

        if ((uint)vol["ProtectionStatus"] == 2)
        {
            Console.WriteLine("unlock this driver ...");

            vol.InvokeMethod("UnlockWithPassphrase", new object[] { "here your pwd" });

            Console.WriteLine("unlock done.");
        }
    }


Bemærk: Dette virker kun, hvis du kører Visual Studio som administrator.

Andre referencer 3


Selvfølgelig kan du ikke låse den op. Aflåsning af en session kræver, at brugeren fysisk er der for at indtaste deres kontooplysninger. Tillad software til at gøre dette, selv med gemte legitimationsoplysninger, ville være et sikkerhedsproblem for mange af de andre situationer, hvor arbejdsstationslås er Brugt.

Andre referencer 4


Nej, der er ingen måde at gøre dette ved design. Hvad er dit scenario og hvorfor skal du låse/låse op for arbejdsstationen?