IUpdateServiceManager2
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
更新プログラムサービスの登録を Windows Update Agent または自動更新に対して追加または削除します。(IUpdateServiceManager2)
解説(Remarks)
このインターフェースのインスタンスは、UpdateServiceManager coclass を使用して作成できます。オブジェクトを作成するには、Microsoft.Update.ServiceManager プログラム識別子を使用します。
メソッド 4
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
現在のクライアントアプリケーションの識別子を取得および設定します。(Get)
| retval | LPWSTR* | out | 設定されているクライアントアプリケーション識別子を受け取る文字列ポインタである。 |
解説(Remarks)
クライアントアプリケーションがこのプロパティを設定していない場合は、Unknown 値を返します。
現在のクライアントアプリケーションの識別子を取得および設定します。(Put)
| value | LPWSTR | in | 操作を識別するために設定するクライアントアプリケーション識別子の文字列を指定する。 |
解説(Remarks)
クライアントアプリケーションがこのプロパティを設定していない場合は、Unknown 値を返します。
IUpdateServiceRegistration インターフェースへのポインターを返します。
| serviceID | LPWSTR | in | 登録するサービスの識別子です。 |
| retval | IUpdateServiceRegistration** | out | 追加されたサービスを表す IUpdateServiceRegistration インターフェースへのポインターです。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合は、COM または Windows のエラーコードを返します。
承認キャビネットファイル (.cab) を必要とせずに、サービスを Windows Update Agent (WUA) に登録します。このメソッドは、IUpdateServiceRegistration インターフェースへのポインターも返します。
| serviceID | LPWSTR | in | 登録するサービスの識別子です。 |
| flags | INT | in | ビット単位の OR 演算で組み合わせた AddServiceFlag 値の組み合わせです。結果の値は、サービス登録のオプションを指定します。詳細については、「解説」を参照してください。 |
| authorizationCabPath | LPWSTR | in | サービス登録に必要な情報を含む、Microsoft の署名付きローカルキャビネットファイル (.cab) のパスです。空の場合、更新エージェントは、ネットワーク接続が利用可能なときに、サービス登録時に承認キャビネットファイル (.cab) を検索します。 |
| retval | IUpdateServiceRegistration** | out | 追加されたサービスを表す IUpdateServiceRegistration インターフェースへのポインターです。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合は、COM または Windows のエラーコードを返します。
このメソッドは、次のエラーコードを返すこともあります。
| 戻り値のコード | 説明 |
|---|---|
| パラメーター値が無効です。 | |
| authorizationCabPath パラメーターが null 文字列に設定されている場合、このメソッドをリモートコンピューターから呼び出すことはできません。 | |
| 承認キャビネットファイル (.cab) の有効期限が切れています。 | |
| 自動更新の状態を変更できませんでした。 |
解説(Remarks)
asfAllowOnlineRegistration フラグを指定した場合、このメソッドは ネットワークエラーコード を返すことがあります。
このメソッドでは、authorizationCabPath パラメーターは省略可能です。authorizationCabPath パラメーターを指定しない場合は、Windows Update サーバーから取得されます。
asfAllowOnlineRegistration フラグまたは asfAllowPendingRegistration フラグが指定され、かつ authorizationCabPath パラメーターの値が空の文字列でない場合、このメソッドは E_INVALIDARG を返します。
asfRegisterServiceWithAU フラグが指定されている場合に、要求された自動更新の状態変更が承認キャビネットファイル (.cab) の仕様に反しているときは、このメソッドは WU_E_DS_INVALIDOPERATION を返します。承認キャビネットファイルが署名されていない場合は、WinVerifyTrust 関数からエラーが返されます。
更新エージェントと AddService2 は、flags パラメーターに指定する AddServiceFlag 値に応じて、次のように動作します。
- asfAllowPendingRegistration を指定せずに asfAllowOnlineRegistration を指定した場合、更新エージェントは直ちにオンラインに接続してサービスの登録を試みます。AddService2 は、登録の成否を反映した HRESULT 値を返します。登録が失敗した場合、更新エージェントはそれ以降サービスの登録を試みません。
- asfAllowOnlineRegistration を指定せずに asfAllowPendingRegistration を指定した場合、更新エージェントはサービスを直ちには登録しません。AddService2 は S_OK を返し、更新エージェントが後でサービスの登録を試みることを示しますが、登録が最終的に成功することを保証するものではありません。
- asfAllowPendingRegistration と asfAllowOnlineRegistration を同時に指定した場合、更新エージェントは直ちにオンラインに接続してサービスの登録を試みます。登録が成功した場合、AddService2 は S_OK を返します。登録が失敗した場合、AddService2 は失敗を示す HRESULT 値を返しますが、更新エージェントは後でサービスの登録を試みます。
- asfAllowPendingRegistration、asfAllowOnlineRegistration、またはその両方を指定する場合は、authorizationCabPath パラメーターにも NULL を指定してください。
- asfAllowPendingRegistration と asfAllowOnlineRegistration のどちらも指定しない場合(つまり flags が 0 または asfRegisterServiceWithAU のいずれかである場合)は、authorizationCabPath パラメーターに NULL 以外のパスを指定する必要があります。このモードでは、AddService2 はキャビネットファイル (.cab) を処理し、IUpdateServiceManager::AddService と同じ方法でサービスを登録します。
- asfRegisterServiceWithAU を指定した場合、既定の自動更新サービスへの変更は、サービス登録が成功するまで行われません(また Windows Update のユーザーインターフェイスにも反映されません)。つまり、登録が(asfAllowPendingRegistration を指定したか、またはキャビネットファイル (.cab) を指定したことにより)直ちに成功した場合は、自動更新サービスの変更も直ちに行われます。登録が後になるまで成功しない場合(asfAllowPendingRegistration を指定した場合)は、保留中のサービス登録が最終的に成功しない限り、自動更新サービスの変更は行われません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IUpdateServiceManager2 "{0BB8531D-7E8D-424F-986C-A0B8F60A3E7B}" #usecom global IUpdateServiceManager2 IID_IUpdateServiceManager2 "{F8D253D9-89A4-4DAA-87B6-1168369F0B21}" #comfunc global IUpdateServiceManager2_get_ClientApplicationID 14 var #comfunc global IUpdateServiceManager2_put_ClientApplicationID 15 wstr #comfunc global IUpdateServiceManager2_QueryServiceRegistration 16 wstr,sptr #comfunc global IUpdateServiceManager2_AddService2 17 wstr,int,wstr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IUpdateServiceManager2 "{0BB8531D-7E8D-424F-986C-A0B8F60A3E7B}" #usecom global IUpdateServiceManager2 IID_IUpdateServiceManager2 "{F8D253D9-89A4-4DAA-87B6-1168369F0B21}" #comfunc global IUpdateServiceManager2_get_ClientApplicationID 14 sptr #comfunc global IUpdateServiceManager2_put_ClientApplicationID 15 wstr #comfunc global IUpdateServiceManager2_QueryServiceRegistration 16 wstr,sptr #comfunc global IUpdateServiceManager2_AddService2 17 wstr,int,wstr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。