Compartir a través de


Función ResUtilEnumResources (resapi.h)

Enumera todos los recursos del clúster local e inicia una operación definida por el usuario para cada recurso. El tipo PRESUTIL_ENUM_RESOURCES define un puntero a esta función.

Sintaxis

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

Parámetros

[in] hSelf

Identificador opcional para un recurso de clúster. La función de devolución de llamada no se invoca para un recurso identificado por hSelf.

[in] lpszResTypeName

Puntero opcional a un nombre de un tipo de recurso que limita el ámbito de los recursos que se van a enumerar. Si se especifica lpszResTypeName , solo se enumeran los recursos del tipo especificado.

[in] pResCallBack

Puntero a una función definida por el usuario a la que se llamará para cada recurso enumerado. Esta función debe ajustarse a la definición de la función de devolución de llamada ResourceCallback (tenga en cuenta que los nombres de parámetro no forman parte de la definición; se han agregado aquí para mayor claridad):

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

[in] pParameter

Búfer genérico que permite pasar cualquier tipo de datos a la función de devolución de llamada. ResUtilEnumResources no usa este parámetro en absoluto, simplemente pasa el puntero a la función de devolución de llamada. Si puede pasar NULL para el parámetro depende de cómo se implemente la función de devolución de llamada.

Valor devuelto

Si la operación se realiza correctamente o si pResCallBack devuelve ERROR_NO_MORE_ITEMS, la función devuelve ERROR_SUCCESS.

Si se produce un error en la operación, la función detiene inmediatamente la enumeración y devuelve el valor devuelto por la función de devolución de llamada.

Comentarios

ResUtilEnumResources es una alternativa cómoda y fácil de usar a la función ClusterResourceEnum .

ResUtilEnumResources debe ejecutarse en un nodo de clúster porque solo se conecta al clúster local. La función ResUtilEnumResourcesEx permite especificar un clúster remoto.

En el ejemplo siguiente se usa ResUtilEnumResources para enumerar los nombres y estados de todos los recursos del clúster.

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

Requisitos

Requisito Value
Cliente mínimo compatible No se admite ninguno
Servidor mínimo compatible Windows Server 2008 Enterprise, Windows Server 2008 Datacenter
Plataforma de destino Windows
Encabezado resapi.h
Library ResUtils.lib
Archivo DLL ResUtils.dll

Consulte también

ClusterOpenEnum

OpenCluster

Funciones de la utilidad de recursos

ResourceCallback