Поделиться через


Функция 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

См. также раздел

ClusterOpenEnum

OpenCluster

Функции служебной программы ресурсов

ResourceCallback