Win32 API 日本語リファレンス
ホームStorage.Packaging.Appx › IAppxFactory

IAppxFactory

COM
IIDbeb94909-e451-438b-b5a7-d79e767b75d8継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

アプリパッケージの読み取りと書き込みを行うオブジェクトを作成します。(IAppxFactory)

解説(Remarks)

IAppxFactory インターフェースは、アプリパッケージのリーダーおよびライターを作成するファクトリーメソッドに加え、パッケージ外部にあるブロックマップやマニフェストのリーダーを作成するメソッドを提供します。

例については、次を参照してください。

メソッド 5

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

vtbl 3 HRESULT CreatePackageWriter(IStream* outputStream, APPX_PACKAGE_SETTINGS* settings, IAppxPackageWriter** packageWriter)

ファイルを追加できる書き込み専用のパッケージオブジェクトを作成します。

outputStreamIStream*inシリアル化されたパッケージデータを受け取る出力ストリームです。このストリームは少なくとも Write メソッドをサポートしている必要があります。
settingsAPPX_PACKAGE_SETTINGS*inこのパッケージの生成に使用する設定です。
packageWriterIAppxPackageWriter**outこのメソッドによって作成されたパッケージライターです。

戻り値

型: HRESULT

メソッドが成功した場合は S_OK を返します。それ以外の場合は、次の表に示すものを含む(ただしこれらに限定されない)エラーコードを返します。

戻り値 説明
E_INVALIDARG
APPX_PACKAGE_SETTINGS 構造体の hashMethod メンバーに指定された値が、有効なハッシュアルゴリズムの URI ではありません。
ERROR_INVALID_PARAMETER
APPX_PACKAGE_SETTINGS 構造体の hashMethod メンバーに指定された値が、有効なハッシュアルゴリズムの URI ではありません。
NTE_BAD_ALGID
ハッシュ値が SHA1 です。

解説(Remarks)

IAppxPackageWriter の実装が、ライターオブジェクトに対して Close メソッドが呼び出される前に出力ストリームへデータを書き込むことは保証されません。ライターが Close メソッドから戻るまで、他のスレッドが outputStream にアクセスしてはなりません。

例については、アプリパッケージを作成する方法を参照してください。

vtbl 4 HRESULT CreatePackageReader(IStream* inputStream, IAppxPackageReader** packageReader)

IStream から提供されるコンテンツを基に、読み取り専用のパッケージリーダーを作成します。このメソッドはデジタル署名の検証を行いません。

inputStreamIStream*in読み取り対象となるパッケージのコンテンツを提供する入力ストリームです。このストリームは ReadSeekStat をサポートしている必要があります。これらのメソッドが失敗した場合、そのエラーコードがこのメソッドに渡され、そのまま返されることがあります。
packageReaderIAppxPackageReader**outパッケージリーダーです。

戻り値

型: HRESULT

メソッドが成功した場合は S_OK を返します。それ以外の場合は、次の表に示すものを含む(ただしこれらに限定されない)エラーコードを返します。

戻り値 説明
APPX_E_INTERLEAVING_NOT_ALLOWED
inputStream から提供される ZIP ファイルが、インターリーブされた OPC パッケージです。
APPX_E_RELATIONSHIPS_NOT_ALLOWED
inputStream から提供される OPC パッケージに、OPC のパッケージ/パートのリレーションシップが含まれています。
APPX_E_MISSING_REQUIRED_FILE
inputStream から提供される OPC パッケージにマニフェストまたはブロックマップがないか、CI カタログが存在するにもかかわらず署名ファイルがありません。
APPX_E_INVALID_MANIFEST
パッケージマニフェストが有効ではありません。
APPX_E_INVALID_BLOCKMAP
パッケージのブロックマップが有効でないか、ZIP セントラルディレクトリ内のファイルの一覧がブロックマップ内のファイルの一覧と一致しないか、ZIP セントラルディレクトリに記載されたファイルのサイズがブロックマップに記載されたファイルサイズおよびブロックサイズと一致しません。

解説(Remarks)

CreatePackageReader メソッドは、ストリームを通じてアプリパッケージのフットプリント要素を直ちに取得し、その内容を検証します。このメソッドは、OPC パッケージとすべてのフットプリント要素(ZIP セントラルディレクトリ、マニフェスト、[Content_Types].xml、ブロックマップを含む)が有効である場合にのみ成功します。

例については、クイックスタート: アプリパッケージの内容を抽出するおよびクイックスタート: アプリパッケージのマニフェスト情報を読み取るを参照してください。

vtbl 5 HRESULT CreateManifestReader(IStream* inputStream, IAppxManifestReader** manifestReader)

IStream から提供されるコンテンツを基に、読み取り専用のマニフェストオブジェクトモデルを作成します。

inputStreamIStream*in読み取り対象となるマニフェスト XML を提供する入力ストリームです。このストリームは ReadSeekStat をサポートしている必要があります。これらのメソッドが失敗した場合、そのエラーコードがこのメソッドに渡され、そのまま返されることがあります。
manifestReaderIAppxManifestReader**outマニフェストリーダーです。

戻り値

型: HRESULT

メソッドが成功した場合は S_OK を返します。それ以外の場合は、次の表に示すものを含む(ただしこれらに限定されない)エラーコードを返します。

戻り値 説明
APPX_E_INVALID_MANIFEST
inputStream に、マニフェストとして構文的に有効な XML が含まれていません。

解説(Remarks)

アプリパッケージの外部にあるマニフェストを読み取るには、CreateManifestReader を使用します。このメソッドはマニフェスト XML を検証します。manifestReader は、マニフェスト XML 内のすべてのデータ要素と属性へのアクセスを提供します。マニフェストの検証エラーの発生位置は、AppxPackaging の ETW イベントログに記録されます。

例については、クイックスタート: アプリパッケージのマニフェスト情報を読み取るを参照してください。

vtbl 6 HRESULT CreateBlockMapReader(IStream* inputStream, IAppxBlockMapReader** blockMapReader)

IStream から提供されるコンテンツを基に、読み取り専用のブロックマップオブジェクトモデルを作成します。

inputStreamIStream*in読み取り対象となるブロックマップ XML を提供するストリームです。このストリームは ReadSeekStat をサポートしている必要があります。これらのメソッドが失敗した場合、そのエラーコードがこのメソッドに渡され、そのまま返されることがあります。
blockMapReaderIAppxBlockMapReader**outブロックマップリーダーです。

戻り値

型: HRESULT

メソッドが成功した場合は S_OK を返します。それ以外の場合は、次の表に示すものを含む(ただしこれらに限定されない)エラーコードを返します。

戻り値 説明
APPX_E_INVALID_BLOCKMAP
inputStream に、ブロックマップとして構文的に有効な XML が含まれていません。

解説(Remarks)

アプリパッケージの外部にあるブロックマップを読み取るには、CreateBlockMapReader メソッドを使用します。blockMapReader は、ブロックマップ XML 内のすべてのデータ要素と属性へのアクセスを提供します。

vtbl 7 HRESULT CreateValidatedBlockMapReader(IStream* blockMapStream, LPWSTR signatureFileName, IAppxBlockMapReader** blockMapReader)

IStream から提供されるコンテンツとデジタル署名を基に、読み取り専用のブロックマップオブジェクトモデルを作成します。

blockMapStreamIStream*in読み取り対象となるブロックマップ XML を提供するストリームです。このストリームは ReadSeekStat をサポートしている必要があります。
signatureFileNameLPWSTRin入力ストリームの内容を検証するために使用するデジタル署名が格納されたファイルです。
blockMapReaderIAppxBlockMapReader**outブロックマップリーダーです。

戻り値

型: HRESULT

メソッドが成功した場合は S_OK を返します。それ以外の場合は、以下に示すものを含む(ただしこれらに限定されない)エラーコードを返します。このメソッドは、内部で使用される検証 API から渡されるエラーを返すことがあります。 たとえば、署名を読み取れない場合、署名が無効な場合、または署名が blockMapStream の内容と一致しない場合、Crypto および WinTrust のエラーコード (0x8009xxxx、0x800bxxxx) を返すことがあります。

戻り値 説明
APPX_E_INVALID_BLOCKMAP
blockMapStream に、ブロックマップとして構文的に有効な XML が含まれていません。

解説(Remarks)

このメソッドは、ブロックマップがアプリパッケージの外部に単独で存在する場合に使用します。ブロックマップオブジェクトは、ブロックマップ XML 内のすべてのデータ要素と属性へのアクセスを提供します。

fileName パラメーターには、ディスク上にあるパッケージのデジタル署名ファイル (.p7x) のパスを含めて指定します。このパラメーターが NULL でない場合、このメソッドは署名ファイルの形式を検証し、その署名に対して blockMapStream の内容を検証します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IAppxFactory "{BEB94909-E451-438B-B5A7-D79E767B75D8}"
#usecom global IAppxFactory IID_IAppxFactory "{5842A140-FF9F-4166-8F5C-62F5B7B0C781}"
#comfunc global IAppxFactory_CreatePackageWriter            3 sptr,var,sptr
#comfunc global IAppxFactory_CreatePackageReader            4 sptr,sptr
#comfunc global IAppxFactory_CreateManifestReader           5 sptr,sptr
#comfunc global IAppxFactory_CreateBlockMapReader           6 sptr,sptr
#comfunc global IAppxFactory_CreateValidatedBlockMapReader  7 sptr,wstr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。