Freigeben über


ResUtilPropertyListFromParameterBlock-Funktion (resapi.h)

Erstellt eine Eigenschaftenliste aus einer Eigenschaftentabelle und einem Parameterblock.

Syntax

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
);

Parameter

[in] pPropertyTable

Zeiger auf eine Eigenschaftentabelle, die die Eigenschaften beschreibt, die in die resultierende Eigenschaftenliste aufgenommen werden.

[out, optional] pOutPropertyList

Zeiger auf einen Ausgabepuffer, der die Eigenschaftenliste empfängt.

[in, out] pcbOutPropertyListSize

Zeiger auf die Größe des Ausgabepuffers in Bytes.

[in] pInParams

Zeiger auf den Parameterblock, in dem die Eigenschaftswerte gespeichert sind.

[out] pcbBytesReturned

Wenn die Funktion ERROR_SUCCESS zurückgibt, verweist pcbBytesReturned auf die tatsächliche Bytegröße der Eigenschaftenliste, auf die pOutPropertyList verweist. Wenn die Funktion ERROR_SUCCESS nicht zurückgibt, zeigt pcbBytesReturned auf den Wert 0.

[out] pcbRequired

Wenn die Funktion ERROR_MORE_DATA zurückgibt, zeigt pcbRequired auf die Bytegröße, die erforderlich ist, um die Eigenschaftenliste zu enthalten. Wenn die Funktion nicht ERROR_MORE_DATA zurückgibt, zeigt pcbBytesReturned auf den Wert 0.

Rückgabewert

Wenn der Vorgang erfolgreich ist, gibt die Funktion ERROR_SUCCESS zurück.

Wenn der Vorgang fehlschlägt, gibt die Funktion einen Systemfehlercode zurück. Im Folgenden sind mögliche Fehlercodes aufgeführt.

Rückgabecode Beschreibung
ERROR_MORE_DATA
Der Ausgabepuffer ist zu klein, um die resultierende Eigenschaftsliste zu enthalten.
ERROR_BAD_ARGUMENTS
Mindestens ein Eingabeparameter war ungültig.
ERROR_NOT_ENOUGH_MEMORY
Bei der Zuweisung von Arbeitsspeicher ist ein Fehler aufgetreten.

Hinweise

In dieser Funktion bestimmt die Eigenschaftentabelle die Reihenfolge, in der die Eigenschaften in der Eigenschaftenliste angezeigt werden, sowie den Namen und das Format jeder Eigenschaft. Die Funktion liest die Eigenschaftentabelle, um den Namen und das Format der einzelnen Eigenschaften zu bestimmen.

Der Parameterblock stellt die Eigenschaftswerte bereit.

Beispiele

Im folgenden Beispiel werden drei Eigenschaften definiert (Protocol, PortNumber und ConnectionName). Sie verwendet die ResUtilPropertyListFromParameterBlock-Funktion , um eine Eigenschaftenliste zu erstellen. In diesem Beispiel wird die Headerdatei ClusDocEx.h verwendet, die in der Failoverclusterdokumentation definiert ist.

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

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Nicht unterstützt
Unterstützte Mindestversion (Server) Windows Server 2008 Enterprise, Windows Server 2008 Datacenter
Zielplattform Windows
Kopfzeile resapi.h
Bibliothek ResUtils.lib
DLL ResUtils.dll

Weitere Informationen

RESUTIL_PROPERTY_ITEM