CryptQueryObject 함수(wincrypt.h)

중요 이 API는 더 이상 사용되지 않습니다. 신규 및 기존 소프트웨어는 암호화 차세대 API 사용을 시작해야 합니다. Microsoft는 이후 릴리스에서 이 API를 제거할 수 있습니다.
 
CryptQueryObject 함수는 인증서, 인증서 해지 목록 또는 인증서신뢰 목록과 같은 암호화 API 개체의 내용에 대한 정보를 검색합니다. 개체는 메모리의 구조체에 있거나 파일에 포함될 수 있습니다.

구문

BOOL CryptQueryObject(
  [in]  DWORD      dwObjectType,
  [in]  const void *pvObject,
  [in]  DWORD      dwExpectedContentTypeFlags,
  [in]  DWORD      dwExpectedFormatTypeFlags,
  [in]  DWORD      dwFlags,
  [out] DWORD      *pdwMsgAndCertEncodingType,
  [out] DWORD      *pdwContentType,
  [out] DWORD      *pdwFormatType,
  [out] HCERTSTORE *phCertStore,
  [out] HCRYPTMSG  *phMsg,
  [out] const void **ppvContext
);

매개 변수

[in] dwObjectType

쿼리할 개체의 형식을 나타냅니다. 다음 값 중 하나여야 합니다.

의미
CERT_QUERY_OBJECT_BLOB
개체는 메모리의 구조체에 저장됩니다.
CERT_QUERY_OBJECT_FILE
개체가 파일에 저장됩니다.

[in] pvObject

쿼리할 개체에 대한 포인터입니다. 데이터 포인터의 형식은 dwObjectType 매개 변수의 내용에 따라 달라집니다.

dwObjectType 의미
CERT_QUERY_OBJECT_BLOB
이 매개 변수는 쿼리할 개체를 포함하는 CERT_BLOB 또는 유사한 구조체에 대한 포인터입니다.
CERT_QUERY_OBJECT_FILE
이 매개 변수는 쿼리할 파일의 경로와 이름을 포함하는 null로 끝나는 유니코드 문자열에 대한 포인터입니다.

[in] dwExpectedContentTypeFlags

예상 콘텐츠 형식을 나타냅니다. 다음 값 중 하나일 수 있습니다.

의미
CERT_QUERY_CONTENT_FLAG_ALL
콘텐츠는 모든 형식일 수 있습니다. 여기에는 CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD 플래그가 포함되지 않습니다.

이 플래그를 지정하면 이 함수는 적절한 콘텐츠 형식을 찾거나 콘텐츠 형식이 소진될 때까지 다른 콘텐츠 형식을 시도하면서 개체에 대한 정보를 가져오려고 시도합니다. 이는 분명히 비효율적이므로 콘텐츠 형식을 알 수 없는 경우에만 이 플래그를 사용해야 합니다.

CERT_QUERY_CONTENT_FLAG_CERT
콘텐츠는 단일 인증서입니다.
CERT_QUERY_CONTENT_FLAG_CERT_PAIR
콘텐츠는 ASN.1( 추상 구문 표기법 1)으로 인코딩된 X509_CERT_PAIR(정방향, 역방향 또는 정방향 및 역방향 교차 인증서를 포함하는 인코딩된 인증서 쌍)입니다.
CERT_QUERY_CONTENT_FLAG_CRL
콘텐츠는 단일 CRL입니다.
CERT_QUERY_CONTENT_FLAG_CTL
콘텐츠는 단일 CTL입니다.
CERT_QUERY_CONTENT_FLAG_PFX
콘텐츠는 PFX(PKCS #12) 패킷이지만 이 함수에 의해 로드되지 않습니다. PFXImportCertStore 함수를 사용하여 저장소에 로드할 수 있습니다.
CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD
콘텐츠는 PFX(PKCS #12) 패킷이며 다음 메모에 지정된 조건에 따라 이 함수에 의해 로드됩니다.
참고  

PFX 패킷에 빈 문자열 또는 NULL이 아닌 포함된 암호가 포함되어 있고 호출 사용자를 포함하는 AD(Active Directory) 보안 주체로 암호가 보호되지 않은 경우 이 함수는 PFX 패킷의 암호를 해독할 수 없습니다. 그러나 PFX 패킷을 만들 때 사용된 암호가 AD 보안 주체에 암호화되고 사용자가 해당 보안 주체의 일부로 암호를 해독할 수 있는 권한이 있는 경우 패킷의 암호를 해독할 수 있습니다. 자세한 내용은 pvPara 매개 변수 및 PFXExportCertStoreEx 함수의 PKCS12_PROTECT_TO_DOMAIN_SIDS 플래그를 참조하세요.

Windows 8 및 Windows Server 2012 시작하여 AD 보안 주체에 대한 PFX 암호를 보호할 수 있습니다.

 
Windows Server 2003 및 Windows XP: 이 값은 지원되지 않습니다.
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED
콘텐츠는 PKCS #7 서명된 메시지입니다.
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED
콘텐츠는 포함된 PKCS #7 서명된 메시지입니다.
CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED
콘텐츠는 PKCS #7 서명되지 않은 메시지입니다.
CERT_QUERY_CONTENT_FLAG_PKCS10
콘텐츠는 PKCS #10 메시지입니다.
CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT
콘텐츠는 직렬화된 단일 인증서입니다.
CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL
콘텐츠는 직렬화된 단일 CRL입니다.
CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL
콘텐츠가 직렬화된 단일 CTL입니다.
CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE
콘텐츠는 직렬화된 저장소입니다.

[in] dwExpectedFormatTypeFlags

반환된 형식의 예상 형식을 나타냅니다. 다음 값 중 하나일 수 있습니다.

의미
CERT_QUERY_FORMAT_FLAG_ALL
콘텐츠는 모든 형식으로 반환할 수 있습니다.
CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED
콘텐츠는 "{ASN}" 접두사를 사용하여 ASCII 16진수로 인코딩된 형식으로 반환되어야 합니다.
CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED
콘텐츠는 Base64로 인코딩된 형식으로 반환되어야 합니다.
CERT_QUERY_FORMAT_FLAG_BINARY
콘텐츠는 이진 형식으로 반환되어야 합니다.

[in] dwFlags

이 매개 변수는 나중에 사용할 수 있도록 예약되어 있으며 0으로 설정해야 합니다.

[out] pdwMsgAndCertEncodingType

메시지에 사용되는 인코딩 유형을 수신하는 DWORD 값에 대한 포인터입니다. 이 정보가 필요하지 않은 경우 이 매개 변수를 NULL로 설정합니다.

이 매개 변수는 다음 값 중 하나 이상의 조합을 받을 수 있습니다.

의미
PKCS_7_ASN_ENCODING
65536 (0x10000)
PKCS 7 메시지 인코딩을 지정합니다.
X509_ASN_ENCODING
1(0x1)
X.509 인증서 인코딩을 지정합니다.

[out] pdwContentType

콘텐츠의 실제 형식을 수신하는 DWORD 값에 대한 포인터입니다. 이 정보가 필요하지 않은 경우 이 매개 변수를 NULL로 설정합니다. 반환된 콘텐츠 형식은 다음 값 중 하나일 수 있습니다.

의미
CERT_QUERY_CONTENT_CERT
콘텐츠는 단일 인증서입니다.
CERT_QUERY_CONTENT_CERT_PAIR
콘텐츠는 ASN.1로 인코딩된 X509_CERT_pair.
CERT_QUERY_CONTENT_CRL
콘텐츠는 단일 CRL입니다.
CERT_QUERY_CONTENT_CTL
콘텐츠는 단일 CTL입니다.
CERT_QUERY_CONTENT_PFX
콘텐츠는 PFX(PKCS #12) 패킷입니다. 이 함수는 개체가 PKCS #12 패킷인지만 확인합니다. PKCS #12 패킷은 인증서 저장소에 로드되지 않습니다.
CERT_QUERY_CONTENT_PFX_AND_LOAD
콘텐츠는 PFX(PKCS #12) 패킷이며 인증서 저장소에 로드되었습니다.

Windows Server 2003 및 Windows XP: 이 값은 지원되지 않습니다.

CERT_QUERY_CONTENT_PKCS7_SIGNED
콘텐츠는 PKCS #7 서명된 메시지입니다.
CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED
콘텐츠는 포함된 PKCS #7 서명된 메시지입니다.
CERT_QUERY_CONTENT_PKCS7_UNSIGNED
콘텐츠는 PKCS #7 서명되지 않은 메시지입니다.
CERT_QUERY_CONTENT_PKCS10
콘텐츠는 PKCS #10 메시지입니다.
CERT_QUERY_CONTENT_SERIALIZED_CERT
콘텐츠는 직렬화된 단일 인증서입니다.
CERT_QUERY_CONTENT_SERIALIZED_CRL
콘텐츠는 직렬화된 단일 CRL입니다.
CERT_QUERY_CONTENT_SERIALIZED_CTL
콘텐츠는 직렬화된 단일 CTL입니다.
CERT_QUERY_CONTENT_SERIALIZED_STORE
콘텐츠는 직렬화된 저장소입니다.

[out] pdwFormatType

콘텐츠의 실제 형식 형식을 수신하는 DWORD 값에 대한 포인터입니다. 이 정보가 필요하지 않은 경우 이 매개 변수를 NULL로 설정합니다. 반환된 형식 형식은 다음 값 중 하나일 수 있습니다.

의미
CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED
콘텐츠는 "{ASN}" 접두사를 사용하여 ASCII 16진수로 인코딩된 형식입니다.
CERT_QUERY_FORMAT_BASE64_ENCODED
콘텐츠는 Base64로 인코딩된 형식입니다.
CERT_QUERY_FORMAT_BINARY
콘텐츠는 이진 형식입니다.

[out] phCertStore

개체의 모든 인증서, CRL 및 CTL을 포함하는 인증서 저장소에 대한 핸들을 수신하는 HCERTSTORE 값에 대한 포인터입니다.

이 매개 변수는 dwContentType 매개 변수가 다음 값 중 하나를 받을 때만 인증서 저장소 핸들을 받습니다. 이 매개 변수는 다른 모든 콘텐츠 형식에 대해 NULL 을 받습니다.

CERT_QUERY_CONTENT_CERT

CERT_QUERY_CONTENT_CRL

CERT_QUERY_CONTENT_CTL

CERT_QUERY_CONTENT_PFX_AND_LOAD

CERT_QUERY_CONTENT_PKCS7_SIGNED

CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED

CERT_QUERY_CONTENT_SERIALIZED_CERT

CERT_QUERY_CONTENT_SERIALIZED_CRL

CERT_QUERY_CONTENT_SERIALIZED_CTL

CERT_QUERY_CONTENT_SERIALIZED_STORE

핸들 사용을 마치면 핸들을 CertCloseStore 함수에 전달하여 해제합니다.

이 정보가 필요하지 않은 경우 이 매개 변수를 NULL로 설정합니다.

[out] phMsg

열린 메시지의 핸들을 수신하는 HCRYPTMSG 값에 대한 포인터입니다.

이 매개 변수는 dwContentType 매개 변수가 다음 값 중 하나를 받을 때만 메시지 핸들을 받습니다. 이 매개 변수는 다른 모든 콘텐츠 형식에 대해 NULL 을 받습니다.

CERT_QUERY_CONTENT_PKCS7_SIGNED

CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED

CERT_QUERY_CONTENT_PKCS7_UNSIGNED

핸들 사용을 마쳤으면 핸들을 CryptMsgClose 함수에 전달하여 해제합니다.

이 정보가 필요하지 않은 경우 이 매개 변수를 NULL로 설정합니다.

[out] ppvContext

개체에 대한 추가 정보를 수신하는 포인터에 대한 포인터입니다.

이 데이터의 형식은 dwContentType 매개 변수에서 받은 값에 따라 달라집니다. 다음 표에서는 지정된 dwContentType 값에 대한 데이터 형식을 나열합니다.

dwContentType 의미
CERT_QUERY_CONTENT_CERT
이 매개 변수는 CERT_CONTEXT 구조체에 대한 포인터를 받습니다. 구조체 사용을 마치면 이 포인터를 CertFreeCertificateContext 함수에 전달하여 해제합니다.
CERT_QUERY_CONTENT_CRL
이 매개 변수는 CRL_CONTEXT 구조체에 대한 포인터를 받습니다. 구조체 사용을 마치면 이 포인터를 CertFreeCRLContext 함수에 전달하여 해제합니다.
CERT_QUERY_CONTENT_CTL
이 매개 변수는 CTL_CONTEXT 구조체에 대한 포인터를 받습니다. 구조체 사용을 마치면 이 포인터를 CertFreeCTLContext 함수에 전달하여 해제합니다.
CERT_QUERY_CONTENT_SERIALIZED_CERT
이 매개 변수는 CERT_CONTEXT 구조체에 대한 포인터를 받습니다. 구조체 사용을 마치면 이 포인터를 CertFreeCertificateContext 함수에 전달하여 해제합니다.
CERT_QUERY_CONTENT_SERIALIZED_CRL
이 매개 변수는 CRL_CONTEXT 구조체에 대한 포인터를 받습니다. 구조체 사용을 마치면 이 포인터를 CertFreeCRLContext 함수에 전달하여 해제합니다.
CERT_QUERY_CONTENT_SERIALIZED_CTL
이 매개 변수는 CTL_CONTEXT 구조체에 대한 포인터를 받습니다. 구조체 사용을 마치면 이 포인터를 CertFreeCTLContext 함수에 전달하여 해제합니다.
 

이 정보가 필요하지 않은 경우 이 매개 변수를 NULL로 설정합니다.

반환 값

함수가 성공하면 함수는 0이 아닌 값을 반환합니다.

함수가 실패하면 0을 반환합니다. 확장된 오류 정보는 GetLastError를 호출합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 wincrypt.h
라이브러리 Crypt32.lib
DLL Crypt32.dll

추가 정보

데이터 관리 함수