| |
Credential Provider |
High Level Code generation in C, C++, Visual C++ |
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 |
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. 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. 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 |