//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//
//  Copyright (C) Microsoft Corporation, 1996 - 1999
//
//  File:       pagebase.h
//
//  This file contains the definition of the CSecurityPage base class
//
//--------------------------------------------------------------------------

#ifndef _PAGEBASE_H_
#define _PAGEBASE_H_

class CSecurityPage
{
protected:
    SI_PAGE_TYPE            m_siPageType;
    LPSECURITYINFO          m_psi;
    LPSECURITYINFO2         m_psi2;
    LPEFFECTIVEPERMISSION   m_pei;
    LPSecurityObjectTypeInfo m_psoti;
    HRESULT                 m_hrComInit;
    IDsObjectPicker         *m_pObjectPicker;
    SI_OBJECT_INFO          m_siObjectInfo;
    DWORD                   m_flLastOPOptions;
    BOOL                    m_bStandalone;
    BOOL                    m_bAbortPage;
    HRESULT                 m_hrLastPSPCallbackResult;

public:
    CSecurityPage( LPSECURITYINFO psi, SI_PAGE_TYPE siType );
    virtual ~CSecurityPage( void );

    HPROPSHEETPAGE CreatePropSheetPage(LPCTSTR pszDlgTemplate, LPCTSTR pszDlgTitle = NULL);
    HRESULT GetObjectPicker(IDsObjectPicker **ppObjectPicker = NULL);
    HRESULT GetUserGroup(HWND hDlg, BOOL bMultiSelect, PUSER_LIST *ppUserList);
    BOOL IsEffective(){ return (m_pei != NULL) ;}

protected:
#if(_WIN32_WINNT >= 0x0500)
    HRESULT InitObjectPicker(BOOL bMultiSelect);
#endif

    virtual BOOL DlgProc(HWND, UINT, WPARAM, LPARAM) = 0;
    virtual UINT PSPageCallback(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp);

    static INT_PTR CALLBACK _DlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
    static UINT CALLBACK _PSPageCallback(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp);
};

typedef class CSecurityPage *LPSECURITYPAGE;

#endif  /* _PAGEBASE_H_ */
