CryptDecodeObjectEx-Funktion (wincrypt.h)
Die CryptDecodeObjectEx-Funktion decodiert eine Struktur des Typs, die durch den lpszStructType-Parameter angegeben wird. CryptDecodeObjectEx bietet eine erhebliche Leistungsverbesserung gegenüber CryptDecodeObject , da die Speicherzuordnung mit dem CRYPT_DECODE_ALLOC_FLAG-Wert unterstützt wird.
Syntax
BOOL CryptDecodeObjectEx(
[in] DWORD dwCertEncodingType,
[in] LPCSTR lpszStructType,
[in] const BYTE *pbEncoded,
[in] DWORD cbEncoded,
[in] DWORD dwFlags,
[in] PCRYPT_DECODE_PARA pDecodePara,
[out] void *pvStructInfo,
[in, out] DWORD *pcbStructInfo
);
Parameter
[in] dwCertEncodingType
Der verwendete Codierungstyp. Es ist immer akzeptabel, sowohl den Zertifikat - als auch den Nachrichtencodierungstyp anzugeben, indem sie mit einem bitweisen OR-Vorgang kombiniert werden, wie im folgenden Beispiel gezeigt:
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING
Derzeit definierte Codierungstypen sind:
- X509_ASN_ENCODING
- PKCS_7_ASN_ENCODING
[in] lpszStructType
Ein Zeiger auf einen Objektbezeichner (Object Identifier, OID), der den Strukturtyp definiert. Wenn das hochgeordnete Wort des lpszStructType-Parameters 0 ist, gibt das Wort mit niedriger Reihenfolge den ganzzahligen Bezeichner für den Typ der angegebenen Struktur an. Andernfalls ist dieser Parameter ein langer Zeiger auf eine NULL-Zeichenfolge.
Weitere Informationen zu Objektbezeichnerzeichenfolgen, deren vordefinierten Konstanten und entsprechenden Strukturen finden Sie unter Konstanten für CryptEncodeObject und CryptDecodeObject.
[in] pbEncoded
Ein Zeiger auf die zu decodierten Daten. Die Struktur muss vom typ sein, der von lpszStructType angegeben wird.
[in] cbEncoded
Die Anzahl von Bytes, auf die von pbEncoded verwiesen wird. Dies ist die Anzahl der Zu decodierenden Bytes.
[in] dwFlags
Dieser Parameter kann mindestens eins der folgenden Flags sein. Die Flags können mithilfe eines bitweisen OR-Vorgangs kombiniert werden.
Wert | Bedeutung |
---|---|
|
Die aufgerufene Decodierungsfunktion weist Arbeitsspeicher für die decodierte Struktur zu. Ein Zeiger auf die zugeordnete Struktur wird in pvStructInfo zurückgegeben.
Wenn pDecodePara oder das pfnAlloc-Element von pDecodeParaNULL ist, wird LocalAlloc für die Zuordnung aufgerufen, und LocalFree muss aufgerufen werden, um den Arbeitsspeicher freizugeben. Wenn pDecodePara und das pfnAlloc-Element von pDecodePara nicht NULL sind, wird die Funktion, auf die von pfnAlloc verwiesen wird, für die Zuordnung aufgerufen, und die Funktion, auf die der pfnFree-Member von pDecodePara verweist, muss aufgerufen werden, um den Speicher freizugeben. |
|
Dieses Flag gilt für die Aktivierung der Punycode-Decodierung von Unicode-Zeichenfolgenwerten. Weitere Informationen finden Sie in den Hinweisen.
Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Dieses Flag wird nicht unterstützt. |
|
Dieses Flag kann festgelegt werden, um eine Optimierung ohne Kopie zu aktivieren. Diese Optimierung aktualisiert die pvStructInfo-Elemente so, dass sie auf Inhalte verweisen, die sich in pbEncoded befinden, anstatt eine Kopie des Inhalts zu erstellen und ihn an pvStructInfo anzufügen. Die aufrufende Anwendung muss weniger Arbeitsspeicher zuweisen, und die Ausführung ist schneller, da keine Kopie erstellt wird. Beachten Sie, dass pbEncoded bei der Decodierung ohne Kopie erst freigegeben werden kann, wenn pvStructInfo freigegeben wurde. |
|
Dieses Flag gilt beim Decodieren X509_UNICODE_NAME, X509_UNICODE_NAME_VALUE oder X509_UNICODE_ANY_STRING. Standardmäßig werden CERT_RDN_T61_STRING codierten Werte zunächst als UTF8 decodiert. Wenn bei der UTF8-Decodierung ein Fehler auftritt, wird der Wert als Acht-Bit-Zeichen decodiert. Wenn dieses Flag festgelegt ist, überspringt es den ersten Versuch, den Wert als UTF8 zu decodieren, und decodiert den Wert als Acht-Bit-Zeichen. |
|
Standardmäßig enthält der Inhalt des Puffers, auf den pbEncoded verweist, den signierten Inhalt und die Signatur. Wenn dieses Flag festgelegt ist, enthält der Puffer nur den Zu signierten Inhalt. Dieses Flag gilt für X509_CERT_TO_BE_SIGNED-, X509_CERT_CRL_TO_BE_SIGNED-, X509_CRT_REQUEST_TO_BE_SIGNED- und X509_KEYGEN_REQUEST_TO_BE_SIGNED-Objekte. |
|
Wenn dieses Flag festgelegt ist, werden die OID-Zeichenfolgen in Crypt32.dll zugeordnet und freigegeben, anstatt in die zurückgegebene Datenstruktur kopiert zu werden. Dieses Flag kann festgelegt werden, wenn Crypt32.dll nicht entladen wird, bevor der Aufrufer entladen wird. |
|
Standardmäßig werden die Signaturbytes umgekehrt. Wenn dieses Flag festgelegt ist, wird diese Byteumkehr gehemmt. |
[in] pDecodePara
Ein Zeiger auf eine CRYPT_DECODE_PARA-Struktur , die Decodierungsabsatzinformationen enthält. Wenn pDecodePara auf NULL festgelegt ist, werden LocalAlloc und LocalFree verwendet, um Arbeitsspeicher zuzuweisen und freizugeben. Wenn pDecodePara auf eine CRYPT_DECODE_PARA-Struktur verweist, übergibt diese Struktur Rückruffunktionen, um Arbeitsspeicher zuzuweisen und freizugeben. Diese Rückruffunktionen überschreiben die Standardspeicherbelegung von LocalAlloc und LocalFree.
[out] pvStructInfo
Wenn die dwFlags-CRYPT_ENCODE_ALLOC_FLAG festgelegt ist, ist pvStructInfo kein Zeiger auf einen Puffer, sondern die Adresse eines Zeigers auf den Puffer. Da arbeitsspeicher in der Funktion zugeordnet ist und der Zeiger in *pvStructInfo gespeichert wird, darf pvStructInfo niemals NULL sein.
Wenn CRYPT_ENCODE_ALLOC_FLAG nicht festgelegt ist, ist pvStructInfo ein Zeiger auf einen Puffer, der die decodierte Struktur empfängt. Wenn der angegebene Puffer nicht groß genug ist, um die decodierte Struktur zu empfangen, legt die Funktion den ERROR_MORE_DATA Code fest und speichert die erforderliche Puffergröße in Bytes in der Variablen, auf die von pcbStructInfo verwiesen wird.
Dieser Parameter kann NULL sein, um die Größe dieser Informationen für Speicherzuordnungszwecke abzurufen. Weitere Informationen finden Sie unter Abrufen von Daten unbekannter Länge.
[in, out] pcbStructInfo
Ein Zeiger auf eine DWORD-Variable , die die Größe des Puffers in Bytes enthält, auf den der parameter pvStructInfo verweist. Wenn die Funktion zurückgibt, enthält der DWORD-Wert die Anzahl der im Puffer gespeicherten Bytes. Die Größe in der Variablen, auf die von pcbStructInfo verwiesen wird, kann eine Größe angeben, die größer als die decodierte Struktur ist, da die decodierte Struktur Zeiger auf Hilfsdaten enthalten kann. Diese Größe ist die Summe der Größe, die von der decodierten Struktur und den Hilfsdaten benötigt wird.
Wenn CRYPT_DECODE_ALLOC_FLAG festgelegt ist, wird der Anfangswert von *pcbStructInfo nicht von der Funktion verwendet, und bei der Rückgabe enthält *pcbStructInfo die Anzahl der für pvStructInfo zugewiesenen Bytes.
Rückgabewert
Wenn die Funktion erfolgreich ist, gibt die Funktion nonzero (TRUE) zurück.
Wenn die Funktion fehlschlägt, gibt sie null (FALSE) zurück. Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen zu erhalten. In der folgenden Tabelle sind einige mögliche Fehlercodes aufgeführt.
Rückgabecode | Beschreibung |
---|---|
|
Beim Decodieren ist ein Fehler aufgetreten. |
|
Eine Decodierungsfunktion konnte für die angegebenen dwCertEncodingType und lpszStructType nicht gefunden werden. |
|
Wenn der vom parameter pvStructInfo angegebene Puffer nicht groß genug ist, um die zurückgegebenen Daten aufzunehmen, legt die Funktion den ERROR_MORE_DATA Code fest und speichert die erforderliche Puffergröße in Bytes in der Variablen, auf die von pcbStructInfo verwiesen wird. |
Wenn die Funktion fehlschlägt, gibt GetLastError möglicherweise einen ASN.1-Codierungs-/Decodierungsfehler ( Abstract Syntax Notation One ) zurück. Informationen zu diesen Fehlern finden Sie unter ASN.1 Encoding/Decoding Return Values.
Hinweise
Beim Codieren eines kryptografischen Objekts mit der bevorzugten CryptEncodeObjectEx-Funktion ist das beendende NULL-Zeichen enthalten. Beim Decodieren mit der bevorzugten CryptDecodeObjectEx-Funktion wird das beendende NULL-Zeichen nicht beibehalten.
Jede Konstante in der folgenden Liste verfügt über einen zugeordneten Strukturtyp, auf den der parameter pvStructInfo verweist. Die Struktur, auf die direkt oder indirekt verwiesen wird, weist einen Verweis auf eine CERT_ALT_NAME_ENTRY Struktur auf.
- X509_ALTERNATE_NAME
- szOID_AUTHORITY_INFO_ACCESS
- X509_AUTHORITY_INFO_ACCESS
- X509_AUTHORITY_KEY_ID2
- szOID_AUTHORITY_KEY_IDENTIFIER2
- szOID_CRL_DIST_POINTS
- X509_CRL_DIST_POINTS
- szOID_CROSS_CERT_DIST_POINTS
- X509_CROSS_CERT_DIST_POINTS
- szOID_ISSUER_ALT_NAME
- szOID_ISSUER_ALT_NAME2
- szOID_ISSUING_DIST_POINT
- X509_ISSUING_DIST_POINT
- X509_NAME_CONSTRAINTS
- szOID_NAME_CONSTRAINTS
- szOID_NEXT_UPDATE_LOCATION
- OCSP_REQUEST
- zOID_SUBJECT_ALT_NAME
- szOID_SUBJECT_ALT_NAME2
dwAltNameChoice | Wirkung |
---|---|
CERT_ALT_NAME_DNS_NAME | Wenn der Hostname eine Punycode-codierte IA5String-Zeichenfolge enthält, wird er in die Unicode-Entsprechung konvertiert. |
CERT_ALT_NAME_RFC822_NAME | Wenn der Hostnamenteil der E-Mail-Adresse eine Punycode-codierte IA5String-Zeichenfolge enthält, wird er in seine Unicode-Entsprechung konvertiert. |
CERT_ALT_NAME_URL | Der URI wird decodiert. Wenn der Serverhostname des URI eine Punycode-codierte IA5String-Zeichenfolge enthält, wird die Hostnamenzeichenfolge mit der Unicode-Entsprechung decodiert. |
Jede Konstante in der folgenden Liste verfügt über einen zugeordneten Strukturtyp, auf den der parameter pvStructInfo verweist. Die Struktur, auf die direkt oder indirekt verwiesen wird, weist einen Verweis auf eine CERT_HASHED_URL-Struktur auf.
- szOID_LOGOTYPE_EXT
- X509_LOGOTYPE_EXT
- szOID_BIOMETRIC_EXT
- X509_BIOMETRIC_EXT
Jede X509_UNICODE_NAME Konstante in der folgenden Liste verfügt über einen zugeordneten Strukturtyp, auf den der parameter pvStructInfo verweist.
- X509_UNICODE_NAME
Beispiele
Ein Beispiel, das diese Funktion verwendet, finden Sie unter Beispiel-C-Programm: ASN.1-Codierung und -Decodierung.
Anforderungen
Unterstützte Mindestversion (Client) | Windows XP [Desktop-Apps | UWP-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [Desktop-Apps | UWP-Apps] |
Zielplattform | Windows |
Kopfzeile | wincrypt.h |
Bibliothek | Crypt32.lib |
DLL | Crypt32.dll |