CryptMsgGetParam 関数 (wincrypt.h)
CryptMsgGetParam 関数は、暗号化メッセージがエンコードまたはデコードされた後に、メッセージ パラメーターを取得します。 この関数は、最後の CryptMsgUpdate 呼び出しの後に呼び出されます。
構文
BOOL CryptMsgGetParam(
[in] HCRYPTMSG hCryptMsg,
[in] DWORD dwParamType,
[in] DWORD dwIndex,
[out] void *pvData,
[in, out] DWORD *pcbData
);
パラメーター
[in] hCryptMsg
暗号化メッセージのハンドル。
[in] dwParamType
取得するデータのパラメーター型を示します。 取得するデータの種類によって、 pvData に使用する構造体の種類が決まります。
エンコードされたメッセージの場合、 dwParamTypeのCMSG_BARE_CONTENT、CMSG_ENCODE_SIGNER、CMSG_CONTENT_PARAM、CMSG_COMPUTED_HASH_PARAMのみが有効です。
値 | 説明 |
---|---|
|
pvData データ型: DWORD へのポインター
SIGNED または ENVELOPED メッセージ内の属性証明書の数を返します。 |
|
pvData データ型: BYTE 配列へのポインター 属性証明書を取得します。 すべての属性証明書を取得するには、 CryptMsgGetParam varying dwIndex を 0 に設定し、属性の数から 1 を引いた値を呼び出します。 |
|
pvData データ型: BYTE 配列へのポインター CONTENT_INFO構造体の外部レイヤーを使用せずに、エンコードされた暗号化メッセージのエンコードされたコンテンツを取得します。 つまり、PKCS #7 で定義された ContentInfo.content フィールドのエンコードのみが返されます。 |
|
pvData データ型: DWORD へのポインター
受信した SIGNED または ENVELOPED メッセージ内の証明書の数を返します。 |
|
pvData データ型: BYTE 配列へのポインター 署名者の証明書を返します。 署名者のすべての証明書を取得するには、 CryptMsgGetParam を呼び出します。 dwIndex は 0 から使用可能な証明書の数から 1 を引いた値まで変化します。 |
|
pvData データ型: BYTE 配列へのポインター メッセージ内のデータの計算されたハッシュを返します。 この型は、エンコードとデコードの両方に適用できます。 |
|
pvData データ型: BYTE 配列へのポインター エンコードするために開かれたメッセージから PKCS #7 メッセージ全体を返します。 デコードするために開かれたメッセージの内部コンテンツを取得します。 メッセージがエンベロープされ、内部の型がデータであり、メッセージの暗号化を解除するために CryptMsgControl が呼び出された場合、復号化されたコンテンツが返されます。 内部型がデータでない場合は、さらにデコードを必要とするエンコードされた BLOB が返されます。 メッセージがエンベロープ化されておらず、内部コンテンツが DATA の場合、返されるデータは内部コンテンツのオクテットです。 この型は、エンコードとデコードの両方に適用できます。 デコードの場合、型がCMSG_DATA場合は、コンテンツのオクテットが返されます。それ以外の場合は、エンコードされた内部コンテンツが返されます。 |
|
pvData データ型: DWORD へのポインター
受信したメッセージ、SIGNED メッセージ、または ENVELOPED メッセージ内の CRL の数を返します。 |
|
pvData データ型: BYTE 配列へのポインター CRL を返します。 すべての CRL を取得するには、 CryptMsgGetParam を呼び出します。 dwIndex は 0 から使用可能な CRL の数から 1 を引いた値まで変化します。 |
|
pvData データ型: BYTE 配列へのポインター 既にエンコードされているメッセージの内容を変更します。 メッセージは、最初に CryptMsgOpenToDecode を呼び出してデコードする必要があります。 その後、メッセージの変更は、 CryptMsgControl、 CryptMsgCountersign、または CryptMsgCountersignEncoded の呼び出しによって行われます。 その後、メッセージは CryptMsgGetParam の呼び出しで再度エンコードされ、CMSG_ENCODED_MESSAGEを指定して、加えられた変更を反映する新しいエンコードを取得します。 これは、たとえば、メッセージにタイムスタンプ属性を追加するために使用できます。 |
|
pvData データ型: BYTE 配列へのポインター メッセージ署名者のエンコードされたCMSG_SIGNER_INFO署名者情報を返します。 |
|
pvData データ型: BYTE 配列へのポインター 署名の暗号化されたハッシュを返します。 通常、タイム スタンプの実行に使用されます。 |
|
pvData データ型: CRYPT_ALGORITHM_IDENTIFIER構造体の BYTE 配列へのポインター。
メッセージの暗号化に使用される暗号化アルゴリズムを返します。 |
|
pvData データ型: CRYPT_ALGORITHM_IDENTIFIER構造体の BYTE 配列へのポインター。
ENVELOPED メッセージの暗号化に使用される暗号化アルゴリズムを返します。 |
|
pvData データ型: CRYPT_ALGORITHM_IDENTIFIER構造体の BYTE 配列へのポインター。
作成時にメッセージをハッシュするために使用されるハッシュ アルゴリズムを返します。 |
|
pvData データ型: BYTE 配列へのポインター 作成時にメッセージに格納されているハッシュ値を返します。 |
|
pvData データ型: NULL で終わるオブジェクト識別子 (OID) 文字列を受け取る BYTE 配列へのポインター。
受信したメッセージの内部コンテンツ タイプを返します。 この型は、DATA 型のメッセージには適用されません。 |
|
pvData データ型: DWORD へのポインター
ENVELOPED で受信したメッセージのキー トランスポート受信者の数を返します。 |
|
pvData データ型: DWORD へのポインター
キー契約とメール リストの受信者を含むすべてのメッセージ受信者の合計数を返します。 |
|
pvData データ型: DWORD へのポインター
ENVELOPED メッセージの暗号化を解除するために使用されるキー トランスポート受信者のインデックスを返します。 この値は、メッセージの暗号化が解除された後にのみ使用できます。 |
|
pvData データ型: DWORD へのポインター
ENVELOPED メッセージの暗号化を解除するために使用されるキー トランスポート、キー アグリーメント、またはメール リストの受信者のインデックスを返します。 |
|
pvData データ型: DWORD へのポインター
ENVELOPED メッセージの暗号化を解除するために使用されるキー アグリーメント受信者の暗号化キーのインデックスを返します。 |
|
pvData データ型: CERT_INFO構造体を受け取る BYTE 配列へのポインター。
キー トランスポート メッセージの受信者に関する証明書情報を返します。 すべてのキー トランスポート メッセージの受信者に関する証明書情報を取得するには、 CryptMsgGetParam を繰り返し呼び出し、 dwIndex を 0 から受信者の数から 1 を引いた値に変更します。 返される CERT_INFO 構造体の Issuer、SerialNumber、PublicKeyAlgorithm メンバーのみが使用でき、有効です。 |
|
pvData データ型: CMSG_CMS_RECIPIENT_INFO構造体を受け取る BYTE 配列へのポインター。
キー トランスポート、キー契約、またはメール リストの受信者に関する情報を返します。 これは、キー トランスポート メッセージの受信者に限定されません。 メッセージのすべての受信者に関する情報を取得するには、 CryptMsgGetParam を繰り返し呼び出し、 dwIndex を 0 から受信者の数から 1 を引いた値に変更します。 |
|
pvData データ型: CRYPT_ATTRIBUTES構造体を受け取る BYTE 配列へのポインター。
メッセージ署名者の認証済み属性を返します。 指定した署名者の認証済み属性を取得するには、その署名者のインデックスと等しい dwIndex を使用して CryptMsgGetParam を呼び出します。 |
|
pvData データ型: CERT_INFO構造体を受け取る BYTE 配列へのポインター。
署名者の証明書を識別するために必要なメッセージ署名者に関する情報を返します。 証明書の発行者と SerialNumber を使用して、取得する証明書を一意に識別できます。 すべての署名者の情報を取得するには、dwIndex を 0 から 1 を引いた数まで、CryptMsgGetParam を繰り返し呼び出します。 返される CERT_INFO 構造体の Issuer フィールドと SerialNumber フィールドにのみ、使用可能な有効なデータが含まれています。 |
|
pvData データ型: CERT_ID構造体を受け取る BYTE 配列へのポインター。
署名者の公開キーを識別するために必要なメッセージ署名者に関する情報を返します。 証明書の発行者とシリアル番号、KeyID、または HashId を指定できます。 すべての署名者の情報を取得するには、dwIndex を 0 から 1 を引いた数まで CryptMsgGetParam を呼び出します。 |
|
pvData データ型: DWORD へのポインター
受信した SIGNED メッセージの署名者の数を返します。 |
|
pvData データ型: CRYPT_ALGORITHM_IDENTIFIER構造体を受け取る BYTE 配列へのポインター。
メッセージの署名者によって使用されるハッシュ アルゴリズムを返します。 指定した署名者のハッシュ アルゴリズムを取得するには、dwIndex がその署名者のインデックスと等しい CryptMsgGetParam を呼び出します。 |
|
pvData データ型: CMSG_SIGNER_INFO構造体を受け取る BYTE 配列へのポインター。
メッセージ署名者に関する情報を返します。 これには、署名者の証明書の発行者とシリアル番号、署名者の証明書の認証された属性と認証されていない属性が含まれます。 メッセージのすべての署名者に関する署名者情報を取得するには、dwIndex を 0 から 1 を引いた数に変更して CryptMsgGetParam を呼び出します。 |
|
pvData データ型: CMSG_CMS_SIGNER_INFO構造体を受け取る BYTE 配列へのポインター。
メッセージ署名者に関する情報を返します。 これには、signerId と認証済み属性と認証されていない属性が含まれます。 メッセージのすべての署名者に関する署名者情報を取得するには、dwIndex を 0 から 1 を引いた数に変更して CryptMsgGetParam を呼び出します。 |
|
pvData データ型: CRYPT_ATTRIBUTES構造体を受け取る BYTE 配列へのポインター。
メッセージ署名者の認証されていない属性を返します。 指定した署名者の認証されていない属性を取得するには、その署名者のインデックスと等しい dwIndex で CryptMsgGetParam を呼び出します。 |
|
pvData データ型: DWORD へのポインター
不明な型のデコードされたメッセージのメッセージの種類を返します。 取得したメッセージの種類をサポートされている型と比較して、処理を続行できるかどうかを判断できます。 サポートされているメッセージの種類については、CryptMsgOpenToDecode の dwMessageType パラメーターを参照してください。 |
|
pvData データ型: CMSG_ATTR構造体を受け取る BYTE 配列へのポインター。
エンベロープ メッセージ内の保護されていない属性を返します。 |
|
pvData データ型: DWORD へのポインター
デコードされたメッセージのバージョンを返します。 詳細については、「解説」セクションの表を参照してください。 |
[in] dwIndex
取得するパラメーターのインデックス (該当する場合)。 パラメーターが取得されていない場合、このパラメーターは無視され、0 に設定されます。
[out] pvData
取得されたデータを受け取るバッファーへのポインター。 このデータの形式は、 dwParamType パラメーターの値によって異なります。
このパラメーターは、メモリ割り当てのためにこの情報のサイズを設定するために NULL にすることができます 。 詳細については、「 不明な長さのデータの取得」を参照してください。
このバッファーで返されるデータを処理する場合、アプリケーションは返されるデータの実際のサイズを使用する必要があります。 実際のサイズは、入力時に指定されたバッファーのサイズよりも少し小さくすることができます。 (入力では、バッファー サイズは通常、可能な最大の出力データがバッファーに収まるように十分な大きさで指定されます)。出力時に、このパラメーターが指す変数が更新され、バッファーにコピーされたデータの実際のサイズが反映されます。
[in, out] pcbData
pvData パラメーターによって指されるバッファーのサイズをバイト単位で指定する変数へのポインター。 関数が戻るとき、 pcbData パラメーターによって指される変数には、バッファーに格納されているバイト数が含まれます。
戻り値
関数が成功した場合、戻り値は 0 以外 (TRUE) になります。
関数が失敗した場合、戻り値は 0 (FALSE) になります。 拡張エラー情報については、 GetLastError を呼び出します。
次の表に、 GetLastError 関数によって最も一般的に返されるエラー コードを示します。
リターン コード | 説明 |
---|---|
|
メッセージには、要求された属性が含まれていません。 |
|
インデックス値が無効です。 |
|
メッセージ型が無効です。 |
|
メッセージの内容はまだ暗号化解除されていません。 |
|
オブジェクト識別子の形式が正しくありません。 |
|
メッセージは期待どおりにエンコードされません。 |
|
1 つ以上の引数が無効です。 |
|
指定されたバッファーは、返されたデータを保持するのに十分な大きさではありません。 |
dwParamType CMSG_COMPUTED_HASH_PARAMの場合、CryptGetHashParam からエラーを伝達できます。
関数が失敗した場合、GetLastError は抽象構文表記 1 (ASN.1) エンコード/デコード エラーを返す可能性があります。 これらのエラーの詳細については、「 ASN.1 エンコード/デコードの戻り値」を参照してください。
解説
次のバージョン番号は、dwParamType が定義CMSG_VERSION_PARAMに設定された CryptMsgGetParam の呼び出しによって返されます。
- CMSG_SIGNED_DATA_V1
- CMSG_SIGNED_DATA_V3
- CMSG_SIGNED_DATA_PKCS_1_5_VERSION
- CMSG_SIGNED_DATA_CMS_VERSION
- CMSG_SIGNER_INFO_V1
- CMSG_SIGNER_INFO_V3
- CMSG_SIGNER_INFO_PKCS_1_5_VERSION
- CMSG_SIGNER_INFO_CMS_VERSION
- CMSG_HASHED_DATA_V0
- CMSG_HASHED_DATA_V2
- CMSG_HASHED_DATA_PKCS_1_5_VERSION
- CMSG_HASHED_DATA_CMS_VERSION
- CMSG_ENVELOPED_DATA_V0
- CMSG_ENVELOPED_DATA_V2
- CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION
- CMSG_ENVELOPED_DATA_CMS_VERSION
例
この関数を使用する例については、「 サンプル C プログラム: メッセージの署名、エンコード、デコード、検証」、「エンベロープ メッセージを エンコードするための代替コード」、「 C プログラムの例: エンベロープメッセージのエンコード、署名付きメッセージのエンコード、および C プログラムの例: ハッシュメッセージのエンコードとデコード」を参照してください。
要件
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | wincrypt.h |
Library | Crypt32.lib |
[DLL] | Crypt32.dll |