IAppxFactory3
COM公式ドキュメント
アプリパッケージ、マニフェスト、およびアプリインストーラーファイルの読み取りと書き込みを行うオブジェクトを作成します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IStream から提供される内容を基に読み取り専用のパッケージリーダーを作成します。パッケージに期待されるダイジェストを指定する省略可能なパラメーターを備えています。
| inputStream | IStream* | in | 読み取り対象のパッケージを提供する入力ストリーム。このストリームは ISequentialStream::Read、IStream::Seek、および IStream::Stat をサポートしている必要があります。これらのメソッドが失敗した場合、そのエラーコードがこのメソッドに渡され、そのまま返されることがあります。 |
| expectedDigest | LPWSTR | in | 期待されるダイジェスト (パッケージファイルのハッシュ表現) を格納した LPCWSTR。 |
| packageReader | IAppxPackageReader** | 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 を呼び出して取得します。
例
例については、「クイックスタート: アプリパッケージの内容を抽出する」および「クイックスタート: アプリパッケージのマニフェスト情報を読み取る」を参照してください。
IStream から提供される内容を基に読み取り専用のマニフェストオブジェクトモデルを作成します。マニフェストに期待されるダイジェストを指定する省略可能なパラメーターを備えています。
| inputStream | IStream* | in | 読み取り対象のマニフェスト XML を提供する入力ストリーム。このストリームは ISequentialStream::Read、IStream::Seek、および IStream::Stat をサポートしている必要があります。これらのメソッドが失敗した場合、そのエラーコードがこのメソッドに渡され、そのまま返されることがあります。 |
| expectedDigest | LPWSTR | in | 期待されるダイジェスト (マニフェストファイルのハッシュ表現) を格納した LPCWSTR。 |
| manifestReader | IAppxManifestReader** | out | 作成されたマニフェストリーダー。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は、次の表に示すものを含む (ただしこれらに限定されない) エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| APPX_E_INVALID_MANIFEST | inputStream に、マニフェストとして構文的に有効な XML が含まれていません。 |
| APPX_E_DIGEST_MISMATCH | オブジェクトのダイジェストが expectedDigest で指定されたダイジェストと一致しません。 |
解説(Remarks)
アプリパッケージの外部にあるマニフェストを読み取るには CreateManifestReader2 を使用します。このメソッドはマニフェスト XML を検証します。manifestReader は、マニフェスト XML 内のすべてのデータ要素と属性へのアクセスを提供します。マニフェストの検証エラーの発生位置は、AppxPackaging の ETW イベントログに記録されます。
expecteDigest パラメーターに指定するダイジェスト文字列は、IAppxDigestProvider::GetDigest を呼び出して取得します。
例
例については、「クイックスタート: アプリパッケージのマニフェスト情報を読み取る」を参照してください。
IAppInstallerReader のインスタンスを作成します。App Installer ファイルに期待されるダイジェストを指定する省略可能なパラメーターを備えています。
| inputStream | IStream* | in | App Installer ファイルの内容を提供する IStream。 |
| expectedDigest | LPWSTR | in | 期待されるダイジェスト (App Installer ファイルのハッシュ表現) を格納した LPCWSTR。 |
| appInstallerReader | IAppxAppInstallerReader** | out | 作成された IAppxInstallerReader インスタンスを受け取ります。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は、次の表に示すものを含む (ただしこれらに限定されない) エラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| APPX_E_DIGEST_MISMATCH | オブジェクトのダイジェストが expectedDigest で指定されたダイジェストと一致しません。 |
解説(Remarks)
expecteDigest パラメーターに指定するダイジェスト文字列は、IAppxDigestProvider::GetDigest を呼び出して取得します。
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 指定が可能。