Partager via


Fonction ResUtilPropertyListFromParameterBlock (resapi.h)

Construit une liste de propriétés à partir d’une table de propriétés et d’un bloc de paramètres.

Syntaxe

DWORD ResUtilPropertyListFromParameterBlock(
  [in]            const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  [out, optional] PVOID                        pOutPropertyList,
  [in, out]       LPDWORD                      pcbOutPropertyListSize,
  [in]            const LPBYTE                 pInParams,
  [out]           LPDWORD                      pcbBytesReturned,
  [out]           LPDWORD                      pcbRequired
);

Paramètres

[in] pPropertyTable

Pointeur vers une table de propriétés décrivant les propriétés qui seront incluses dans la liste de propriétés résultante.

[out, optional] pOutPropertyList

Pointeur vers une mémoire tampon de sortie qui reçoit la liste de propriétés.

[in, out] pcbOutPropertyListSize

Pointeur vers la taille de la mémoire tampon de sortie en octets.

[in] pInParams

Pointeur vers le bloc de paramètres dans lequel les valeurs de propriété sont stockées.

[out] pcbBytesReturned

Si la fonction retourne ERROR_SUCCESS, pcbBytesReturned pointe vers la taille d’octet réelle de la liste de propriétés pointée par pOutPropertyList. Si la fonction ne retourne pas ERROR_SUCCESS, pcbBytesReturned pointe vers une valeur zéro.

[out] pcbRequired

Si la fonction retourne ERROR_MORE_DATA, pcbRequired pointe vers la taille d’octet requise pour contenir la liste de propriétés. Si la fonction ne retourne pas ERROR_MORE_DATA, pcbBytesReturned pointe vers une valeur zéro.

Valeur retournée

Si l’opération réussit, la fonction retourne ERROR_SUCCESS.

Si l’opération échoue, la fonction retourne un code d’erreur système. Voici les codes d’erreur possibles.

Code de retour Description
ERROR_MORE_DATA
La mémoire tampon de sortie est trop petite pour contenir la liste de propriétés résultante.
ERROR_BAD_ARGUMENTS
Un ou plusieurs des paramètres d’entrée n’étaient pas valides.
ERROR_NOT_ENOUGH_MEMORY
Une erreur s’est produite lors de l’allocation de la mémoire.

Remarques

Dans cette fonction, la table de propriétés détermine l’ordre dans lequel les propriétés apparaissent dans la liste des propriétés, ainsi que le nom et le format de chaque propriété. La fonction lit la table de propriétés pour déterminer le nom et le format de chaque propriété.

Le bloc de paramètres fournit les valeurs de propriété.

Exemples

L’exemple suivant définit trois propriétés (Protocol, PortNumber et ConnectionName). Il utilise la fonction ResUtilPropertyListFromParameterBlock pour créer une liste de propriétés. Cet exemple utilise le fichier d’en-tête ClusDocEx.h défini dans la documentation du cluster de basculement.

//////////////////////////////////////////////////////////////////////

//  Be sure to create the following file before you compile.
//  For a code listing, see "ClusDocEx.h".
    #include "ClusDocEx.h"

//////////////////////////////////////////////////////////////////////

//  This example defines three fictional properties: 
//      Protocol (DWORD)
//      PortNumber (DWORD)
//      ConnectionName (PWSTR)
//  These properties are not associated with any cluster object.
//  They are used only to demonstrate the
//  ResUtilPropertyListFromParameterBlock function.

//  Protocol property constants
    #define PROP_NAME__PROTOCOL       L"Protocol"
    typedef enum PROTOCOLS{
        PROTOCOL_NONE = 0,
        PROTOCOL_BOTH = 1,
        PROTOCOL_TCP  = 2,
        PROTOCOL_UDP  = 3
    };
    #define PROP_MIN__PROTOCOL       (PROTOCOL_NONE)
    #define PROP_MAX__PROTOCOL       (PROTOCOL_UDP)
    #define PROP_DEFAULT__PROTOCOL   (PROTOCOL_BOTH)

//  PortNumber property
    #define PROP_NAME__PORTNUMBER     L"PortNumber"
    #define PROP_MIN__PORTNUMBER      (0)
    #define PROP_MAX__PORTNUMBER      (65536)
    #define PROP_DEFAULT__PORTNUMBER  (80)

//  ConnectionName property
    #define PROP_NAME__CONNECTIONNAME L"ConnectionName"

//  Parameter block
    typedef struct _PARAMBLOCK{
        DWORD dwProtocol;
        DWORD dwPortNumber;
        PWSTR pszConnectionName;
    } PARAMBLOCK; 
    
//  Property table
    RESUTIL_PROPERTY_ITEM
    pPropTable[] =
    {
        {   PROP_NAME__PROTOCOL, 
            NULL, 
            CLUSPROP_FORMAT_DWORD, 
            PROP_DEFAULT__PROTOCOL, 
            PROP_MIN__PROTOCOL, 
            PROP_MAX__PROTOCOL, 
            RESUTIL_PROPITEM_REQUIRED,  
            FIELD_OFFSET( _PARAMBLOCK, dwProtocol )        },

        {   PROP_NAME__PORTNUMBER,
            NULL, 
            CLUSPROP_FORMAT_DWORD, 
            PROP_DEFAULT__PORTNUMBER, 
            PROP_MIN__PORTNUMBER, 
            PROP_MAX__PORTNUMBER, 
            RESUTIL_PROPITEM_REQUIRED, 
            FIELD_OFFSET( _PARAMBLOCK, dwPortNumber )      },

        {   PROP_NAME__CONNECTIONNAME, 
            NULL, 
            CLUSPROP_FORMAT_SZ, 
                0, 0, 0, 0,
            FIELD_OFFSET( _PARAMBLOCK, pszConnectionName ) },

        { 0 }
    };

    int main()
    {
        DWORD nResult    = ERROR_SUCCESS,
              cbBufSize  = 1024,
              cbReturned = 0,
              cbRequired = 0;

        PVOID pPropList = LocalAlloc( LPTR, cbBufSize );

    //  Values for the property list
        PARAMBLOCK NewParams = { PROTOCOL_TCP, 21, L"FTP" };

        nResult = ResUtilPropertyListFromParameterBlock(
                      pPropTable,
                      pPropList,
                      &cbBufSize,
                      (LPBYTE) &NewParams,
                      &cbReturned,
                      &cbRequired );

        if( nResult == ERROR_MORE_DATA )
        {
            LocalFree( pPropList );

            cbBufSize = cbRequired;
            
            pPropList = LocalAlloc( LPTR, cbBufSize );

            nResult = ResUtilPropertyListFromParameterBlock(
                          pPropTable,
                          pPropList,
                          &cbBufSize,
                          (PBYTE) &NewParams,
                          &cbReturned,
                          &cbRequired );
        }

        ClusDocEx_DebugPrint( L"Results:", nResult );

        if( nResult == ERROR_SUCCESS )
            ClusDocEx_ShowBuffer( pPropList, cbReturned );    
    
        LocalFree( pPropList );
    
        return (int)( nResult != ERROR_SUCCESS );    
    }

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

RESUTIL_PROPERTY_ITEM