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 |
---|---|
|
La mémoire tampon de sortie est trop petite pour contenir la liste de propriétés résultante. |
|
Un ou plusieurs des paramètres d’entrée n’étaient pas valides. |
|
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 |