IWbemLocator
COM公式ドキュメント
IWbemLocator インターフェイスは、特定のホストコンピューター上の WMI に対する IWbemServices インターフェイスへの、最初の名前空間ポインターを取得するために使用します。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IWbemLocator::ConnectServer メソッドは、strNetworkResource パラメーターで指定されたコンピューター上の WMI 名前空間への接続を DCOM 経由で作成します。
| strNetworkResource | LPWSTR | in | 目的の WMI 名前空間のオブジェクトパスを格納した、有効な BSTR へのポインターです。ローカルの既定の名前空間にアクセスする場合は、"root\default" または "\.\root\default" のような単純なオブジェクトパスを使用します。COM または Microsoft 互換のネットワーク機能を使用してリモートコンピューター上の既定の名前空間にアクセスする場合は、"\myserver\root\default" のようにコンピューター名を含めます。詳細については、 Describing a WMI Namespace Object Path を参照してください。コンピューター名には DNS 名または IP アドレスを指定することもできます。Windows Vista 以降では、SWbemLocator.ConnectServer は IPv6 アドレスを使用して IPv6 で動作するコンピューターに接続できます。詳細については、IPv6 and IPv4 Support in WMI を参照してください。 |
| strUser | LPWSTR | in | 接続に必要なユーザー名を格納した、有効な BSTR へのポインターです。NULL は現在のセキュリティコンテキストを示します。ユーザー名が現在のドメインとは異なるドメインのものである場合、文字列にはドメイン名とユーザー名を円記号 (バックスラッシュ) で区切って含めることができます。
strUser パラメーターに空文字列を指定することはできません。 ドメインを strAuthority で指定する場合は、ここで指定してはならない点に注意してください。両方のパラメーターでドメインを指定すると、無効なパラメーターのエラーになります。 strUser の指定には、Username@DomainName という形式のユーザープリンシパル名 (UPN) 形式を使用できます。 |
| strPassword | LPWSTR | in | 接続に必要なパスワードを格納した、有効な BSTR へのポインターです。NULL は現在のセキュリティコンテキストを示します。空文字列 "" は、長さが 0 の有効なパスワードを指定します。 |
| strLocale | LPWSTR | in | NULL の場合は現在のロケールが使用されます。NULL 以外の場合、このパラメーターには、情報取得に使用するロケールを示す有効な BSTR を指定する必要があります。Microsoft のロケール識別子の場合、文字列の形式は "MS_xxx" で、xxx はロケール識別子 (LCID) を 16 進数形式で表した文字列です。たとえば、アメリカ英語は "MS_409" となります。無効なロケールが指定された場合、このメソッドは WBEM_E_INVALID_PARAMETER を返します。 Windows 7: 無効なロケールが指定された場合、ユーザーアプリケーションがサーバーのサポートするロケールを提供していない限り、サーバーの既定のロケールが使用されます。 |
| lSecurityFlags | INT | in | ConnectServer にフラグ値を渡すために使用する long 値です。このパラメーターに 0 を指定すると、 ConnectServer の呼び出しはサーバーへの接続が確立された後にのみ戻ります。サーバーに問題がある場合、プログラムが無期限に応答しなくなる可能性があります。lSecurityFlags に指定できるその他の有効な値を次に示します。 WBEM_FLAG_CONNECT_REPOSITORY_ONLY (64 (0x40))内部使用のために予約されています。使用しないでください。 WBEM_FLAG_CONNECT_USE_MAX_WAIT (128 (0x80))ConnectServer の呼び出しは 2 分以内に戻ります。サーバーに問題がある場合にプログラムが無期限に応答しなくなることを防ぐには、このフラグを使用します。 |
| strAuthority | LPWSTR | in | 認証するユーザーのドメイン名を格納します。 strAuthority には次の値を指定できます。
|
| pCtx | IWbemContext* | in | 通常は NULL を指定します。それ以外の場合は、1 つ以上の動的クラスプロバイダーが必要とする IWbemContext オブジェクトへのポインターです。コンテキストオブジェクトに設定すべき値は、該当するプロバイダーのドキュメントで指定されています。このパラメーターの詳細については、 Making Calls to WMI を参照してください。 |
| ppNamespace | IWbemServices** | out | 指定した名前空間にバインドされた IWbemServices オブジェクトへのポインターを受け取ります。このポインターの参照カウントは正の値になります。呼び出し元は、ポインターが不要になった時点で IWbemServices::Release を呼び出す必要があります。エラーが発生した場合、このポインターは NULL を指すように設定されます。 |
戻り値
このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。HRESULT に含まれる値を次に示します。
ネットワークの問題によって WMI へのリモート接続が失われた場合は、COM 固有のエラーコードが返されることがあります。
これらのエラーの戻り値は、PSDK の \Include ディレクトリの WMI セクションにある Wbemcli.h ファイルで定義されています。詳細については、WMI Error Constants を参照してください。
解説(Remarks)
ローカルの名前空間に接続する場合は、strUser、strPassword、strAuthority を指定しないでください。詳細については、Connecting to WMI on a Remote Computer を参照してください。
ConnectServer の使用方法の詳細については、Creating a Connection to a WMI Namespace を参照してください。なお、IWbemLocator への接続は、Cleaning up and Shutting Down a WMI Application で説明されているとおり、アプリケーションの終了時にシャットダウンする必要がある接続の 1 つです。
例
ConnectServer メソッドを使用する複数のサンプルについては、WMI C++ Application Examples を参照してください。
次の C++ のコード例は、指定した名前空間に接続する方法を示しています。
int _tmain(int argc, _TCHAR* argv[])
{
// Initialize COM. ------------------------------------------
HRESULT hres = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (FAILED(hres))
{
wcout << "CoInitializeEx() failure:" << hex << (unsigned long)hres;
return 0;
}
// Obtain the initial locator to Windows Management
// on a particular host computer.
IWbemLocator *pLoc = NULL;
hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER,IID_IWbemLocator, (LPVOID *)&pLoc);
if (FAILED(hres))
{
CoUninitialize();
wcout << "CreateInstance failure:" << hex << (unsigned long)hres;
return 0;
}
// Connect to WMI through the IWbemLocator::ConnectServer method
// Connect to the local ROOT\CIMV2 namespace
// and obtain pointer pSvc to make IWbemServices calls.
IWbemServices *pSvc = NULL;
BSTR namespace = SysAllocString(L"ROOT\\CimV2");
hres = pLoc->ConnectServer(namespace, NULL, NULL, 0, NULL, 0, 0, &pSvc);
SysFreeString(namespace);
if (FAILED(hres))
{
pLoc->Release();
CoUninitialize();
wcout << "ConnectServer() failure:" << hex << (unsigned long)hres;
return 0;
}
...
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWbemLocator "{DC12A687-737F-11CF-884D-00AA004B2E24}"
#usecom global IWbemLocator IID_IWbemLocator "{4590F811-1D3A-11D0-891F-00AA004B2E24}"
#comfunc global IWbemLocator_ConnectServer 3 wstr,wstr,wstr,wstr,int,wstr,sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。