로컬 클러스터의 모든 리소스를 열거하고 각 리소스에 대해 사용자 정의 작업을 시작합니다. 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 을 전달할 수 있는지 여부는 콜백 함수가 구현되는 방법에 따라 달라집니다.
반환 값
작업이 성공하거나 pResCallBack 이 ERROR_NO_MORE_ITEMS 반환하는 경우 함수는 ERROR_SUCCESS 반환합니다.
작업이 실패하면 함수는 열거형을 즉시 중지하고 콜백 함수에서 반환된 값을 반환합니다.
설명
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;
}
요구 사항
| 요구 사항 | 값 |
|---|---|
| 지원되는 최소 클라이언트 | 지원되는 버전 없음 |
| 지원되는 최소 서버 | Windows Server 2008 Enterprise, Windows Server 2008 Datacenter |
| 대상 플랫폼 | Windows |
| 헤더 | resapi.h |
| 라이브러리 | ResUtils.lib |
| DLL | ResUtils.dll |