//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 2000-2001.
//
//  File:       SaferEntry.h
//
//  Contents:   Declaration of CSaferEntry
//
//----------------------------------------------------------------------------

#if !defined(AFX_SAFERENTRY_H__CF4D8002_5484_40E9_B4F6_CC4A0030D738__INCLUDED_)
#define AFX_SAFERENTRY_H__CF4D8002_5484_40E9_B4F6_CC4A0030D738__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <winsafer.h>
#include "cookie.h"
#include "certifct.h"
#include "SaferUtil.h"

typedef enum {
    SAFER_ENTRY_TYPE_UNKNOWN = 0,
    SAFER_ENTRY_TYPE_HASH,
    SAFER_ENTRY_TYPE_PATH,
    SAFER_ENTRY_TYPE_URLZONE,
    SAFER_ENTRY_TYPE_CERT
} SAFER_ENTRY_TYPE;

extern const DWORD AUTHZ_UNKNOWN_LEVEL;

class CSaferEntry : public CCertMgrCookie  
{
public:
	CSaferEntry (
            SAFER_ENTRY_TYPE    saferEntryType,
            bool bIsMachine, 
            PCWSTR pszMachineName, 
            PCWSTR pszObjectName, 
            PSAFER_IDENTIFICATION_HEADER pAuthzInfo,
            DWORD   dwLevelID,
            IGPEInformation* m_pGPEInformation,
            CCertificate*       pCertificate,
            CSaferEntries*      pSaferEntries,
            CRSOPObjectArray&   rRSOPArray,
            PCWSTR              pszRSOPRegistryKey = 0);

    virtual ~CSaferEntry();

public:
	virtual void Refresh ();
    CString GetRSOPRegistryKey () const;
	void SetHashFriendlyName (const CString& szFriendlyName);
	CString GetHashFriendlyName ();
	void SetURLZoneID (DWORD dwURLZoneID);
    int CompareLastModified (const CSaferEntry& saferEntry) const;
	HRESULT Delete (bool bCommit);
	HRESULT GetCertificate (CCertificate** ppCert);
	CString GetDescription ();
	HRESULT GetFlags (DWORD& dwFlags);
    HRESULT GetHash (
                BYTE rgbFileHash[SAFER_MAX_HASH_SIZE], 
                DWORD& cbFileHash, 
                __int64& m_nFileSize, 
                ALG_ID& algId) const;
	CString GetShortLastModified () const;
	CString GetLongLastModified () const;
	DWORD GetLevel () const;
	CString GetLevelFriendlyName () const;
	CString GetPath ();
	HRESULT GetSaferEntriesNode (CSaferEntries** ppSaferEntries);
    SAFER_ENTRY_TYPE GetType () const;
   	CString GetTypeString () const;
	DWORD GetURLZoneID() const;
    HRESULT PolicyChanged();
	HRESULT Save ();
	HRESULT SetCertificate (CCertificate* pCert);
	void SetDescription(const CString& szDescription);
	void SetFlags (DWORD dwFlags);
	HRESULT SetHash (
                BYTE    rgbFileHash[SAFER_MAX_HASH_SIZE], 
                DWORD   cbFileHash, 
                __int64 m_nFileSize, 
                ALG_ID   hashAlgid);
	HRESULT SetLevel (DWORD dwLevelID);
	void SetPath (const CString& szPath);
    CString GetDisplayName () const
    {
        return m_szDisplayName;
    }

private:
	CString m_szHashFriendlyName;
	DWORD                               m_dwFlags;
    PSAFER_IDENTIFICATION_HEADER   m_pAuthzInfo;
    DWORD                               m_dwLevelID;
    DWORD                               m_dwOriginalLevelID;
    CString                             m_szLevelFriendlyName;
    CCertificate*                       m_pCertificate;
    CSaferEntries*                      m_pSaferEntries;
    IGPEInformation*                    m_pGPEInformation;
    const SAFER_ENTRY_TYPE              m_saferEntryType;
    CString                             m_szDescription;
    CString                             m_szPath;
    bool                                m_bDeleted;
    BYTE                                m_rgbFileHash[SAFER_MAX_HASH_SIZE];
    DWORD                               m_cbFileHash;
    DWORD                               m_UrlZoneId;
    __int64                             m_nHashFileSize;
    ALG_ID                              m_hashAlgid;
    CString                             m_szDisplayName;
    CString                             m_szRSOPRegistryKey;
    const bool                          m_bIsComputer;
};

#endif // !defined(AFX_SAFERENTRY_H__CF4D8002_5484_40E9_B4F6_CC4A0030D738__INCLUDED_)