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 |