다음을 통해 공유


ResUtilEnumResources 함수(resapi.h)

로컬 클러스터의 모든 리소스를 열거하고 각 리소스에 대해 사용자 정의 작업을 시작합니다. PRESUTIL_ENUM_RESOURCES 형식은 이 함수에 대한 포인터를 정의합니다.

구문

DWORD ResUtilEnumResources(
  [in] HRESOURCE           hSelf,
  [in] LPCWSTR             lpszResTypeName,
  [in] LPRESOURCE_CALLBACK pResCallBack,
  [in] PVOID               pParameter
);

매개 변수

[in] hSelf

클러스터 리소스에 대한 선택적 핸들입니다. hSelf로 식별된 리소스에 대해 콜백 함수가 호출되지 않습니다.

[in] lpszResTypeName

열거할 리소스의 scope 범위를 좁히는 리소스 유형의 이름에 대한 선택적 포인터입니다. lpszResTypeName을 지정하면 지정된 형식의 리소스만 열거됩니다.

[in] pResCallBack

열거된 각 리소스에 대해 호출되는 사용자 정의 함수에 대한 포인터입니다. 이 함수는 ResourceCallback 콜백 함수의 정의를 준수해야 합니다(매개 변수 이름은 정의의 일부가 아니며 명확성을 위해 여기에 추가됨).

DWORD (*LPRESOURCE_CALLBACK)( 
  HRESOURCE hSelf, 
  HRESOURCE hEnum, 
  PVOID pParameter 
);

[in] pParameter

콜백 함수에 모든 종류의 데이터를 전달할 수 있는 제네릭 버퍼입니다. ResUtilEnumResources 는 이 매개 변수를 전혀 사용하지 않으며 단순히 콜백 함수에 포인터를 전달합니다. 매개 변수에 대해 NULL 을 전달할 수 있는지 여부는 콜백 함수가 구현되는 방법에 따라 달라집니다.

반환 값

작업이 성공하거나 pResCallBackERROR_NO_MORE_ITEMS 반환하는 경우 함수는 ERROR_SUCCESS 반환합니다.

작업이 실패하면 함수는 열거형을 즉시 중지하고 콜백 함수에서 반환된 값을 반환합니다.

설명

ResUtilEnumResourcesClusterResourceEnum 함수 대신 편리하고 사용하기 쉬운 대안입니다.

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;
}

요구 사항

요구 사항
지원되는 최소 클라이언트 지원되는 버전 없음
지원되는 최소 서버 Windows Server 2008 Enterprise, Windows Server 2008 Datacenter
대상 플랫폼 Windows
헤더 resapi.h
라이브러리 ResUtils.lib
DLL ResUtils.dll

추가 정보

ClusterOpenEnum

OpenCluster

리소스 유틸리티 함수

ResourceCallback