Partager via


Fonction ResUtilEnumResources (resapi.h)

Énumère toutes les ressources du cluster local et lance une opération définie par l’utilisateur pour chaque ressource. Le type PRESUTIL_ENUM_RESOURCES définit un pointeur vers cette fonction.

Syntaxe

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

Paramètres

[in] hSelf

Handle facultatif pour une ressource de cluster. La fonction de rappel n’est pas appelée pour une ressource identifiée par hSelf.

[in] lpszResTypeName

Pointeur facultatif vers un nom d’un type de ressource qui réduit l’étendue des ressources à énumérer. Si lpszResTypeName est spécifié, seules les ressources du type spécifié sont énumérées.

[in] pResCallBack

Pointeur vers une fonction définie par l’utilisateur qui sera appelée pour chaque ressource énumérée. Cette fonction doit être conforme à la définition de la fonction de rappel ResourceCallback (notez que les noms de paramètres ne font pas partie de la définition ; ils ont été ajoutés ici pour plus de clarté) :

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

[in] pParameter

Mémoire tampon générique qui vous permet de passer n’importe quel type de données à la fonction de rappel. ResUtilEnumResources n’utilise pas ce paramètre du tout, il transmet simplement le pointeur vers la fonction de rappel. La possibilité de passer la valeur NULL pour le paramètre dépend de la façon dont la fonction de rappel est implémentée.

Valeur retournée

Si l’opération réussit ou si pResCallBack retourne ERROR_NO_MORE_ITEMS, la fonction retourne ERROR_SUCCESS.

Si l’opération échoue, la fonction arrête immédiatement l’énumération et retourne la valeur retournée par la fonction de rappel.

Remarques

ResUtilEnumResources est une alternative pratique et facile à utiliser à la fonction ClusterResourceEnum .

ResUtilEnumResources doit être exécuté sur un nœud de cluster, car il se connecte uniquement au cluster local. La fonction ResUtilEnumResourcesEx vous permet de spécifier un cluster distant.

L’exemple suivant utilise ResUtilEnumResources pour répertorier les noms et les états de toutes les ressources du cluster.

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Aucun pris en charge
Serveur minimal pris en charge Windows Server 2008 Entreprise, Windows Server 2008 Datacenter
Plateforme cible Windows
En-tête resapi.h
Bibliothèque ResUtils.lib
DLL ResUtils.dll

Voir aussi

ClusterOpenEnum

OpenCluster

Fonctions de l’utilitaire de ressources

ResourceCallback