CryptDecodeObject-Funktion (wincrypt.h)
Die CryptDecodeObject-Funktion decodiert eine Struktur des Typs, der durch den lpszStructType-Parameter angegeben wird. Die Verwendung von CryptDecodeObjectEx wird als API empfohlen, die dieselbe Funktion mit erheblichen Leistungsverbesserungen ausführt.
Syntax
BOOL CryptDecodeObject(
[in] DWORD dwCertEncodingType,
[in] LPCSTR lpszStructType,
[in] const BYTE *pbEncoded,
[in] DWORD cbEncoded,
[in] DWORD dwFlags,
[out] void *pvStructInfo,
[in, out] DWORD *pcbStructInfo
);
Parameter
[in] dwCertEncodingType
Verwendeter 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 eine OID, die den Strukturtyp definiert. Wenn das Wort mit hoher Ordnung des lpszStructType-Parameters null ist, gibt das Wort mit niedriger Ordnung den ganzzahligen Bezeichner für den Typ der angegebenen Struktur an. Andernfalls ist dieser Parameter ein langer Zeiger auf eine Zeichenfolge mit NULL-Beendigung.
Weitere Informationen zu Objektbezeichnerzeichenfolgen, ihren vordefinierten Konstanten und entsprechenden Strukturen finden Sie unter Konstanten für CryptEncodeObject und CryptDecodeObject.
[in] pbEncoded
Ein Zeiger auf die codierte Struktur, die decodiert werden soll.
[in] cbEncoded
Anzahl der Bytes, auf die pbEncoded verweist.
[in] dwFlags
Die folgenden Flags sind definiert. Sie können mit einer bitweisen OR-Operation kombiniert werden.
[out] pvStructInfo
Ein Zeiger auf einen Puffer zum Empfangen der decodierten Struktur. 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 die Speicherbelegung abzurufen. Weitere Informationen finden Sie unter Abrufen von Daten mit unbekannter Länge.
[in, out] pcbStructInfo
Ein Zeiger auf einen DWORD-Wert , der die Größe des Puffers in Bytes angibt, auf den der parameter pvStructInfo verweist. Wenn die Funktion zurückgibt, enthält dieser DWORD-Wert die Größe der decodierten Daten, die in pvStructInfo kopiert wurden. Die in der Variable enthaltene Größe, 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 andere Strukturen enthalten kann. Diese Größe ist die Summe der Größe, die von der decodierten Struktur und anderen Strukturen benötigt wird, auf die verwiesen wird.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich null (TRUE).
Wenn die Funktion fehlschlägt, ist der Rückgabewert 0 (FALSE). Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen zu erhalten. Einige mögliche Fehlercodes sind in der folgenden Tabelle aufgeführt.
Rückgabecode | Beschreibung |
---|---|
|
Fehler beim Decodieren. |
|
Für den angegebenen dwCertEncodingType und lpszStructType wurde keine Decodierungsfunktion gefunden. |
|
Wenn der vom pvStructInfo-Parameter angegebene Puffer nicht groß genug ist, um die zurückgegebenen Daten zu speichern, legt die Funktion den ERROR_MORE_DATA Code fest und speichert die erforderliche Puffergröße in Byte 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-Rückgabewerte für Codierung/Decodierung.
Hinweise
Beim Codieren eines kryptografischen Objekts mit der bevorzugten CryptEncodeObjectEx-Funktion wird das abschließende NULL-Zeichen eingeschlossen. Beim Decodieren mit der bevorzugten CryptDecodeObjectEx-Funktion wird das abschließende NULL-Zeichen nicht beibehalten.
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 |