text: 
  //
  //  ATL debugging support turned on at debug version
  //  BUGBUG: the ATL thunking support is not enable yet in IA64
  //  When this will be enabled then enable it here also!
  //
  #ifdef _DEBUG
  #ifdef _M_IX86
  #define _ATL_DEBUG_INTERFACES
  #define _ATL_DEBUG_QI
  #define _ATL_DEBUG_REFCOUNT
  #endif
  #endif // _DEBUG
  
  class CTestVssWriter : public CVssWriter
      {
  public:
      enum
          {
          x_bitWaitIdentify = 1,
          x_bitWaitPrepareForBackup = 2,
          x_bitWaitPostSnapshot = 4,
          x_bitWaitBackupComplete = 8,
          x_bitWaitPreRestore = 16,
          x_bitWaitPostRestore = 32,
          x_bitWaitPrepareSnapshot = 64,
          x_bitWaitFreeze = 128,
          x_bitWaitThaw = 256,
          x_bitWaitAbort = 512,
          x_RestoreTestOptions_RestoreIfNotThere = 1
          };
  
      CTestVssWriter(bool bRestoreTest, bool bTestNewInterfaces, LONG lWait, LONG lRestoreTestOptions) :
          m_lWait(lWait),
          m_bRestoreTest(bRestoreTest),
          m_bTestNewInterfaces(bTestNewInterfaces),
          m_lRestoreTestOptions(lRestoreTestOptions),
          m_rghOpen(NULL),
          m_chOpen(0),
          m_chOpenMax(0)
          {
          }
  
      ~CTestVssWriter()
          {
          for(UINT ih = 0; ih < m_chOpen; ih++)
              CloseHandle(m_rghOpen[ih]);
  
          delete m_rghOpen;
          }
  
  
      void Initialize();
  
      virtual bool STDMETHODCALLTYPE OnIdentify(IN IVssCreateWriterMetadata *pMetadata);
  
      virtual bool STDMETHODCALLTYPE OnPrepareBackup(IN IVssWriterComponents *pComponent);
  
      virtual bool STDMETHODCALLTYPE OnPrepareSnapshot();
  
      virtual bool STDMETHODCALLTYPE OnFreeze();
  
      virtual bool STDMETHODCALLTYPE OnThaw();
  
      virtual bool STDMETHODCALLTYPE OnAbort();
      virtual bool STDMETHODCALLTYPE OnPostSnapshot(IN IVssWriterComponents *pComponent);
  
  
      virtual bool STDMETHODCALLTYPE OnBackupComplete(IN IVssWriterComponents *pComponent);
  
      virtual bool STDMETHODCALLTYPE OnBackupShutdown(IN VSS_ID SnapshotSetId);
  
      virtual bool STDMETHODCALLTYPE OnPreRestore(IN IVssWriterComponents *pComponent);
  
      virtual bool STDMETHODCALLTYPE OnPostRestore(IN IVssWriterComponents *pComponent);
  private:
      bool DoNewInterfacesTestIdentify(IVssCreateWriterMetadata* pMetadata);
  
      bool DoRestoreTestIdentify(IN IVssCreateWriterMetadata *pMetadata);
      bool DoRestoreTestPrepareBackup(IN IVssWriterComponents *pComponents);
      bool DoRestoreTestPreRestore(IN IVssWriterComponents *pComponents);
      bool DoRestoreTestPostRestore(IN IVssWriterComponents *pComponents);
      void DoAddComponent
          (
          IVssCreateWriterMetadata *pMetadata,
          LPCWSTR wszComponentName,
          LPCWSTR wszRootDirectory,
          LPCWSTR wszSubdirectory,
          LPCWSTR wszFilespec,
          LPCWSTR wszAlternateDirectory,
          bool selectable,
          bool selectableForRestore,
          LONG attributes
          );
  
      void CreateDirectoryName(LPWSTR buf);
      void CreateComponentFilesA(LPCWSTR buf, bool bKeepOpen);
      void CreateComponentFilesB(LPCWSTR buf, bool bKeepOpen);
      void CreateComponentFilesC(LPCWSTR buf, bool bKeepOpen);
      void VerifyComponentFilesA(LPCWSTR buf);
      void VerifyComponentFilesB(LPCWSTR buf);
      void VerifyComponentFilesC(LPCWSTR buf);
  
      void DoCreateFile
              (
              LPCWSTR wszPath,
              LPCWSTR wszFilename,
              DWORD length,
              bool bKeepOpen
              );
  
      void DoVerifyFile(LPCWSTR wszPath, LPCWSTR wszFilename, DWORD length);
  
      LONG m_lWait;
      LONG m_lRestoreTestOptions;
      bool m_bRestoreTest;
      bool m_bTestNewInterfaces;
      HANDLE *m_rghOpen;
      UINT m_chOpen;
      UINT m_chOpenMax;
      };
  
  
  