Credential Provider

High Level Code generation in C, C++, Visual C++
Klicken zum fixieren:
1 Allgemeine Beschreibung

2 Der LOGON unter Windows 7

3 Anmeldeprozess testen


  MeineKonsoleTestCP01 download


  MeineKonsoleTestCP02 download


if you are successful, send an email
if one program can be useful for you write
any problem or suggestion ?
orgler@tin.it

Allgemeine Beschreibung eines "Credential Providers" unter Windows 7 64Bit

Das hier gezeigte Codebeispiel, abgeleitet vom Beipiel der Microsoft vom
Jahre 2006, wurde von mir durchgearbeitet, etwas erweitert, mit dem Versuch
die Problematik mit eigenen Worten und in der eigenen Sprache zu erklären.

Es empfiehlt sich das Dokument:
"Windows Vista Sample Credential Providers Overview" zu lesen.
Man googelt den obigen Titel und auch nach:
"Windows Vista Credential Provider Samples".

Mit den Beipielen der Microsoft war es schnell möglich die Beispiele auf x64
zu bringen, die DLL in das System32 Verzeichnis zu laden und mit der Datei
"Register.reg" die notwendigen Registrierungseinträge zu erledigen.

Der neue Eintrag wurde dann auch problemlos nach dem Neustart oder nach
Erwecken aus dem "Sleep-Modus" angezeigt.
Man muss aber zuerst auf die Taste "Benutzer wechseln" klicken.

Das Herausfiltern nur des eigenen Eintrags und die Abänderung bzw. Anpassung
gestaltete sich als nicht ganz trivial.

Eine große Hilfe dazu ist eine Konsolen-Testanwendung, diese jedoch mit dem
Projekt zu verbinden kostete etliche Zeit.
Die Zeile "Add your credential provider to the solution" im oben angeführten
Dokument mag für einen erfahrenen Programmierer selbstverständlich sein,
im Allgemeinen wird dies jedoch nicht der Fall sein.

Es gibt nun unterschiedliche Parameter innerhalb des Codes, je nachdem ob
der Code von einem Neustart, nach dem "Stand-by" oder "Sleep-Modus" aufgerufen
wird, oder innerhalb des Debuggers aus der Konsolenanwendung heraus.

Diese Unterschiede konnte ich erst durch das Mitschreiben der Parameter in
eine Datei ausfindig machen.

Der gesamte Code ist voll funktionsfähig und doch "under construction".
Die Benützung unterliegt voll der Verantwortung des Nutzers.

Rückmeldungen sind willkommen, besonders wenn dadurch sinnvolle
Erweiterungen und Verbesserungen möglich sind.
 LOGON-Code Beschreibung
Der Anmeldeprozess fuer Vista und Windows 7 erfolgt über eine
Desktopanwendung.
Diese lässt keinen weiteren Prozess während der Anmeldung auf dem Rechner zu.
Die Sicherheit hat Vorrang.

Es ist aber möglich einen eigenen Anmeldeprozess in Form einer DLL zu
erstellen und in der Registrierung einzubinden.
Die DLL z.B. MeineCP.dll wird in das Systemverzeichnis system32 kopiert.
Für den Registrierungseintrag wird die Datei "Register.reg" gestartet.
Das System fragt hier nach und man muss bestätigen.

In diesem Codebeispiel wird die Standardanmeldung ausgefiltert, so dass nur
der neue Anmeldeprozess angezeigt wird.

!! Sollte der selbst erstellte Anmeldeprozess Fehler aufweisen, so kann man
den PC mit F8 im abgesicherten Modus mit Eingabeaufforderung starten.
Im Verzeichnis c:\windows\system32 löscht man die DLL
del MeineCP.dll
und nun kann man neu starten.

Fuer einen ersten Test braucht man nichts compilieren.
Es muss nur die Datei MeineCP.dll im Systemverzeichnis sein und der Eintrag
in die Registrierung.
Ruft man regedit.exe auf und geht zum Schlüssel wie er in Register.reg steht,
so kann man sich alle Schluessel anschauen, welche fuer eine Anmeldung in
Frage kommen können.

Den selbst eingetragenen Schlüssel kann man auch händisch löschen, dazu aber
auch den Eintrag im Filter.

 3 Anmeldeprozess testen bzw. debuggen
Schaltet man den PC ein, so wird nach dem Bootvorgang der LOGON-Prozess
gestartet. Erst wenn man eingeloggt ist kann man das Visual Studio starten
und damit auch den Debugger.

Zum Glück kann man eine Konsolenanwendung starten und mit dieser ist eine
Nachbildung des Anmeldeprozesses möglich.
Setzt man entsprechende Haltepunkte so kann der gesamte Code bestens erforscht
werden.

Ganz genau entspricht es dem realen Anmeldeprozess jedoch nicht.

In diesem Codebeispiel sind deshalb an vielen Stellen entsprechende Codezeilen,
welche die Datei MeineCpTest.txt öffnen und kurze Infos dran hängen.

Diese Codezeilen kann man entfernen, sie sind nur als Information vorhanden.

Es ergeben sich drei verschiedene Anmeldungen:

1) Die effektive Anmeldung mit CPUS_LOGON

2) Die Rückkehr aus dem Schlafmodus mit CPUS_UNLOCK_WORKSTATION

3) Die simulierte Anmeldung mit CPUS_CREDUI über die Konsolenanwendung

Den gesamten Ablauf zu verstehen ist nicht ganz einfach und erfordert Geduld.
Bei fehlerhaftem Code leuchtet einem eventuell ein hellblaues Feld entgegen
und nichts geht mehr.
Dann kann man nur noch die Einschalttaste so lange drücken, bis der PC
abschaltet und wie beschrieben mit F8 neu starten.

Fortsetzung folgt . . . .  Juli 2012