Win32 API 日本語リファレンス
ホームStorage.Xps › IXpsSignatureManager

IXpsSignatureManager

COM
IIDd3e8d338-fdc4-4afc-80b5-d532a1782ee1継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

XPS ドキュメントのデジタル署名およびデジタル署名要求を管理します。

解説(Remarks)

XPS ドキュメントで使用する署名マネージャーを初期化するには、次の例に示すように CoCreateInstance を呼び出して IXpsSignatureManager インターフェイスをインスタンス化します。


IXpsSignatureManager    *newInterface;

// このスレッドから CoInitializeEx が事前に
//  呼び出されていることが暗黙の要件である点に注意してください。

hr = CoCreateInstance(
    __uuidof(XpsSignatureManager),
    NULL, 
    CLSCTX_INPROC_SERVER,
    __uuidof(IXpsSignatureManager),
    reinterpret_cast<LPVOID*>(&newInterface));

// インターフェイスへのポインターが取得できたことを
// 確認します
if (SUCCEEDED(hr)) {
    // ファイルからドキュメントを署名マネージャーに読み込みます。
    //  xpsDocument には、読み込むドキュメントのファイル名が
    //  この例の外部で設定されています。
    hr = newInterface->LoadPackageFile (xpsDocument);

    // newInterface を使用します

    // 使用が終わったらインターフェイス ポインターを解放します
    newInterface->Release();
}

CoCreateInstance でインスタンス化したインターフェイスは、1 つの XPS ドキュメントに対してのみ使用できます。そのドキュメントは、他のメソッドを呼び出す前に LoadPackageFile または LoadPackageStream を呼び出して読み込む必要があります。

IXpsSignatureManager インターフェイスをインスタンス化し、XPS ドキュメントを読み込むと、署名マネージャーを使用できる状態になります。

メソッド 11

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT LoadPackageFile(LPWSTR fileName)

既存の XPS パッケージをファイルからデジタル署名マネージャーに読み込みます。

fileNameLPWSTRin読み込む XPS パッケージのファイル名。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない戻り値については、XPS Digital Signature API Errors および XPS Document Errors を参照してください。

リターン コード 説明
S_OK
メソッドは成功しました。
E_POINTER
fileNameNULL です。
XPS_E_PACKAGE_ALREADY_OPENED
署名マネージャーで XPS パッケージが既に開かれています。

解説(Remarks)

インターフェイスをインスタンス化した後、このインターフェイスの他のメソッドを呼び出す前に、このメソッドまたは LoadPackageStream を呼び出して XPS パッケージを読み込む必要があります。

IXpsSignatureManager のインスタンスに XPS パッケージを読み込んだ後、同じインスタンスで LoadPackageFile または LoadPackageStream を呼び出すと、エラーが返されます。

LoadPackageFile または LoadPackageStream を呼び出した後、同じオブジェクトを別の XPS パッケージ ファイルやストリームに再利用することはできません。別の XPS パッケージを読み込むには、IXpsSignatureManager の新しいインスタンスをインスタンス化する必要があります。

LoadPackageStream は、XPS パッケージのすべての内容を検証するわけではありません。たとえば、FixedPage パート内の無効なマークアップは検出されません。

vtbl 4 HRESULT LoadPackageStream(IStream* stream)

XPS パッケージをストリームからデジタル署名マネージャーに読み込みます。

streamIStream*in読み込む XPS パッケージを含むストリーム。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない戻り値については、XPS Digital Signature API Errors および XPS Document Errors を参照してください。

リターン コード 説明
S_OK
メソッドは成功しました。
E_POINTER
streamNULL です。
XPS_E_PACKAGE_ALREADY_OPENED
署名マネージャーで XPS パッケージが既に開かれています。

解説(Remarks)

インターフェイスをインスタンス化した後、このインターフェイスの他のメソッドを呼び出す前に、このメソッドまたは LoadPackageFile を呼び出して XPS パッケージを読み込む必要があります。

IXpsSignatureManager のインスタンスに XPS パッケージを読み込んだ後、同じインスタンスで LoadPackageFile または LoadPackageStream を呼び出すと、エラーが返されます。

LoadPackageFile または LoadPackageStream を呼び出した後、同じオブジェクトを別の XPS パッケージ ファイルやストリームに再利用することはできません。別の XPS パッケージを読み込むには、IXpsSignatureManager の新しいインスタンスをインスタンス化する必要があります。

LoadPackageStream は、XPS パッケージのすべての内容を検証するわけではありません。たとえば、FixedPage パート内の無効なマークアップは検出されません。

stream に渡す IStream インターフェイスの実装は、ランダムな読み取りアクセスをサポートしている必要があります。また、この実装には XPS パッケージのみが格納されており、このメソッドで使用する前にストリームの先頭に位置付けられている必要があります。

vtbl 5 HRESULT Sign(IXpsSigningOptions* signOptions, CERT_CONTEXT* x509Certificate, IXpsSignature** signature)

署名オプションで指定された内容に従って XPS パッケージの内容に署名し、生成されたデジタル署名を返します。

signOptionsIXpsSigningOptions*in

署名オプションを格納する IXpsSigningOptions インターフェイスへのポインター。

メモ

IXpsSigningOptions インターフェイスの SignatureMethod プロパティと DigestMethod プロパティは、そのインターフェイスへのポインターを signOptions パラメーターに使用する前に初期化しておく必要があります。

x509CertificateCERT_CONTEXT*in署名に使用する X.509 証明書を格納する CERT_CONTEXT 構造体へのポインター。
signatureIXpsSignature**out

新しいデジタル署名を格納する IXpsSignature インターフェイスへのポインター。

成功した場合、このメソッドは署名パートを作成してパッケージに追加し、そのパートのインターフェイスへのポインターを signature に返します。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない戻り値については、XPS Digital Signature API Errors および XPS Document Errors を参照してください。

リターン コード 説明
S_OK
メソッドは成功しました。
XPS_E_MARKUP_COMPATIBILITY_ELEMENTS
XPS_SIGN_FLAGS の値でマークアップ互換性要素が存在しないことが指定されていましたが、マークアップ互換性要素が見つかりました。
XPS_E_NO_CUSTOM_OBJECTS
signOptions が、認識可能なインターフェイス実装を指していません。XPS Document API インターフェイスの独自実装はサポートされていません。
XPS_E_PACKAGE_NOT_OPENED
署名マネージャーで XPS パッケージがまだ開かれていません。

解説(Remarks)

新しい署名を追加しても、LoadPackageFile メソッドまたは LoadPackageStream メソッドの呼び出しで読み取った元のファイルやストリームは上書きされません。 署名は、パッケージが保存される (SavePackageToFile メソッドまたは SavePackageToStream メソッドが呼び出される) まで、XPS パッケージのメモリ内コピーに追加されます。

新しい署名にマークアップ互換性要素を含むパートが含まれる場合、既定ではこのメソッドは XPS_E_MARKUP_COMPATIBILITY_ELEMENTS エラーで失敗します。 この動作を変更するには IXpsSigningOptions::SetFlags を呼び出します。これにより、signOptions パラメーターで参照される IXpsSigningOptions インターフェイスに XPS_SIGN_FLAGS_IGNORE_MARKUP_COMPATIBILITY フラグが設定されます。

このメソッドが戻り値の一覧にない HRESULT 値を返した場合は、署名マネージャーを解放して作成し直す必要があります。

このメソッドは、新しい署名によって既存の署名が無効になる場合でも成功します。

vtbl 6 HRESULT GetSignatureOriginPartName(IOpcPartUri** signatureOriginPartName)

署名オリジン パートのパート名を取得します。

signatureOriginPartNameIOpcPartUri**out署名オリジン パートのパート名を格納する IOpcPartUri インターフェイスへのポインター。ドキュメントに署名が 1 つもない場合は、NULL ポインターが返されます。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない戻り値については、XPS Digital Signature API Errors および XPS Document Errors を参照してください。

リターン コード 説明
S_OK
メソッドは成功しました。
XPS_E_PACKAGE_NOT_OPENED
署名マネージャーで XPS パッケージがまだ開かれていません。
vtbl 7 HRESULT SetSignatureOriginPartName(IOpcPartUri* signatureOriginPartName)

署名オリジン パートのパート名を設定します。

signatureOriginPartNameIOpcPartUri*in署名オリジン パートのパート名を格納する IOpcPartUri インターフェイスへのポインター。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は、次の表に示す HRESULT エラー コード、または IOpcDigitalSignatureManager::SetSignatureOriginPartName が返す HRESULT エラー コードを返します。

リターン コード 説明
S_OK
メソッドは成功しました。
XPS_E_PACKAGE_NOT_OPENED
このメソッドを呼び出す前に、XPS パッケージがデジタル署名マネージャーに読み込まれていませんでした。

解説(Remarks)

署名が 1 つでも存在する場合、パート名は設定できません。

vtbl 8 HRESULT GetSignatures(IXpsSignatureCollection** signatures)

XPS デジタル署名のコレクションを格納する IXpsSignatureCollection インターフェイスへのポインターを取得します。

signaturesIXpsSignatureCollection**outXPS デジタル署名のコレクションを格納する IXpsSignatureCollection インターフェイスへのポインター。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない戻り値については、XPS Digital Signature API Errors および XPS Document Errors を参照してください。

リターン コード 説明
S_OK
メソッドは成功しました。
E_POINTER
signaturesNULL です。
XPS_E_PACKAGE_NOT_OPENED
署名マネージャーで XPS パッケージがまだ開かれていません。

解説(Remarks)

signatures に返される署名コレクションには、XML Paper Specification に準拠していないデジタル署名が含まれる場合があります。

vtbl 9 HRESULT AddSignatureBlock(IOpcPartUri* partName, DWORD fixedDocumentIndex, IXpsSignatureBlock** signatureBlock)

新しい IXpsSignatureBlock インターフェイスを作成し、署名ブロック コレクションに追加します。

partNameIOpcPartUri*in新しいパートの URI を格納する IOpcPartUri インターフェイスへのポインター。メソッドにパート名を生成させる場合は、このパラメーターに NULL を指定できます。
fixedDocumentIndexDWORDin新しい署名ブロックを関連付ける FixedDocument パートのインデックス値。
signatureBlockIXpsSignatureBlock**out新しい IXpsSignatureBlock インターフェイスへのポインター。新しいインターフェイスへのアクセスが不要な場合は、このパラメーターに NULL を指定できます。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない戻り値については、XPS Digital Signature API Errors および XPS Document Errors を参照してください。

リターン コード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
fixedDocumentIndex が、XPS パッケージ内に存在しない fixed document を参照しています。
XPS_E_PACKAGE_NOT_OPENED
署名マネージャーで XPS パッケージがまだ開かれていません。

解説(Remarks)

署名ブロックは、XPS パッケージ内の SignatureDefinitions パートを表します。XML Paper Specification のセクション 10.2.2 によると、各 FixedDocument には 0 個以上の SignatureDefinitions パートを関連付けることができます。 このメソッドは、指定された名前で新しい SignatureDefinitions パートを作成し、指定された FixedDocument パートからリレーションシップでリンクし、 新しい IXpsSignatureBlock インターフェイスを作成して、この新しいインターフェイスを内部の署名ブロック コレクションに追加します。

署名ブロックを取得するには、GetSignatureBlocks メソッドを呼び出します。

vtbl 10 HRESULT GetSignatureBlocks(IXpsSignatureBlockCollection** signatureBlocks)

署名ブロックのコレクションを格納する IXpsSignatureBlockCollection インターフェイスへのポインターを取得します。

signatureBlocksIXpsSignatureBlockCollection**out署名ブロックのコレクションを格納する IXpsSignatureBlockCollection インターフェイスへのポインター。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない戻り値については、XPS Digital Signature API Errors および XPS Document Errors を参照してください。

リターン コード 説明
S_OK
メソッドは成功しました。
E_POINTER
signatureBlocksNULL です。
XPS_E_PACKAGE_NOT_OPENED
署名マネージャーで XPS パッケージがまだ開かれていません。
vtbl 11 HRESULT CreateSigningOptions(IXpsSigningOptions** signingOptions)

新しい IXpsSigningOptions インターフェイスを作成します。

signingOptionsIXpsSigningOptions**out新しい IXpsSigningOptions インターフェイスへのポインター。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない戻り値については、XPS Digital Signature API Errors および XPS Document Errors を参照してください。

リターン コード 説明
S_OK
メソッドは成功しました。
E_POINTER
signingOptionsNULL です。
XPS_E_PACKAGE_NOT_OPENED
署名マネージャーで XPS パッケージがまだ開かれていません。

解説(Remarks)

新しい IXpsSigningOptions インターフェイスは、Sign メソッドの署名オプションを設定するために使用できます。ただし、この新しいインターフェイスを Sign メソッドのパラメーターとして使用する前に、SignatureMethod プロパティと DigestMethod プロパティを初期化しておく必要があります。

このメソッドで作成した IXpsSigningOptions インターフェイスは、複数回の Sign メソッド呼び出しで使用できます。

vtbl 12 HRESULT SavePackageToFile(LPWSTR fileName, SECURITY_ATTRIBUTES* securityAttributes, DWORD flagsAndAttributes)

XPS パッケージをファイルに保存します。

fileNameLPWSTRinXPS パッケージを作成して保存するファイルの名前。
securityAttributesSECURITY_ATTRIBUTES*in

SECURITY_ATTRIBUTES 構造体。この構造体には、独立しているが関連する 2 つのデータ メンバーが含まれます。

  • lpSecurityDescriptor: 省略可能なセキュリティ記述子。
  • bInheritHandle: 返されるハンドルを子プロセスが継承できるかどうかを決定するブール値。
構造体の lpSecurityDescriptor メンバーが NULL の場合、返されるハンドルに関連付けられたファイルまたはデバイスには既定のセキュリティ記述子が割り当てられます。

このパラメーターの詳細については、CreateFile を参照してください。

flagsAndAttributesDWORDinファイルの作成時に使用されるファイルまたはデバイスの属性とフラグ。このパラメーターの詳細については、CreateFiledwFlagsAndAttributes パラメーターの説明を参照してください。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない戻り値については、XPS Digital Signature API Errors および XPS Document Errors を参照してください。

リターン コード 説明
S_OK
メソッドは成功しました。
E_POINTER
fileNameNULL です。
XPS_E_PACKAGE_NOT_OPENED
署名マネージャーで XPS パッケージがまだ開かれていません。

解説(Remarks)

このメソッドが、このメソッドの戻り値の一覧にない HRESULT 値を返した場合は、署名マネージャーを解放して作成し直す必要があります。

vtbl 13 HRESULT SavePackageToStream(IStream* stream)

XPS パッケージをストリームに書き込んで保存します。

streamIStream*inXPS パッケージの書き込み先となるストリーム。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。この表に記載されていない戻り値については、XPS Digital Signature API Errors および XPS Document Errors を参照してください。

リターン コード 説明
S_OK
メソッドは成功しました。
E_POINTER
streamNULL です。
XPS_E_PACKAGE_NOT_OPENED
署名マネージャーで XPS パッケージがまだ開かれていません。

解説(Remarks)

このメソッドが、このメソッドの戻り値の一覧にない HRESULT 値を返した場合は、署名マネージャーを解放して作成し直す必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IXpsSignatureManager "{D3E8D338-FDC4-4AFC-80B5-D532A1782EE1}"
#usecom global IXpsSignatureManager IID_IXpsSignatureManager "{B0C43320-2315-44A2-B70A-0943A140A8EE}"
#comfunc global IXpsSignatureManager_LoadPackageFile             3 wstr
#comfunc global IXpsSignatureManager_LoadPackageStream           4 sptr
#comfunc global IXpsSignatureManager_Sign                        5 sptr,var,sptr
#comfunc global IXpsSignatureManager_GetSignatureOriginPartName  6 sptr
#comfunc global IXpsSignatureManager_SetSignatureOriginPartName  7 sptr
#comfunc global IXpsSignatureManager_GetSignatures               8 sptr
#comfunc global IXpsSignatureManager_AddSignatureBlock           9 sptr,int,sptr
#comfunc global IXpsSignatureManager_GetSignatureBlocks          10 sptr
#comfunc global IXpsSignatureManager_CreateSigningOptions        11 sptr
#comfunc global IXpsSignatureManager_SavePackageToFile           12 wstr,var,int
#comfunc global IXpsSignatureManager_SavePackageToStream         13 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。