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

IAppxFactory3

COM
IID776b2c05-e21d-4e24-ba1a-cd529a8bfdbb継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

アプリパッケージ、マニフェスト、およびアプリインストーラーファイルの読み取りと書き込みを行うオブジェクトを作成します。

メソッド 3

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

vtbl 3 HRESULT CreatePackageReader2(IStream* inputStream, LPWSTR expectedDigest, IAppxPackageReader** packageReader)

IStream から提供される内容を基に読み取り専用のパッケージリーダーを作成します。パッケージに期待されるダイジェストを指定する省略可能なパラメーターを備えています。

inputStreamIStream*in読み取り対象のパッケージを提供する入力ストリーム。このストリームは ISequentialStream::ReadIStream::Seek、および IStream::Stat をサポートしている必要があります。これらのメソッドが失敗した場合、そのエラーコードがこのメソッドに渡され、そのまま返されることがあります。
expectedDigestLPWSTRin期待されるダイジェスト (パッケージファイルのハッシュ表現) を格納した LPCWSTR。
packageReaderIAppxPackageReader**out作成されたパッケージリーダー。

戻り値

メソッドが成功した場合は 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 セントラルディレクトリに記載されたファイルのサイズがブロックマップに記載されたファイルサイズおよびブロックサイズと一致しません。
APPX_E_DIGEST_MISMATCH オブジェクトのダイジェストが expectedDigest で指定されたダイジェストと一致しません。

解説(Remarks)

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

expecteDigest パラメーターに指定するダイジェスト文字列は、IAppxDigestProvider::GetDigest を呼び出して取得します。

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

vtbl 4 HRESULT CreateManifestReader2(IStream* inputStream, LPWSTR expectedDigest, IAppxManifestReader** manifestReader)

IStream から提供される内容を基に読み取り専用のマニフェストオブジェクトモデルを作成します。マニフェストに期待されるダイジェストを指定する省略可能なパラメーターを備えています。

inputStreamIStream*in読み取り対象のマニフェスト XML を提供する入力ストリーム。このストリームは ISequentialStream::ReadIStream::Seek、および IStream::Stat をサポートしている必要があります。これらのメソッドが失敗した場合、そのエラーコードがこのメソッドに渡され、そのまま返されることがあります。
expectedDigestLPWSTRin期待されるダイジェスト (マニフェストファイルのハッシュ表現) を格納した LPCWSTR。
manifestReaderIAppxManifestReader**out作成されたマニフェストリーダー。

戻り値

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

戻り値 説明
APPX_E_INVALID_MANIFEST inputStream に、マニフェストとして構文的に有効な XML が含まれていません。
APPX_E_DIGEST_MISMATCH オブジェクトのダイジェストが expectedDigest で指定されたダイジェストと一致しません。

解説(Remarks)

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

expecteDigest パラメーターに指定するダイジェスト文字列は、IAppxDigestProvider::GetDigest を呼び出して取得します。

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

vtbl 5 HRESULT CreateAppInstallerReader(IStream* inputStream, LPWSTR expectedDigest, IAppxAppInstallerReader** appInstallerReader)

IAppInstallerReader のインスタンスを作成します。App Installer ファイルに期待されるダイジェストを指定する省略可能なパラメーターを備えています。

inputStreamIStream*inApp Installer ファイルの内容を提供する IStream
expectedDigestLPWSTRin期待されるダイジェスト (App Installer ファイルのハッシュ表現) を格納した LPCWSTR。
appInstallerReaderIAppxAppInstallerReader**out作成された IAppxInstallerReader インスタンスを受け取ります。

戻り値

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

戻り値 説明
APPX_E_DIGEST_MISMATCH オブジェクトのダイジェストが expectedDigest で指定されたダイジェストと一致しません。

解説(Remarks)

expecteDigest パラメーターに指定するダイジェスト文字列は、IAppxDigestProvider::GetDigest を呼び出して取得します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IAppxFactory3 "{776B2C05-E21D-4E24-BA1A-CD529A8BFDBB}"
#usecom global IAppxFactory3 IID_IAppxFactory3 "{5842A140-FF9F-4166-8F5C-62F5B7B0C781}"
#comfunc global IAppxFactory3_CreatePackageReader2      3 sptr,wstr,sptr
#comfunc global IAppxFactory3_CreateManifestReader2     4 sptr,wstr,sptr
#comfunc global IAppxFactory3_CreateAppInstallerReader  5 sptr,wstr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。