//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File:        backup.h
//
// Contents:    Cert Server Database interface implementation
//
//---------------------------------------------------------------------------


#include "resource.h"       // main symbols

class CCertDBBackup: public ICertDBBackup
{
public:
    CCertDBBackup();
    ~CCertDBBackup();

public:

    // IUnknown
    STDMETHODIMP QueryInterface(const IID& iid, void **ppv);
    ULONG STDMETHODCALLTYPE AddRef();
    ULONG STDMETHODCALLTYPE Release();

    // ICertDBBackup
    STDMETHOD(GetDBFileList)(
	IN OUT DWORD *pcwcList,
	OUT    WCHAR *pwszzList);		// OPTIONAL

    STDMETHOD(GetLogFileList)(
	IN OUT DWORD *pcwcList,
	OUT    WCHAR *pwszzList);		// OPTIONAL

    STDMETHOD(OpenFile)(
	IN WCHAR const *pwszFile,
	OPTIONAL OUT ULARGE_INTEGER *pliSize);

    STDMETHOD(ReadFile)(
	IN OUT DWORD *pcb,
	OUT    BYTE *pb);

    STDMETHOD(CloseFile)();

    STDMETHOD(TruncateLog)();

    // CCertDBBackup
    HRESULT Open(
	IN LONG grbitJet,
	IN CERTSESSION *pcs,
	IN ICertDB *pdb);

private:
    VOID _Cleanup();

    ICertDB     *m_pdb;
    CERTSESSION *m_pcs;

    LONG         m_grbitJet;
    BOOL         m_fBegin;
    BOOL         m_fFileOpen;
    BOOL         m_fTruncated;
    JET_HANDLE   m_hFileDB;

    // Reference count
    long         m_cRef;
};