Win32 API 日本語リファレンス
ホーム › Networking.Clustering › PRESUTIL_ENUM_RESOURCES

PRESUTIL_ENUM_RESOURCES

コールバック

シグネチャ

DWORD PRESUTIL_ENUM_RESOURCES(
    HRESOURCE hSelf,
    LPWSTR lpszResTypeName,
    LPRESOURCE_CALLBACK pResCallBack,
    void* pParameter
);

パラメーター

フィールド型説明
hSelfHRESOURCEクラスターリソースへの省略可能なハンドルです。hSelf で指定されたリソースに対しては、コールバック関数は呼び出されません。
lpszResTypeNameLPWSTR列挙するリソースの範囲を絞り込むリソースの種類の名前への省略可能なポインターです。lpszResTypeName を指定した場合、指定した種類のリソースだけが列挙されます。
pResCallBackLPRESOURCE_CALLBACK

列挙された各リソースに対して呼び出される、ユーザー定義の関数へのポインターです。この関数は ResourceCallback コールバック関数の定義に従う必要があります(引数名は定義の一部ではなく、ここでは分かりやすさのために付けています)。

DWORD (*LPRESOURCE_CALLBACK)( 
  HRESOURCE hSelf, 
  HRESOURCE hEnum, 
  PVOID pParameter 
);
pParametervoid*コールバック関数に任意の種類のデータを渡すための汎用バッファーです。ResUtilEnumResources はこの引数をまったく使用せず、ポインターをコールバック関数に渡すだけです。この引数に NULL を渡せるかどうかは、コールバック関数の実装方法によります。

公式ドキュメント

ローカルクラスター内のすべてのリソースを列挙し、リソースごとにユーザー定義の操作を開始します。PRESUTIL_ENUM_RESOURCES 型は、この関数へのポインターを定義します。

戻り値

操作が成功した場合、または pResCallBack が ERROR_NO_MORE_ITEMS を返した場合、この関数は ERROR_SUCCESS を返します。

操作が失敗した場合、この関数は直ちに列挙を中止し、コールバック関数が返した値を返します。

解説(Remarks)

ResUtilEnumResources は、ClusterResourceEnum 関数に代わる、便利で使いやすい手段です。

ResUtilEnumResources はローカルクラスターにのみ接続するため、クラスターノード上で実行する必要があります。リモートのクラスターを指定するには、ResUtilEnumResourcesEx 関数を使用します。

次の例では、ResUtilEnumResources を使用して、クラスター内のすべてのリソースの名前と状態を一覧表示します。

//////////////////////////////////////////////////////////////////////
//  ClusDocEx_EnumDemo.cpp
//
//  Uses the ResUtilEnumResources function to list the names and 
//  states of all cluster resources.
//
//  To compile and run this example you will need two other examples 
//  from the documentation:  ClusDocEx.h (see "ClusDocEx.h") and 
//  ClusDocEx_GetControlCodeOutput.cpp (see "Getting Information with 
//  Control Codes").
// 
//////////////////////////////////////////////////////////////////////
#include "ClusDocEx.h"
#include "ClusDocEx_GetControlCodeOutput.cpp"

DWORD
MyCallbackFunction(
    HRESOURCE hSelf,
    HRESOURCE hCurrentEnum,
    PVOID pData );

LPRESOURCE_CALLBACK g_pMyCallbackFunction = &MyCallbackFunction;

int main( void )
{
    wprintf( L"\n\nResource (State)\n----------------\n" );
    DWORD dwResult = ResUtilEnumResources( 
                         NULL, 
                         NULL, 
                         g_pMyCallbackFunction, 
                         NULL );
    if( dwResult != ERROR_SUCCESS )
    {
        ClusDocEx_DebugPrint( L"ResUtilEnumResources returned an error.", dwResult );
        return 1;
    }
    else
        return 0;
}

DWORD
MyCallbackFunction(
    HRESOURCE hSelf,
    HRESOURCE hCurrentEnum,
    PVOID pData )
{
    DWORD dwResult           = ERROR_SUCCESS,
          cbNameSize         = 0, 
          dwState            = 0;

    WCHAR* pszState    = NULL;
    WCHAR* pszEnumName = ClusDocEx_ResGetControlCodeOutput(
                            hCurrentEnum,
                            NULL,
                            CLUSCTL_RESOURCE_GET_NAME,
                            &cbNameSize );
    if( pszEnumName == NULL )
    {
        dwResult = GetLastError();
        goto EndFunc;
    }

    dwState = GetClusterResourceState(
                  hCurrentEnum,
                  NULL,
                  NULL,
                  NULL,
                  NULL );
    switch( dwState )
    {
    case ClusterResourceOnline:
        pszState = L"Online";
        break;
    case ClusterResourceOffline:
        pszState = L"Offline";
        break;
    case ClusterResourcePending:
        pszState = L"Pending";
        break;
    case ClusterResourceOnlinePending:
        pszState = L"OnlinePending";
        break;
    case ClusterResourceOfflinePending:
        pszState = L"OfflinePending";
        break;
    case ClusterResourceFailed:
        pszState = L"Failed";
        break;
    case ClusterResourceInitializing:
        pszState = L"Initializing";
        break;
    default:
        pszState = L"Unknown";
        break;
    }
    wprintf( L"%ls (%ls)\n", pszEnumName, pszState );

EndFunc:
    LocalFree( pszEnumName );
    return dwResult;
}
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)