다음을 통해 공유


CredUICmdLinePromptForCredentialsA 함수(wincred.h)

CredUICmdLinePromptForCredentials 함수는 명령줄(콘솔) 애플리케이션에서 작업하는 사용자의 자격 증명 정보를 묻는 메시지를 표시하고 수락합니다. 사용자가 입력한 이름과 암호는 확인을 위해 호출 애플리케이션에 다시 전달됩니다.

통사론

CREDUIAPI DWORD CredUICmdLinePromptForCredentialsA(
  [in]           PCSTR       pszTargetName,
  [in]           PCtxtHandle pContext,
  [in, optional] DWORD       dwAuthError,
  [in, out]      PSTR        UserName,
  [in]           ULONG       ulUserBufferSize,
  [in, out]      PSTR        pszPassword,
  [in]           ULONG       ulPasswordBufferSize,
  [in, out]      PBOOL       pfSave,
  [in]           DWORD       dwFlags
);

매개 변수

[in] pszTargetName

자격 증명의 대상 이름(일반적으로 서버 이름)을 포함하는 null종료된 문자열에 대한 포인터입니다. DFS 연결의 경우 이 문자열은 ServerNameShareName형식입니다. pszTargetName 매개 변수는 대상 정보를 식별하는 데 사용되며 자격 증명을 저장하고 검색하는 데 사용됩니다.

[in] pContext

현재 예약되어 있으며 NULL합니다.

[in, optional] dwAuthError

자격 증명을 묻는 메시지가 필요한 이유를 지정합니다. 호출자는 다른 인증 호출에서 반환된 이 Windows 오류 매개 변수를 전달하여 대화 상자가 특정 오류를 수용할 수 있도록 할 수 있습니다. 예를 들어 암호 만료 상태 코드가 전달되면 대화 상자에서 사용자에게 계정의 암호를 변경하라는 메시지를 표시합니다.

[in, out] UserName

자격 증명 사용자 이름을 포함하는 null종료된 문자열에 대한 포인터입니다. pszUserName0이 아닌 문자열을 지정하면 사용자에게 암호에 대한 메시지만 표시됩니다. 사용자 이름/암호 이외의 자격 증명의 경우 자격 증명의 마샬링된 형식을 전달할 수 있습니다. 이 문자열은 CredMarshalCredential호출하여 생성됩니다.

이 함수는 사용자가 제공한 이름을 이 버퍼에 쓰고 최대 ulUserNameMaxChars 문자를 복사합니다. 이 형식의 문자열은 CredUIParseUsername 함수를 호출하여 사용자 이름/암호 형식으로 변환할 수 있습니다. 마샬링된 형식의 문자열을 SSP(보안 지원 공급자)에 직접 전달할 수 있습니다.

CREDUI_FLAGS_DO_NOT_PERSIST 플래그를 지정하지 않으면 이 매개 변수에서 반환되는 값은 CredUIParseUsername전달하지 않고 검사, 인쇄 또는 유지해서는 안 되는 폼입니다. CredUIParseUsername 후속 결과는 WNetAddConnection 또는 SSP API와 같은 클라이언트 쪽 인증 API에만 전달될 수 있습니다.

[in] ulUserBufferSize

종료 null 문자를 포함하여 pszUserName 복사할 수 있는 최대 문자 수입니다.

참고 CREDUI_MAX_USERNAME_LENGTH 종료 null 문자를 포함하지 않습니다.
 

[in, out] pszPassword

자격 증명의 암호를 포함하는 null종료된 문자열에 대한 포인터입니다. 0이 아닌 문자열이 pszPassword지정되면 암호 매개 변수가 문자열로 미리 채워집니다.

이 함수는 사용자가 제공한 암호를 이 버퍼에 쓰고 최대 ulPasswordMaxChars 문자를 복사합니다. CREDUI_FLAGS_DO_NOT_PERSIST 플래그를 지정하지 않으면 이 매개 변수에서 반환되는 값은 WNetAddConnection 또는 SSP 함수와 같은 클라이언트 쪽 인증 함수에 전달하는 것 외에는 검사, 인쇄 또는 유지해서는 안 되는 폼입니다.

암호 사용을 마쳤으면 SecureZeroMemory 함수를 호출하여 메모리에서 암호를 지웁 수 있습니다. 암호 보호에 대한 자세한 내용은 암호 처리참조하세요.

[in] ulPasswordBufferSize

종료 null 문자를 포함하여 pszPassword 복사할 수 있는 최대 문자 수입니다.

참고 CREDUI_MAX_PASSWORD_LENGTH 종료 null 문자를 포함하지 않습니다.
 

[in, out] pfSave

Save 메시지의 초기 상태를 지정하고 사용자가 명령 프롬프트에 응답한 후 저장 메시지의 상태를 수신하는 BOOL 대한 포인터입니다. pfSave NULL 않고 CredUIPromptForCredentials NO_ERROR 반환하는 경우 pfSave 저장 메시지의 상태를 반환합니다. CREDUI_FLAGS_PERSIST 플래그를 지정하면 저장 메시지가 표시되지 않지만 "y"로 간주됩니다. CREDUI_FLAGS_DO_NOT_PERSIST 플래그를 지정하고 CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX 지정하지 않으면 저장 메시지가 표시되지 않지만 "n"으로 간주됩니다.

[in] dwFlags

이 함수에 대한 특수 동작을 지정하는 DWORD 값입니다. 이 값은 다음 값 중 0개 이상의 비트또는 조합일 수 있습니다.

의미
CREDUI_FLAGS_ALWAYS_SHOW_UI
자격 증명 관리자의 기존 자격 증명에서 자격 증명을 반환할 수 있는 경우 사용자 인터페이스를 표시합니다. 이 플래그는 CREDUI_FLAGS_GENERIC_CREDENTIALS 지정되고 CREDUI_FLAGS_GENERIC_CREDENTIALS 함께만 사용되는 경우에만 허용됩니다.
CREDUI_FLAGS_DO_NOT_PERSIST
저장 메시지를 표시하거나 자격 증명을 저장하지 마세요.

CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX 전달하여 저장 메시지만 표시하고 결과를 pfSave반환할 수도 있습니다.

CREDUI_FLAGS_EXCLUDE_CERTIFICATES
사용자 이름/암호를 묻는 메시지를 표시합니다. pszUserName 매개 변수를 지정하면 사용자 이름이 생략됩니다. 자격 증명이 유지되면 전달된 사용자 이름을 자격 증명과 함께 저장합니다.
CREDUI_FLAGS_EXPECT_CONFIRMATION
호출자가 CredUIConfirmCredentials 호출하여 반환된 자격 증명이 실제로 유효한지 여부를 확인하도록 지정합니다. 이렇게 하면 유효하지 않은 자격 증명이 자격 증명 관리자에 저장되지 않습니다. CREDUI_FLAGS_DO_NOT_PERSIST 지정하지 않는 한 이 플래그를 지정합니다.
CREDUI_FLAGS_GENERIC_CREDENTIALS
사용자가 입력한 자격 증명을 일반 자격 증명으로 간주합니다.
CREDUI_FLAGS_INCORRECT_PASSWORD
이 플래그는 자동으로 무시합니다.
CREDUI_FLAGS_PERSIST
저장 메시지를 표시하지 않고 사용자가 "y"라고 대답한 것처럼 자격 증명을 저장합니다.
CREDUI_FLAGS_REQUEST_ADMINISTRATOR
이 플래그는 자동으로 무시합니다.
CREDUI_FLAGS_REQUIRE_CERTIFICATE
나중에 사용하도록 예약됨; 이 플래그를 전달하지 않습니다.
CREDUI_FLAGS_REQUIRE_SMARTCARD
스마트 카드를 사용하고 PIN을 묻는 메시지를 표시합니다. 둘 이상의 스마트 카드를 사용할 수 있는 경우 그 중 하나를 선택합니다. pszUserName 매개 변수가 비어 있지 않은 문자열을 전달하는 경우 문자열은 스마트 카드 중 하나에서 인증서와 연결된 UPN과 일치해야 합니다. 문자열이 인증서의 전체 UPN과 일치하거나 문자열이 인증서의 UPN에 있는 at 기호(@)의 왼쪽 부분과 일치하는 경우 UPN이 일치합니다. 일치 항목이 있는 경우 일치하는 스마트 카드가 선택됩니다.
CREDUI_FLAGS_SERVER_CREDENTIAL
이 플래그는 인증이 실패할 경우 대화 상자를 미리 채우기 위해 일치하는 자격 증명을 찾는 경우에만 의미가 있습니다. 이 플래그를 지정하면 와일드카드 자격 증명이 일치하지 않습니다. 자격 증명을 작성할 때는 효과가 없습니다. CredUI는 와일드카드 문자를 포함하는 자격 증명을 만들지 않습니다. RAS 연결을 만들 때와 같이 사용자가 명시적으로 만들거나 프로그래밍 방식으로 생성된 모든 항목이 있습니다.
CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX
사용자가 "y"에 대답하면 저장 메시지를 표시하고 pfSave out 매개 변수에 TRUE 반환하고, 사용자가 "n"으로 대답하면 FALSE . 이 플래그를 사용하려면 CREDUI_FLAGS_DO_NOT_PERSIST 지정해야 합니다.
CREDUI_FLAGS_USERNAME_TARGET_CREDENTIALS
자격 증명은 실행 자격 증명입니다. pszTargetName 매개 변수는 실행 중인 명령 또는 프로그램의 이름을 지정합니다. 프롬프트 용도로만 사용됩니다.

반환 값

반환 값은 DWORD 다음 값 중 하나일 수 있습니다.

묘사
ERROR_INVALID_FLAGS
이 상태는 유효하지 않은 플래그 조합에 대해 반환됩니다.
ERROR_INVALID_PARAMETER
pszTargetName NULL, 빈 문자열 또는 CREDUI_MAX_DOMAIN_LENGTH보다 긴 또는 pUiInfo NULL 않으며 가리키는 CredUI_INFO 구조가 다음 요구 사항 중 하나를 충족하지 못했습니다.
  • cbSize 멤버는 하나여야 합니다.
  • hbmBanner 멤버가 NULL않으면 OBJ_BITMAP 형식이어야 합니다.
  • pszMessageText 멤버가 NULL않으면 CREDUI_MAX_MESSAGE_LENGTH 초과하지 않아야 합니다.
  • pszCaptionText 멤버가 NULL않으면 CREDUI_MAX_CAPTION_LENGTH 초과하지 않아야 합니다.
ERROR_NO_SUCH_LOGON_SESSION
자격 증명 관리자를 사용할 수 없습니다. 일반적으로 이 오류는 CredUICmdLinePromptForCredentials 호출하고 CREDUI_FLAGS_DO_NOT_PERSIST 플래그를 전달하여 처리됩니다.
NO_ERROR
사용자가 확인선택했습니다. pszUserName, pszPasswordpfSave 변수는 앞에서 설명한 값을 반환합니다.

발언

CREDUI_FLAGS_REQUIRE_SMARTCARD, CREDUI_FLAGS_REQUIRE_CERTIFICATE 및 CREDUI_FLAGS_EXCLUDE_CERTIFICATE 플래그는 함께 사용할 수 없습니다.

CREDUI_FLAGS_DO_NOT_PERSIST 지정한 경우 pszTargetName 지정하거나 uiInfo-pszMessageText 및 uiInfo-pszCaption 지정해야 .

CREDUI_FLAG_USERNAME_TARGET_CREDENTIALS 및 CREDUI_FLAGS_GENERIC_CREDENTIALS 플래그는 상호 배타적입니다. 둘 다 지정되지 않은 경우 자격 증명은 도메인 자격 증명입니다.

CREDUI_FLAGS_GENERIC_CREDENTIALS 지정되지 않았거나 CREDUI_FLAGS_COMPLETE_USERNAME 지정한 경우 형식화된 이름은구문이 선택됩니다. 확인된 구문은 credUIParseUserName암시된 것과 동일한 규칙이 사용됨을 의미합니다. 형식화된 이름이 유효하지 않으면 사용자에게 유효한 이름을 입력하라는 메시지가 표시됩니다. 형식화된 이름의 도메인 부분이 누락된 경우 대상 이름에 따라 도메인 부분이 제공됩니다.

CREDUI_FLAGS_GENERIC_CREDENTIALS 지정되고 CREDUI_FLAGS_VALIDATE_USERNAME 지정한 경우 형식화된 이름은 구문이 선택됩니다. 형식화된 이름이 유효하지 않으면 사용자에게 유효한 이름을 입력하라는 메시지가 표시됩니다.

CREDUI_FLAGS_GENERIC_CREDENTIALS 지정되고 CREDUI_FLAGS_COMPLETE_USERNAME 또는 CREDUI_FLAGS_VALIDATE_USERNAME 지정되지 않은 경우 형식화된 이름은 어떤 방식으로든 검사되지 않습니다.

CREDUI_FLAGS_PERSIST 또는 CREDUI_FLAGS_DO_NOT_PERSIST 설정되지 않은 경우 저장 메시지가 표시되고 자격 증명이 저장되는지 여부를 제어합니다.

CREDUI_FLAGS_PROMPT_FOR_SAVE 지정한 경우 pfSave 매개 변수는 NULL않아야 합니다.

CREDUI_FLAGS_REQUIRE_SMARTCARD 및 CREDUI_FLAGS_EXCLUDE_CERTIFICATES 플래그는 상호 배타적입니다. CredUICmdLinePromptForCredentials 스마트 카드 인증서 또는 암호 기반 자격 증명에 대한 프롬프트를 지원합니다. 스마트 카드 인증서가 아니거나 단일 호출에서 둘 다 묻는 인증서를 지원하지 않습니다.

호출 모드

  • 호출자는 대상 리소스에 액세스하고, credui를 호출하고(대상 리소스 및 실패 상태에 대한 설명을 전달), CredUIParseUserName호출하고, 대상 리소스에 다시 액세스한 다음, CredUIConfirmCredentials호출합니다.
  • 호출자는 CREDUI_FLAGS_DO_NOT_PERSIST 전달하여 리소스에 액세스하지 않고 자격 증명을 요청할 수 있습니다.
대상 정보

대상 정보는 액세스할 리소스의 위치에 대한 정보입니다. 리소스에 대한 모든 잠재적 대상 이름 목록은 CredGetTargetInfo호출합니다. CredGetTargetInfo 패키지 중 하나를 사용하여 명명된 대상에 인증할 때 Negotiate, NTLM 또는 Kerberos 인증 패키지에 의해 캐시된 정보를 반환합니다. CredGetTargetInfo 대상에 대해 다음 이름 중 일부 또는 전부를 반환합니다.

  • 컴퓨터의 NetBIOS 서버 이름
  • 컴퓨터의 DNS 서버 이름
  • 컴퓨터가 속한 도메인의 NetBIOS 도메인 이름
  • 컴퓨터가 속한 도메인의 DNS 도메인 이름
  • 컴퓨터가 속한 트리의 DNS 트리 이름
  • 정보를 수집한 패키지의 이름
정보가 대상 컴퓨터에 적용되지 않는 경우 이 정보가 누락될 수 있습니다. 예를 들어 작업 그룹의 구성원인 컴퓨터에는 NetBIOS 도메인 이름이 없습니다. Windows 도메인의 구성원인 컴퓨터에는 DNS 도메인 이름 또는 DNS 트리 이름이 없습니다.

자격 증명은 대상 이름에 따라 자격 증명 관리자에 저장됩니다. 각 대상 이름은 자격 증명 관리자에 이미 저장된 자격 증명과 충돌하지 않고 가능한 한 일반적으로 저장됩니다. 대상 이름으로 자격 증명을 저장하는 중요한 효과는 특정 사용자가 자격 증명 관리자에 저장된 대상당 하나의 자격 증명만 가질 수 있다는 것입니다.

메모

wincred.h 헤더는 CRedUICmdLinePromptForCredentials를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한 규칙을 참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 wincred.h
라이브러리 Credui.lib
DLL Credui.dll

참고 항목

credGetTargetInfo

CredMarshalCredential

credUIConfirmCredentials

credUIParseUserName

CredUI_INFO

WNetAddConnection