Autor Beitrag
BerndG
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 24.01.18 09:06 
Erst einmal: Hallo zusammen!

Crosspost aus dem Delphi-Treff, der aber in letzter Zeit relativ schwach frequentiert ist ... vielleicht habe ich ja hier mehr Glück.

Hat sich schon mal jemand mit CredUIPromptForWindowsCredentials beschäftigt?

Ich bekomme das zwar problemlos zur Anzeige, stoße dann aber aber auf 2 Probleme:

Wie lässt sich die Abfrage der Credentials auf die Smartcard einschränken (siehe angehängte Screenshots) ?
Wie prüfe ich, ob die eingegebene PIN auch die richtige ist?

Für hilfreiche Tipps danke ich im Voraus!
Zur Not darf es auch C# oder C++ sein ... :wink:

Gruß
Bernd

P.S.
Ich mache das z.Zt. so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var
  UIInfo: CREDUI_INFO;
  Save: BOOL;
  AuthPackage: ULONG;
  AuthBuffer: LPVOID;
  AuthBufferSize: ULONG;
begin
  UIInfo.hwndParent := Parent;
  UIInfo.pszCaptionText := 'ProdLog';
  UIInfo.pszMessageText := 'PKI-Anmeldung erforderlich:';
  UIInfo.hbmBanner := 0;
  UIInfo.cbSize := SizeOf(CREDUI_INFO);

  AuthPackage := 0;
  Save := False;

  Result := CredUIPromptForWindowsCredentials(@UIInfo, 0, AuthPackage, nil0, AuthBuffer, AuthBufferSize, Save, 0);

  ...
Einloggen, um Attachments anzusehen!
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 24.01.18 10:00 
- Nachträglich durch die Entwickler-Ecke gelöscht -
BerndG Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 30.01.18 12:58 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
bist du dir sicher, dass du die Funktion CredUIPromptForWindowsCredentials() meinst? Ich sehe hier keinerlei "PIN" bzw. einen Paramater, der den Zweck dafür erfüllt.
Die Funktion CredUIPromptForCredentials() hat hingegen wohl ein "Passwort" gegeben, welches man auch auf seine Gültigkeit prüfen kann.
Schön durchlesen, wofür die Funktionen verwendet werden.

Hab' ich brav gemacht ... alles fein durchgelesen :wink:
CredUIPromptForCredentials ist die "alte" Version.
Zitat:
Applications that target Windows Vista or Windows Server 2008 should call CredUIPromptForWindowsCredentials instead of this function, for the following reasons:
CredUIPromptForWindowsCredentials is consistent with the current Windows user interface.
CredUIPromptForWindowsCredentials is more extensible, allowing integration of additional authentication mechanisms such as biometrics and smart cards.
CredUIPromptForWindowsCredentials is compliant with the Common Criteria specification.

Mit der bekomme ich das auch problemlos hin, sieht aber k***e aus :?

Ab Vista sollte CredUIPromptForWindowsCredentials verwendet werden, die dann in ppvOutAuthBuffer etwas zurückliefert das man mit CredUnPackAuthenticationBuffer weiterverarbeiten kann.
Mit pulAuthPackage kann man der Funktion irgendwie mitteilen, welche Provider aufgelistet werden sollen:
Zitat:
If the value of pvInAuthBuffer is NULL and the CREDUIWIN_AUTHPACKAGE_ONLY flag is set in the dwFlags parameter, only credential providers capable of serializing credentials for the specified authentication package are to be enumerated.

Den gewünschten Provider holt man sich mit LsaLookupAuthenticationPackage()

Bloß wie???
Ich komme zwar in der Regel halbwegs mit dem Windows-API klar, aber hier steig ich dann irgendwann aus ...