Freigeben über


CredUIPromptForCredentialsA-Funktion (wincred.h)

Die CredUIPromptForCredentials--Funktion erstellt und zeigt ein konfigurierbares Dialogfeld an, in dem Anmeldeinformationen von einem Benutzer akzeptiert werden.

Anwendungen, die auf Windows Vista oder Windows Server 2008 abzielen, sollten CredUIPromptForWindowsCredentials anstelle dieser Funktion aufrufen, aus folgenden Gründen:

Syntax

CREDUIAPI DWORD CredUIPromptForCredentialsA(
  [in, optional] PCREDUI_INFOA pUiInfo,
  [in]           PCSTR         pszTargetName,
  [in]           PCtxtHandle   pContext,
  [in, optional] DWORD         dwAuthError,
  [in, out]      PSTR          pszUserName,
  [in]           ULONG         ulUserNameBufferSize,
  [in, out]      PSTR          pszPassword,
  [in]           ULONG         ulPasswordBufferSize,
  [in, out]      BOOL          *save,
  [in]           DWORD         dwFlags
);

Parameter

[in, optional] pUiInfo

Ein Zeiger auf eine CREDUI_INFO Struktur, die Informationen zum Anpassen der Darstellung des Dialogfelds enthält.

[in] pszTargetName

Ein Zeiger auf eine mit Null beendete Zeichenfolge, die den Namen des Ziels für die Anmeldeinformationen enthält, in der Regel ein Servername. Bei DFS-Verbindungen (Distributed File System) ist diese Zeichenfolge der Form ServerName\ShareName-. Dieser Parameter wird verwendet, um Zielinformationen beim Speichern und Abrufen von Anmeldeinformationen zu identifizieren.

[in] pContext

Dieser Parameter ist für die zukünftige Verwendung reserviert. Es muss NULL-sein.

[in, optional] dwAuthError

Gibt an, warum das Dialogfeld "Anmeldeinformationen" erforderlich ist. Ein Aufrufer kann diesen Windows-Fehlerparameter übergeben, der von einem anderen Authentifizierungsaufruf zurückgegeben wird, damit das Dialogfeld bestimmte Fehler aufnehmen kann. Wenn beispielsweise der Kennwortcode "Abgelaufen" übergeben wird, kann das Dialogfeld den Benutzer auffordern, das Kennwort für das Konto zu ändern.

[in, out] pszUserName

Ein Zeiger auf eine mit Null beendete Zeichenfolge, die den Benutzernamen für die Anmeldeinformationen enthält. Wenn eine nicht leere Zeichenfolge übergeben wird, wird die option UserName des Dialogfelds mit der Zeichenfolge vorgefüllt. Bei anderen Anmeldeinformationen als UserName/Passwordkann ein gemarstetes Format der Anmeldeinformationen übergeben werden. Diese Zeichenfolge wird durch Aufrufen von CredMarshalCredentialerstellt.

Mit dieser Funktion wird der vom Benutzer angegebene Name in diesen Puffer kopiert, wobei maximal ulUserNameMaxChars Zeichen kopiert werden. Dieses Format kann mithilfe CredUIParseUsernamein UserName/Password Format konvertiert werden. Ein marshalliertes Format kann direkt an einen Sicherheitssupportanbieter (SSP) übergeben werden.

Wenn das CREDUI_FLAGS_DO_NOT_PERSIST Flag nicht angegeben ist, ist der in diesem Parameter zurückgegebene Wert ein Formular, das nicht überprüft, gedruckt oder beibehalten werden sollte, als es an CredUIParseUsernamezu übergeben. Die nachfolgenden Ergebnisse von CredUIParseUsername können nur an eine clientseitige Authentifizierungsfunktion wie WNetAddConnection oder eine SSP-Funktion übergeben werden.

Wenn keine Domäne oder kein Server als Teil dieses Parameters angegeben wird, wird der Wert des pszTargetName Parameter als Domäne verwendet, um ein DomainName-\UserName--Paar zu bilden. Bei der Ausgabe empfängt dieser Parameter eine Zeichenfolge, die DomainName\UserName Paar enthält.

[in] ulUserNameBufferSize

Die maximale Anzahl von Zeichen, die in pszUserName kopiert werden können, einschließlich des endierenden NULL-Zeichens.

Hinweis enthält CREDUI_MAX_USERNAME_LENGTH nicht das endende Nullzeichen.
 

[in, out] pszPassword

Ein Zeiger auf eine mit Null beendete Zeichenfolge, die das Kennwort für die Anmeldeinformationen enthält. Wenn für pszPassword-eine leere Zeichenfolge angegeben wird, wird die Kennwortoption des Dialogfelds mit der Zeichenfolge vorab ausgefüllt.

Diese Funktion kopiert das vom Benutzer bereitgestellte Kennwort in diesen Puffer, wobei maximal ulPasswordMaxChars Zeichen kopiert wird. Wenn das CREDUI_FLAGS_DO_NOT_PERSIST Flag nicht angegeben ist, ist der in diesem Parameter zurückgegebene Wert ein Formular, das nicht überprüft, gedruckt oder beibehalten werden sollte, außer es an eine clientseitige Authentifizierungsfunktion wie WNetAddConnection oder eine SSP-Funktion zu übergeben.

Wenn Sie mit der Verwendung des Kennworts fertig sind, löschen Sie das Kennwort aus dem Arbeitsspeicher, indem Sie die SecureZeroMemory-Funktion aufrufen. Weitere Informationen zum Schützen von Kennwörtern finden Sie unter Behandeln von Kennwörtern.

[in] ulPasswordBufferSize

Die maximale Anzahl von Zeichen, die in pszPassword kopiert werden können, einschließlich des endenden NULL-Zeichens.

Hinweis CREDUI_MAX_PASSWORD_LENGTH enthält nicht das endende Nullzeichen.
 

[in, out] save

Ein Zeiger auf eine BOOL-, die den Anfangszustand des Kontrollkästchens Speichern angibt und den Status des Kontrollkästchens Speichern empfängt, nachdem der Benutzer auf das Dialogfeld geantwortet hat. Wenn dieser Wert nicht NULL- ist und CredUIPromptForCredentials NO_ERROR zurückgibt, gibt pfSave den Status des Kontrollkästchens Speichern zurück, wenn der Benutzer im Dialogfeld OK ausgewählt hat.

Wenn das CREDUI_FLAGS_PERSIST Flag angegeben ist, wird das Kontrollkästchen speichern nicht angezeigt, wird jedoch als aktiviert betrachtet.

Wenn das CREDUI_FLAGS_DO_NOT_PERSIST-Flag angegeben ist und CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX nicht angegeben wird, wird das Kontrollkästchen speichern nicht angezeigt, gilt jedoch als deaktiviert.

Eine Anwendung, die CredUI verwenden muss, um den Benutzer zur Eingabe von Anmeldeinformationen aufzufordern, die vom Anmeldeinformationsverwaltungs-Manager bereitgestellten Anmeldeinformationsverwaltungsdienste jedoch nicht benötigt, kann pfSave- verwenden, um den Status des Kontrollkästchens Speichern zu erhalten, nachdem der Benutzer das Dialogfeld geschlossen hat. Dazu muss der Aufrufer CREDUI_FLAGS_DO_NOT_PERSIST und CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX in dwFlags-angeben. Wenn CREDUI_FLAGS_DO_NOT_PERSIST und CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX festgelegt werden, ist die Anwendung für die Prüfung *pfSave nach dem Zurückgeben der Funktion verantwortlich, und wenn *pfSaveTRUEist, muss die Anwendung die entsprechende Aktion ausführen, um die Benutzeranmeldeinformationen in den Ressourcen der Anwendung zu speichern.

[in] dwFlags

Ein DWORD- Wert, der ein spezielles Verhalten für diese Funktion angibt. Dieser Wert kann ein bitweiserODER Kombination aus Null oder mehr der folgenden Werte sein.

Wert Bedeutung
CREDUI_FLAGS_ALWAYS_SHOW_UI
0x00080
Gibt an, dass eine Benutzeroberfläche angezeigt wird, auch wenn die Anmeldeinformationen von einer vorhandenen Anmeldeinformation im Anmeldeinformations-Manager zurückgegeben werden können. Dieses Kennzeichen ist nur zulässig, wenn auch CREDUI_FLAGS_GENERIC_CREDENTIALS angegeben ist.
CREDUI_FLAGS_COMPLETE_USERNAME
0x00800
Füllen Sie das Kombinationsfeld mit der Eingabeaufforderung für einen Benutzernamen auf.
CREDUI_FLAGS_DO_NOT_PERSIST
0x00002
Speichern Sie keine Anmeldeinformationen, oder zeigen Sie Kontrollkästchen an. Sie können CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX mit dieser Kennzeichnung übergeben, um nur das Kontrollkästchen Speichern anzuzeigen, und das Ergebnis wird im pfSave Ausgabeparameter zurückgegeben.
CREDUI_FLAGS_EXCLUDE_CERTIFICATES
0x00008
Füllen Sie das Kombinationsfeld nur mit Benutzername/Kennwort auf. Zeigen Sie keine Zertifikate oder Smartcards im Kombinationsfeld an.
CREDUI_FLAGS_EXPECT_CONFIRMATION
0x20000
Gibt an, dass der Aufrufer CredUIConfirmCredentials aufruft, nachdem überprüft wurde, ob die zurückgegebenen Anmeldeinformationen tatsächlich gültig sind. Mit diesem Mechanismus wird sichergestellt, dass ungültige Anmeldeinformationen nicht im Anmeldeinformations-Manager gespeichert werden. Geben Sie dieses Kennzeichen in allen Fällen an, es sei denn, CREDUI_FLAGS_DO_NOT_PERSIST ist angegeben.
CREDUI_FLAGS_GENERIC_CREDENTIALS
0x40000
Berücksichtigen Sie die vom Benutzer eingegebenen Anmeldeinformationen als generische Anmeldeinformationen.
CREDUI_FLAGS_INCORRECT_PASSWORD
0x00001
Benachrichtigen Sie den Benutzer über unzureichende Anmeldeinformationen, indem Sie den Sprechblasentipp "Anmelden nicht erfolgreich" anzeigen.
CREDUI_FLAGS_KEEP_USERNAME
0x100000
Erlauben Sie dem Benutzer nicht, den angegebenen Benutzernamen zu ändern.
CREDUI_FLAGS_PASSWORD_ONLY_OK
0x00200
Füllen Sie das Kombinationsfeld nur mit dem Kennwort auf. Die Eingabe eines Benutzernamens ist nicht zulässig.
CREDUI_FLAGS_PERSIST
0x01000
Zeigen Sie nicht das Kontrollkästchen Speichern an, aber die Anmeldeinformationen werden so gespeichert, als ob das Kontrollkästchen angezeigt und ausgewählt wurde.
CREDUI_FLAGS_REQUEST_ADMINISTRATOR
0x00004
Füllen Sie das Kombinationsfeld nur mit lokalen Administratoren auf.Windows XP Home Edition: Dieses Kennzeichen filtert das bekannte Administratorkonto aus.
CREDUI_FLAGS_REQUIRE_CERTIFICATE
0x00010
Füllen Sie das Kombinationsfeld nur mit Zertifikaten und Smartcards auf. Die Eingabe eines Benutzernamens ist nicht zulässig.
CREDUI_FLAGS_REQUIRE_SMARTCARD
0x00100
Füllen Sie das Kombinationsfeld nur mit Zertifikaten oder Smartcards auf. Die Eingabe eines Benutzernamens ist nicht zulässig.
CREDUI_FLAGS_SERVER_CREDENTIAL
0x04000
Dieses Kennzeichen ist nur dann sinnvoll, wenn die Suche nach übereinstimmenden Anmeldeinformationen zum Vorfüllen des Dialogfelds sinnvoll ist, wenn die Authentifizierung fehlschlägt. Wenn dieses Kennzeichen angegeben ist, werden keine Wildcardanmeldeinformationen abgeglichen. Sie hat keine Auswirkung beim Schreiben von Anmeldeinformationen. CredUI erstellt keine Anmeldeinformationen, die Wildcardzeichen enthalten. Alle gefundenen Wurden entweder explizit vom Benutzer erstellt oder programmgesteuert erstellt, wie beim Herstellen einer RAS-Verbindung.
CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX
0x00040
Wenn das Kontrollkästchen aktiviert ist, zeigen Sie das Kontrollkästchen Speichern an, und geben Sie TRUE- im pfSave Ausgabeparameter zurück, andernfalls geben Sie FALSE-zurück. Das Kontrollkästchen verwendet standardmäßig den Wert in pfSave-.
CREDUI_FLAGS_USERNAME_TARGET_CREDENTIALS
0x80000
Die Anmeldeinformationen sind "runas"-Anmeldeinformationen. Der parameter TargetName gibt den Namen des auszuführenden Befehls oder Programms an. Sie wird nur zu Aufforderungszwecken verwendet.
CREDUI_FLAGS_VALIDATE_USERNAME
0x00400
Überprüfen Sie, ob der Benutzername gültig ist.

Rückgabewert

Der Rückgabewert ist ein DWORD- und kann einer der folgenden Werte sein.

Wert Beschreibung
ERROR_CANCELLED
Der Benutzer hat Cancelausgewählt. Die parameter pszUserName und pszPassword parameter wurden nicht geändert.
ERROR_INVALID_FLAGS
Dieser Status wird für alle ungültigen Flagkonfigurationen zurückgegeben.
ERROR_INVALID_PARAMETER
Entweder pszTargetName- ist NULL-, die leere Zeichenfolge oder länger als CREDUI_MAX_DOMAIN_LENGTH oder pUiInfo- ist nicht NULL- und die CredUI_INFO Struktur, auf die verwiesen wurde, nicht eine der folgenden Anforderungen erfüllt:
  • Das cbSize Mitglied muss eins sein.
  • Wenn das hbmBanner Member nicht NULL-ist, muss es vom Typ OBJ_BITMAP sein.
  • Wenn das pszMessageText-element nicht NULL-ist, darf es nicht größer als CREDUI_MAX_MESSAGE_LENGTH sein.
  • Wenn das pszCaptionText-element nicht NULL-ist, darf es nicht größer als CREDUI_MAX_CAPTION_LENGTH sein.
ERROR_NO_SUCH_LOGON_SESSION
Der Anmeldeinformations-Manager kann nicht verwendet werden. Normalerweise wird dieser Fehler behandelt, indem CredUIPromptForCredentials- aufgerufen und das CREDUI_FLAGS_DO_NOT_PERSIST-Flag übergeben wird.
NO_ERROR
Der Benutzer hat OKausgewählt. Der pszUserName, pszPassword-und pfSave Parameter geben die zuvor dokumentierten Werte zurück.

Bemerkungen

Die CredUIPromptForCredentials--Funktion erstellt und zeigt ein modales Anwendungsdialogfeld an. Nachdem das Dialogfeld angezeigt wurde und bis es vom Benutzer oder der Anwendung geschlossen wird, kann kein anderes Fenster in der Anwendung aktiv werden.

Die Kennzeichen CREDUI_FLAGS_REQUIRE_SMARTCARD, CREDUI_FLAGS_REQUIRE_CERTIFICATE und CREDUI_FLAGS_EXCLUDE_CERTIFICATE schließen sich gegenseitig aus.

Wenn CREDUI_FLAGS_DO_NOT_PERSIST angegeben ist, muss entweder pszTargetName- angegeben werden oder uiInfo->pszMessageText und uiInfo->pszCaption- angegeben werden.

Die Kennzeichen CREDUI_FLAG_USERNAME_TARGET_CREDENTIALS und CREDUI_FLAGS_GENERIC_CREDENTIALS schließen sich gegenseitig aus. Wenn keines angegeben ist, handelt es sich bei den Anmeldeinformationen um eine Domänenanmeldeinformation.

Ein X509-Zertifikat muss über einen erweiterten Schlüsselverwendungswert (EKU) szOID_KP_SMARTCARD_LOGON (1.3.6.1.4.1.311.20.2.2) verfügen, der angezeigt werden soll.

Windows XP: Dieser EKU-Wert ist nicht erforderlich, um X509-Zertifikate anzuzeigen.

Wenn CREDUI_FLAGS_GENERIC_CREDENTIALS nicht angegeben oder CREDUI_FLAGS_COMPLETE_USERNAME angegeben wird, wird der eingegebene Name Syntaxüberprüft. Die Syntaxüberprüfung wendet dieselben Regeln an, wie sie von CredUIParseUserNameangewendet werden. Wenn der eingegebene Name ungültig ist, wird der Benutzer aufgefordert, einen gültigen Namen einzugeben. Wenn der Domänenteil des eingegebenen Namens fehlt, wird ein Teil basierend auf dem Zielnamen angegeben.

Wenn CREDUI_FLAGS_GENERIC_CREDENTIALS angegeben ist und CREDUI_FLAGS_VALIDATE_USERNAME ebenfalls angegeben wird, wird der eingegebene Name syntaxgeprüft. Wenn der eingegebene Name ungültig ist, wird der Benutzer aufgefordert, einen gültigen Namen einzugeben.

Wenn CREDUI_FLAGS_GENERIC_CREDENTIALS angegeben ist und weder CREDUI_FLAGS_COMPLETE_USERNAME noch CREDUI_FLAGS_VALIDATE_USERNAME angegeben wird, wird der eingegebene Name nicht auf irgendeine Weise überprüft.

Wenn weder CREDUI_FLAGS_PERSIST noch CREDUI_FLAGS_DO_NOT_PERSIST festgelegt sind, wird das Kontrollkästchen Speichern angezeigt, und es wird gesteuert, ob die Anmeldeinformationen gespeichert werden.

Anrufmodi

  • Der Aufrufer versucht, auf die Zielressource zuzugreifen, credui aufzurufen (eine Beschreibung der Zielressource und den Fehlerstatus übergeben), CredUIParseUserNameaufrufen, erneut auf die Zielressource zugreifen und dann CredUIConfirmCredentialsaufrufen.
  • Der Aufrufer kann zur Eingabe von Anmeldeinformationen auffordern, ohne auf Ressourcen zuzugreifen, indem CREDUI_FLAGS_DO_NOT_PERSIST übergeben werden.
  • Für generische Anmeldeinformationen gibt es kein Authentifizierungspaket. Daher muss die Anwendung auf die Anmeldeinformationen zugreifen, um die Authentifizierung durchzuführen. Aufforderung zur Eingabe von Anmeldeinformationen, nicht CREDUI_FLAGS_ALWAYS_SHOW_UI vor der ersten Authentifizierung übergeben. Die Benutzeroberfläche wird nur angezeigt, wenn im Anmeldeinformations-Manager keine Anmeldeinformationen vorhanden sind. Bei allen nachfolgenden Nachrichten innerhalb der Anwendung wird CREDUI_FLAGS_ALWAYS_SHOW_UI übergeben, da die Anmeldeinformationen im Anmeldeinformations-Manager für diese Ressource eindeutig nicht gültig sind.
Zielinformation

Zielinformationen sind Informationen zum Speicherort der Ressource, auf die zugegriffen werden soll. Rufen Sie für eine Liste aller potenziellen Zielnamen für eine Ressource CredGetTargetInfoauf. CredGetTargetInfo Informationen zurück, die vom Negotiate-, NTLM- oder Kerberos-Authentifizierungspaket zwischengespeichert wurden, wenn eines dieser Pakete zur Authentifizierung beim benannten Ziel verwendet wurde. CredGetTargetInfo gibt einige oder alle der folgenden Namen für das Ziel zurück:

  • NetBIOS-Servername des Computers
  • DNS-Servername des Computers
  • NetBIOS-Domänenname der Domäne, zu der der Computer gehört
  • DNS-Domänenname der Domäne, zu der der Computer gehört
  • DNS-Strukturname der Struktur, zu der der Computer gehört
  • Name des Pakets, das die Informationen gesammelt hat
Alle Informationen können fehlen, wenn die Informationen nicht auf den Zielcomputer angewendet werden. Beispielsweise hat ein Computer, der Mitglied einer Arbeitsgruppe ist, keinen NetBIOS-Domänennamen.

Anmeldeinformationen werden basierend auf dem Zielnamen im Anmeldeinformations-Manager gespeichert. Jeder Zielname wird so allgemein wie möglich gespeichert, ohne dass im Anmeldeinformations-Manager bereits gespeicherte Anmeldeinformationen kollidiert werden. Da Anmeldeinformationen anhand des Zielnamens gespeichert werden, kann ein bestimmter Benutzer nur über eine Anmeldeinformationen pro Ziel verfügen, die im Anmeldeinformations-Manager gespeichert sind.

Anmerkung

Der wincred.h-Header definiert CredUIPromptForCredentials als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows XP [nur Desktop-Apps]
mindestens unterstützte Server- Windows Server 2003 [Nur Desktop-Apps]
Zielplattform- Fenster
Header- wincred.h
Library Credui.lib
DLL- Credui.dll

Siehe auch

CredGetTargetInfo

CredMarshalCredential

CredUIConfirmCredentials

CredUIParseUserName

CredUIPromptForWindowsCredentials

CredUI_INFO

WNetAddConnection-