Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Dato un certificato, il primo passaggio per decodificare il certificato BLOB consiste nel chiamare CertCreateCertificateContext, passandolo un puntatore al certificato codificato (BLOB). Quando questa funzione viene chiamata, crea un duplicato del certificato codificato, crea una struttura di tipo CERT_CONTEXTe crea una struttura di tipo CERT_INFO. Come illustrato nella figura seguente, un contesto di certificatoinclude il certificato originale BLOB, una struttura C di tipo CERT_CONTEXTe una struttura C di tipo CERT_INFO. Uno dei membri della struttura CERT_CONTEXT punta alla struttura CERT_INFO e un altro al BLOB del certificato codificato.
L'oggetto codificato (un membro dati) viene sempre fornito come input per la funzione CryptDecodeObject e l'output è una struttura C che può avere o meno membri codificati, a seconda di quanto sei avanzato nel processo.
Esiste un altro membro che richiede una decodifica e che è il membro extension. Anche se non è codificata a livello di CERT_INFO, contiene alcune informazioni codificate. Per decodificare queste informazioni, procedere come illustrato nella figura seguente.
Nella struttura CERT_INFO, il membro rgExtension è un puntatore a un array di strutture CERT_EXTENSION. Ogni struttura CERT_EXTENSION ha un membro Value che è in formato codificato e deve essere decodificato. Il membro Value viene passato alla funzione CryptDecodeObject, e quindi l'output della funzione dipende dal valore del membro pszObjId. Si noti che nell'illustrazione vengono generate due strutture diverse, una di tipo CERT_BASIC_CONSTRAINTS_INFO e una di tipo CERT_AUTHORITY_KEY_ID_INFO, a seconda del valore di pszObjId.