/******************************************************************
   Copyright (c) 1999 Microsoft Corporation

   NlbsNic.H -- WMI provider class definition

   Generated by Microsoft WBEM Code Generation Engine
 
   Description: 
   

*******************************************************************/

// Property set identification
//============================

#ifndef _NlbsNic_H_
#define _NlbsNic_H_

#define PROVIDER_NAME_NLBSNIC L"NlbsNic"

#include "MNLBUIData.h"
#include "MNLBProviderSetting.h"

#include <vector>
using namespace std;

// Property name externs -- defined in NlbsNic.cpp
//=================================================

extern const WCHAR* pAdapterGuid ;
extern const WCHAR* pDependent ;
extern const WCHAR* pFriendlyName ;
extern const WCHAR* pFullName ;


class CNlbsNic : public Provider 
{
    public:
    

        // Constructor/destructor
        //=======================

        CNlbsNic(LPCWSTR lpwszClassName, LPCWSTR lpwszNameSpace);
        virtual ~CNlbsNic();

    protected:
        // Reading Functions
        //============================
        virtual HRESULT EnumerateInstances(MethodContext*  pMethodContext, long lFlags = 0L);
        virtual HRESULT GetObject(CInstance* pInstance, long lFlags = 0L);
        virtual HRESULT ExecQuery(MethodContext *pMethodContext, CFrameworkQuery& Query, long lFlags = 0L);

        // Writing Functions
        //============================
        virtual HRESULT PutInstance(const CInstance& Instance, long lFlags = 0L);
        virtual HRESULT DeleteInstance(const CInstance& Instance, long lFlags = 0L);

        // Other Functions
        virtual HRESULT ExecMethod( const CInstance& Instance,
                        const BSTR bstrMethodName,
                        CInstance *pInParams,
                        CInstance *pOutParams,
                        long lFlags = 0L );

        // TO DO: Declare any additional functions and accessor
        // functions for private data used by this class
        //===========================================================

    private:
        // All data members for CNlbsNic should be included here.   
    void
    GetVectorFromSafeArray( SAFEARRAY*&  stringArray, 
                            vector<_bstr_t>& strings );
    void
    RetreiveAndSetClusterProperties(CInstance *pInParams, 
                                    MNLBProviderSetting &nlbs,
                                    ClusterProperties& cp,
                                    const wstring&    fullName );

    void 
    FillInPortRules( ClusterData*           p_clusterData,
                     const _bstr_t&         myMachine,
                     const vector<_bstr_t>& portRules );


private:
    enum
    {
        PROTOCOL_BIND_DELAY = 20000,
        PROTOCOL_BIND_WAIT_INCREMENT = 1000
    };

    static WCHAR* version;
};

#endif
