Share via


IEnumWbemClassObject::Next メソッド (wbemcli.h)

列挙体の現在位置から 1 つ以上のオブジェクトを取得するには、 IEnumWbemClassObject::Next メソッドを使用します。 このメソッドは、後続の呼び出しが後続のオブジェクトを返すように、 uCount オブジェクトによって列挙体内の現在位置を進めます。

構文

HRESULT Next(
  [in]  long             lTimeout,
  [in]  ULONG            uCount,
  [out] IWbemClassObject **apObjects,
  [out] ULONG            *puReturned
);

パラメーター

[in] lTimeout

呼び出しが戻るまでにブロックする最大時間をミリ秒単位で指定します。 定数 WBEM_INFINITE (0xFFFFFFFF) を使用すると、オブジェクトが使用可能になるまで呼び出しがブロックされます。 値 0 (WBEM_NO_WAIT) を使用すると、オブジェクトが使用可能かどうかに関係なく、呼び出しはすぐに返されます。

[in] uCount

要求されたオブジェクトの数。

[out] apObjects

uCount で指定された IWbemClassObject インターフェイス ポインターの数を保持するのに十分なストレージへのポインター。 このストレージは、呼び出し元によって提供される必要があります。 このパラメーターを NULL にすることはできません。 呼び出し元は、受信した各インターフェイス ポインターが不要になったときに Release を呼び出す必要があります。

[out] puReturned

返されたオブジェクトの数を受け取る ULONG へのポインター。 この数値は、 uCount で要求された数より小さくすることができます。 このポインターを NULL にすることはできません。

メモNext メソッドは、オブジェクトが正常に返された場合でも、列挙の最後に達したときにWBEM_S_FALSEを返します。 WBEM_S_NO_ERROR値は、返されるオブジェクトの数が uCount で要求された数と一致する場合にのみを返します。 WBEM_S_TIMEDOUT値は、返されるオブジェクトの数が要求された数より少ない場合に返されますが、列挙の最後にありません。 そのため、ループ終了ロジックを使用して puReturned 値を調べて、列挙体の末尾に到達したことを確認する必要があります。
 

戻り値

Next メソッドは、メソッド呼び出しの状態を示す HRESULT を返します。 次の一覧は、 HRESULT に含まれる値の一覧です。

注釈

ネットワークの問題によって Windows Management へのリモート接続が失われると、COM 固有のエラー コードが返される場合があります。 エラーが発生した場合は、COM 関数 GetErrorInfo を呼び出して、より多くのエラー情報を取得できます。

複数のオブジェクトが要求され、要求されたオブジェクトの数が返された場合、関数は WBEM_S_NO_ERRORを返します。 要求された数未満のオブジェクトが使用可能であり、列挙が完了した場合は、それらのオブジェクトが返され、関数は WBEM_S_FALSEを返します。

列挙が完了していない場合、呼び出しは、指定されたタイムアウトまでオブジェクトが使用可能になるまで待機します。オブジェクトを使用できるようになる前に列挙がタイムアウトした場合、関数は WBEM_S_TIMEDOUTを返します。

メモ シンクへのコールバックは、クライアントが必要とするのと同じ認証レベルで返されない可能性があるため、非同期通信の代わりに半同期を使用することをお勧めします。 詳細については、「メソッドの呼び出し」を参照してください。
 

C++ と WMI でクエリを作成する方法の詳細な説明と例については、「CodeProject での C++ での WMI クエリの 作成」を参照してください。

次のコードでは、複数の オブジェクトが要求されています。
HRESULT ProcessEnum( IEnumWbemClassObject*    pEnum )
{
    HRESULT    hRes = WBEM_S_NO_ERROR;

    // Final Next will return WBEM_S_FALSE
    while ( WBEM_S_NO_ERROR == hRes )
    {
        ULONG            uReturned;
        IWbemClassObject*    apObj[10];

        hRes = pEnum->Next( WBEM_INFINITE, 10, apObj, &uReturned );

        if ( SUCCEEDED( hRes ) )
        {
            // Do something with the objects.
            //ProcessObjects( uReturned,  apObj );

            for ( ULONG n = 0; n < uReturned; n++ )
            {
                apObj[n]->Release();
            }

        }    // If Enum succeeded...
    }    // While Enum is returning objects...

    return hRes;
}

要件

要件
サポートされている最小のクライアント Windows Vista
サポートされている最小のサーバー Windows Server 2008
対象プラットフォーム Windows
ヘッダー wbemcli.h (Wbemidl.h を含む)
Library Wbemuuid.lib
[DLL] Fastprox.dll

関連項目

WMI の列挙

IEnumWbemClassObject