Функция 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
Необязательный указатель на имя типа ресурса, которое сужает область ресурсов для перечисления. Если указан параметр 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 Корпоративная, Windows Server 2008 Datacenter |
Целевая платформа | Windows |
Header | resapi.h |
Библиотека | ResUtils.lib |
DLL | ResUtils.dll |