/*++ Copyright (c) 1996 Microsoft Corporation Module Name: metasub.hxx Abstract: IIS MetaBase declarations for subroutines. Author: Michael W. Thomas 32-May-96 Revision History: --*/ #ifndef _metasub_ #define _metasub_ #define WSZSCHEMA_KEY_NAME1 L"SCHEMA" #define WSZSCHEMA_KEY_LENGTH1 (sizeof(WSZSCHEMA_KEY_NAME1)/sizeof(WCHAR))-1 #define WSZSCHEMA_KEY_NAME2 L"/SCHEMA" #define WSZSCHEMA_KEY_LENGTH2 (sizeof(WSZSCHEMA_KEY_NAME2)/sizeof(WCHAR))-1 #define WSZSCHEMA_KEY_NAME3 L"\\SCHEMA" #define WSZSCHEMA_KEY_LENGTH3 (sizeof(WSZSCHEMA_KEY_NAME3)/sizeof(WCHAR))-1 #define SZSCHEMA_KEY_NAME1 "SCHEMA" #define SZSCHEMA_KEY_LENGTH1 (sizeof(SZSCHEMA_KEY_NAME1)/sizeof(CHAR))-1 #define SZSCHEMA_KEY_NAME2 "/SCHEMA" #define SZSCHEMA_KEY_LENGTH2 (sizeof(SZSCHEMA_KEY_NAME2)/sizeof(CHAR))-1 #define SZSCHEMA_KEY_NAME3 "\\SCHEMA" #define SZSCHEMA_KEY_LENGTH3 (sizeof(SZSCHEMA_KEY_NAME3)/sizeof(CHAR))-1 inline void INCREMENT_SCHEMA_CHANGE_NUMBER( METADATA_HANDLE handle, CMDHandle* object, LPSTR path, BOOL bUnicode) { if((handle) != METADATA_MASTER_ROOT_HANDLE) { if(NULL != object) { if((object)->IsSchemaHandle()) g_dwSchemaChangeNumber ++; } } else if((NULL != path) && (0 != *path)) { if(bUnicode) { if((0 == _wcsnicmp((LPWSTR)(path), WSZSCHEMA_KEY_NAME1, WSZSCHEMA_KEY_LENGTH1)) || (0 == _wcsnicmp((LPWSTR)(path), WSZSCHEMA_KEY_NAME2, WSZSCHEMA_KEY_LENGTH2)) || (0 == _wcsnicmp((LPWSTR)(path), WSZSCHEMA_KEY_NAME3, WSZSCHEMA_KEY_LENGTH3)) ) g_dwSchemaChangeNumber ++; } else { if((0 == _strnicmp((LPSTR)(path), SZSCHEMA_KEY_NAME1, SZSCHEMA_KEY_LENGTH1)) || (0 == _strnicmp((LPSTR)(path), SZSCHEMA_KEY_NAME2, SZSCHEMA_KEY_LENGTH2)) || (0 == _strnicmp((LPSTR)(path), SZSCHEMA_KEY_NAME3, SZSCHEMA_KEY_LENGTH3)) ) g_dwSchemaChangeNumber ++; } } } HRESULT ConstructHistoryFileName(LPWSTR* o_wszHistoryFile, LPWSTR i_wszHistroyFileDir, ULONG i_cchHistoryFileDir, LPWSTR i_wszFileNameWithoutPathWithoutExtension, ULONG i_cchFileNameWithoutPathWithoutExtension, LPWSTR i_wszFileNameExtension, ULONG i_cchFileNameExtension, DWORD i_dwMajorVersion, DWORD i_dwMinorVersion); HRESULT ParseVersionNumber(IN LPWSTR i_wszFileName, IN OUT DWORD* io_pdwMinor, IN OUT DWORD* io_pdwMajor); HRESULT ParseVersionNumber(LPWSTR i_wszFileName, ULONG i_cchFileNameUntilFirstUnderscore, ULONG* o_ulVersionMinor, ULONG* o_ulVersionMajor); HRESULT ConstructHistoryFileNameWithoutMinorVersion(LPWSTR* o_wszHistoryFileNameWithoutMinorVersion, ULONG* o_iStartMinorVersion, LPWSTR i_wszHistroyFileSearchString, ULONG i_cchHistoryFileSearchString, LPWSTR i_wszFileNameExtension, ULONG i_cchFileNameExtension, ULONG i_ulMajorVersion); HRESULT SetSecurityOnFile(LPWSTR i_wszFileSrc, LPWSTR i_wszFileDest); HRESULT GetObjectFromPath( OUT CMDBaseObject *&rpboReturn, IN METADATA_HANDLE hHandle, IN DWORD dwPermissionNeeded, IN OUT LPTSTR &strPath, IN BOOL bUnicode = FALSE); HRESULT GetObjectFromPathWithHandle( OUT CMDBaseObject *&rpboReturn, IN METADATA_HANDLE hHandle, IN CMDHandle *hHandleObject, IN DWORD dwPermissionNeeded, IN OUT LPTSTR &strPath, IN BOOL bUnicode = FALSE); HRESULT AddObjectToDataBase( IN METADATA_HANDLE hHandle, IN CMDHandle *hHandleObject, IN LPTSTR strPath, IN BOOL bUnicode = FALSE); HRESULT RemoveObjectFromDataBase(IN METADATA_HANDLE hHandle, IN CMDHandle *hHandleObject, IN LPTSTR strPath, IN BOOL bUnicode = FALSE); CMDHandle *GetHandleObject( IN METADATA_HANDLE MetaDataHandle); BOOL PermissionsAvailable( IN CMDBaseObject *pboTest, IN DWORD dwRequestedPermissions, IN DWORD dwReadThreshhold ); HRESULT AddHandle( CMDBaseObject *pboAssociated, DWORD dwRequestedPermissions, METADATA_HANDLE &rmhNew, BOOLEAN SchemaHandle ); CMDHandle * RemoveHandleObject( IN METADATA_HANDLE hHandle ); VOID AddPermissions( IN CMDBaseObject *pboAffected, IN DWORD dwRequestedPermissions ); VOID RemovePermissions( IN CMDBaseObject *pboAffected, IN DWORD dwRemovePermissions ); HRESULT SaveAllData( IN BOOL bSetSaveDisallowed, IN IIS_CRYPTO_STORAGE *pCryptoStorage, IN PIIS_CRYPTO_BLOB pSessionKeyBlob, IN LPWSTR pwszBackupLocation = NULL, IN LPWSTR pwszSchemaLocation = NULL, IN METADATA_HANDLE hHandle = METADATA_MASTER_ROOT_HANDLE, IN BOOL bHaveReadSaveSemaphore = FALSE, IN BOOL bTerminating = FALSE ); HRESULT SaveSomeData( IN BOOL i_bSaveInherited, IN BOOL i_bSaveNodeOnly, IN BOOL i_bOverwriteFile, IN IIS_CRYPTO_STORAGE* i_pCryptoStorage, IN PIIS_CRYPTO_BLOB i_pSessionKeyBlob, IN LPCWSTR i_wszBackupLocation, IN METADATA_HANDLE i_hHandle, IN LPCWSTR i_wszSourcePath = NULL, IN BOOL i_bHaveReadSaveSemaphore = FALSE ); HRESULT SaveTree( IN HANDLE hFileHandle, IN CMDBaseObject *pboRoot, IN PBYTE pbLineBuf, IN BUFFER *pbufParentPath, IN DWORD dwWriteBufSize, IN PBYTE pbWriteBuf, IN OUT PBYTE &pbrNextPtr, IN IIS_CRYPTO_STORAGE *pCryptoStorage ); HRESULT SaveMasterRoot(HANDLE hFileHandle, PBYTE pbLineBuf, DWORD dwWriteBufSize, PBYTE pbWriteBuf, PBYTE &pbrNextPtr, IIS_CRYPTO_STORAGE *pCryptoStorage ); DWORD MDTypeToRegType( DWORD dwMDType); HRESULT SaveDataObject(HANDLE hFileHandle, CMDBaseData *pbdSave, PBYTE pbLineBuf, DWORD dwWriteBufSize, PBYTE pbWriteBuf, PBYTE &pbrNextPtr, IIS_CRYPTO_STORAGE *pCryptoStorage ); HRESULT ReadSomeDataFromXML( IN LPSTR i_pszPasswd, IN LPWSTR i_wszFileName, IN LPWSTR i_wszSourcePath, IN LPCWSTR i_wszKeyType, IN DWORD i_dwMDFlags, IN BOOL i_bHaveReadSaveSemaphore, OUT CMDBaseObject **o_ppboNew ); HRESULT ReadAllData(LPSTR pszPasswd, LPSTR pszBackupLocation, LPSTR pszSchemaLocation, BOOL bHaveReadSaveSemaphore = FALSE ); // // Next two routines used by EnumBackups and EnumHistory, respectively, to // validate enumerated files. // BOOL CheckDigits(LPTSTR pszString); HRESULT GetMostRecentHistoryFile( LPCWSTR i_wszPattern, DWORD* io_pdwMajor, DWORD* io_pdwMinor); HRESULT EnumFiles(IN LPWSTR i_wszPattern, IN DWORD i_dwMDEnumIndex, OUT DWORD *o_pdwMajor, OUT DWORD *o_pdwMinor, OUT PFILETIME o_pftMDBackupTime); HRESULT CopyMetaObject( IN METADATA_HANDLE hMDSourceHandle, IN unsigned char *pszMDSourcePath, BOOL bUseSourceHandle, CMDBaseObject* pboSource, IN METADATA_HANDLE hMDDestHandle, IN unsigned char *pszMDDestPath, IN BOOL bMDOverwriteFlag, IN BOOL bMDCopyFlag, IN BOOL bUnicode); HRESULT ReadMetaObject( IN CMDBaseObject *&cboRead, IN BUFFER *pbufLine, IN DWORD dwLineLen, IN IIS_CRYPTO_STORAGE * pCryptoStorage, IN BOOL bUnicode); HRESULT ReadDataObject( IN CMDBaseObject *cboAssociated, IN BUFFER *pbufLine, IN DWORD dwLineLen, IN IIS_CRYPTO_STORAGE * pCryptoStorage, IN BOOL bUnicode ); HRESULT ReadDataObject( IN CMDBaseObject* cboAssociated, LPVOID* a_pv, ULONG* a_Size, IN IIS_CRYPTO_STORAGE* pCryptoStorage, IN BOOL bUnicode); HRESULT FlushWriteBuf(HANDLE hWriteFileHandle, PBYTE pbWriteBuf, PBYTE &pbrNextPtr); HRESULT WriteLine(HANDLE hWriteFileHandle, DWORD dwWriteBufSize, PBYTE pbWriteBuf, PBYTE pbLineBuf, PBYTE &pbNextPtr, DWORD dwLineLen, BOOL bTerminate); PBYTE FindEndOfData(PBYTE pbNextPtr, PBYTE pbEndReadData, BOOL bEscapePending); DWORD GetLineFromBuffer(PBYTE &pbrNextPtr, PBYTE &pbrEndReadData, BUFFER *pbufLine, DWORD &dwrLineLen, BOOL &brEscapePending); HRESULT GetNextLine( IN HANDLE hReadFileHandle, IN OUT PBYTE &pbrEndReadData, IN BUFFER *pbufRead, IN OUT BUFFER *pbufLine, IN OUT DWORD &dwrLineLen, IN OUT PBYTE &pbrNextPtr); DWORD GetLineID( IN OUT LPTSTR &strCurPtr); HRESULT GetWarning( IN HRESULT hresWarningCode); HRESULT InitWorker(BOOL bHaveReadSaveSemaphore, LPSTR pszPasswd, LPSTR pszBackupLocation, LPSTR pszSchemaLocation); HRESULT TerminateWorker1( IN BOOL bHaveReadSaveSemaphore ); VOID TerminateWorker(); VOID InitializeGlobalsToNull(); HRESULT SetStorageSecurityDescriptor(); VOID ReleaseStorageSecurityDescriptor(); HRESULT ExtractNameFromPath( IN OUT LPSTR &strPath, OUT LPSTR strNameBuffer, IN BOOL bUnicode = FALSE); HRESULT ExtractNameFromPath( IN OUT LPWSTR *pstrPath, OUT LPWSTR strNameBuffer); HRESULT RemoveLastPartOfPath( IN OUT LPWSTR i_wszPath, IN int i_iLen); BOOL ValidateData(IN PMETADATA_RECORD pmdrData, IN BOOL bUnicode = FALSE); BOOL DataMatch(IN CMDBaseObject *pbdExisting, IN PMETADATA_RECORD pmdrData, OUT PBOOL pbError, IN BOOL bUnicode = FALSE); VOID DeleteDataObject( IN CMDBaseData *pbdDelete); VOID DeleteAllRemainingDataObjects(); CMDBaseData * MakeDataObject(IN PMETADATA_RECORD pmdrMDData, IN BOOL bUnicode = FALSE); BOOL ValidateBackupLocation(LPSTR pszBackupLocation, BOOL bUnicode); DWORD GetBackupNameLen(LPSTR pszBackupName); DWORD GetBackupNameLen(LPWSTR pszBackupName); HRESULT GetHighestVersion(IN OUT STRAU *pstrauBackupLocation, OUT DWORD *pdwVersion); HRESULT CreateBackupFileName(IN LPSTR pszMDBackupLocation, IN DWORD dwMDVersion, IN BOOL bUnicode, IN OUT STRAU *pstrauBackupLocation, IN OUT STRAU *pstrauSchemaLocation); HRESULT SetBackupPath(LPSTR pszBackupPath); HRESULT SetGlobalDataFileValues(LPTSTR pszFileName); HRESULT SetUnicodeGlobalDataFileValues(); void InitializeUnicodeGlobalDataFileValues(); void UnInitializeUnicodeGlobalDataFileValues(); HRESULT InitSessionKey(ISimpleTableRead2* pSITProperty, IIS_CRYPTO_STORAGE** ppStorage, LPSTR pszPasswd); HRESULT SetDataFile(); DWORD GetObjectPath(CMDBaseObject *pboObject, BUFFER *pbufPath, DWORD &rdwStringLen, CMDBaseObject *pboTopObject, IN BOOL bUnicode = FALSE); HRESULT MakeInsertPathData(STRAU *pstrauData, LPTSTR pszPath, LPTSTR pszData, DWORD *pdwDataLen, IN BOOL bUnicode = FALSE); HRESULT InsertPathIntoData(BUFFER *pbufNewData, STRAU *pstrData, PBYTE *ppbNewData, DWORD *pdwNewDataLen, CMDBaseData *pbdRetrieve, METADATA_HANDLE hHandle, CMDBaseObject *pboDataMetaObject, IN BOOL bUnicode = FALSE); HRESULT ReplaceMasterRoot( CMDBaseObject* i_pboNew, CMDHandle* i_phoRootHandle); HRESULT MakeTreeCopyWithPath(CMDBaseObject *pboSource, CMDBaseObject *&rpboNew, LPSTR pszPath, IN BOOL bUnicode = FALSE); HRESULT MakeTreeCopy(CMDBaseObject *pboSource, CMDBaseObject *&pboNew, LPSTR pszName = NULL, IN BOOL bUnicode = FALSE); void AddNewChangeData(CMDHandle *phoDestParentHandle, CMDBaseObject *pboNew); HRESULT CopyTree(CMDHandle *phoDestParentHandle, CMDBaseObject *pboDest, CMDBaseObject *pboSource, BOOL &rbChanged); void CheckForNewMetabaseVersion(); HRESULT CheckForSetup(); BOOL CheckVersionNumber(); VOID SkipPathDelimeter(IN OUT LPSTR &rpszPath, IN BOOL bUnicode = FALSE); BOOL IsStringTerminator(IN LPTSTR pszString, IN BOOL bUnicode = FALSE); #define IsSecureMetadata(id,att) \ (((DWORD)(att) & METADATA_SECURE) != 0) HRESULT InitStorageAndSessionKey( IN IIS_CRYPTO_STORAGE *pCryptoStorage, OUT PIIS_CRYPTO_BLOB *ppSessionKeyBlob ); HRESULT InitStorageAndSessionKey2( IN LPSTR pszPasswd, IN IIS_CRYPTO_STORAGE *pCryptoStorage, OUT PIIS_CRYPTO_BLOB *ppSessionKeyBlob ); HRESULT GetLastHResult(); HRESULT BackupCertificates (LPCWSTR backupName,PCHAR lpszToPath,PCHAR lpszFromPath); HRESULT RestoreCertificates (LPCWSTR backupName,PCHAR lpszFromPath,PCHAR lpszToPath); HRESULT LogEvent(ICatalogErrorLogger2* pLogger, DWORD dwError, DWORD dwErrorType, DWORD dwErrorCategory, DWORD dwHr, WCHAR* pString1 = NULL, WCHAR* pString2 = NULL, WCHAR* pString3 = NULL, WCHAR* pString4 = NULL, WCHAR* pString5 = NULL); DWORD GetMetabaseType(DWORD i_dwType, DWORD i_dwMetaFlags); HRESULT ReAllocateFileData(ULONG i_iFileData, METABASE_FILE_DATA** io_aFileData, ULONG* io_pcFileData, BOOL* io_pbReAlloced); void ResetFileAttributesIfNeeded(LPTSTR pszFile, BOOL bUnicode); HRESULT GetGlobalValue(ISimpleTableRead2* pISTProperty, LPCWSTR wszName, ULONG* pcbSize, LPVOID* ppVoid); HRESULT CompileIntoBinFromSchemaFile(IMetabaseSchemaCompiler* i_pCompiler, LPCWSTR i_wszSchemaFileName); HRESULT CompileIntoBin(IMetabaseSchemaCompiler* i_pCompiler, LPCWSTR i_wszSchemaExtensionFileName, LPCWSTR i_wszSchemaFileName); int _cdecl MyCompareFileData(const void *a, const void *b); #endif