Windows2003-3790/inetcore/outlookexpress/migrate/utility.h
2020-09-30 16:53:55 +02:00

128 lines
5.3 KiB
C

// --------------------------------------------------------------------------------
// Utility.h
// --------------------------------------------------------------------------------
#ifndef __UTILITY_H
#define __UTILITY_H
// --------------------------------------------------------------------------------
// Depends
// --------------------------------------------------------------------------------
#include <shared.h>
// --------------------------------------------------------------------------------
// DWORDALIGN
// --------------------------------------------------------------------------------
#define DWORDALIGN(_cb) ((_cb % 4 != 0) ? (_cb += (4 - (_cb % 4))) : _cb)
// --------------------------------------------------------------------------------
// DIRTYPE
// --------------------------------------------------------------------------------
typedef enum tagDIRTYPE {
DIR_IS_ROOT,
DIR_IS_LOCAL,
DIR_IS_NEWS,
DIR_IS_IMAP
} DIRTYPE;
// --------------------------------------------------------------------------------
// ACCOUNTINFO
// --------------------------------------------------------------------------------
typedef struct tagACCOUNTINFO *LPACCOUNTINFO;
typedef struct tagACCOUNTINFO {
CHAR szAcctId[CCHMAX_ACCOUNT_NAME];
CHAR szAcctName[CCHMAX_ACCOUNT_NAME];
CHAR szDirectory[MAX_PATH];
CHAR szDataDir[MAX_PATH];
CHAR szServer[CCHMAX_SERVER_NAME];
DWORD dwServer;
} ACCOUNTINFO;
// --------------------------------------------------------------------------------
// ACCOUNTTABLE
// --------------------------------------------------------------------------------
typedef struct tagACCOUNTTABLE {
DWORD cAccounts;
LPACCOUNTINFO prgAccount;
} ACCOUNTTABLE, *LPACCOUNTTABLE;
// --------------------------------------------------------------------------------
// FILETYPE
// --------------------------------------------------------------------------------
typedef enum tagFILETYPE {
FILE_IS_LOCAL_MESSAGES,
FILE_IS_NEWS_MESSAGES,
FILE_IS_IMAP_MESSAGES,
FILE_IS_POP3UIDL,
FILE_IS_LOCAL_FOLDERS,
FILE_IS_IMAP_FOLDERS,
FILE_IS_NEWS_SUBLIST,
FILE_IS_NEWS_GRPLIST
} FILETYPE;
// --------------------------------------------------------------------------------
// ENUMFILEINFO
// --------------------------------------------------------------------------------
typedef struct tagENUMFILEINFO {
LPSTR pszExt;
LPSTR pszFoldFile;
LPSTR pszUidlFile;
LPSTR pszSubList;
LPSTR pszGrpList;
BOOL fFindV1News;
} ENUMFILEINFO, *LPENUMFILEINFO;
// --------------------------------------------------------------------------------
// FILEINFO
// --------------------------------------------------------------------------------
typedef struct tagFILEINFO *LPFILEINFO;
typedef struct tagFILEINFO {
CHAR szFilePath[MAX_PATH + MAX_PATH];
CHAR szDstFile[MAX_PATH + MAX_PATH];
CHAR szAcctId[CCHMAX_ACCOUNT_NAME];
CHAR szFolder[255];
DWORD fMigrate;
HRESULT hrMigrate;
DWORD dwLastError;
DWORD cbFile;
DWORD cRecords;
DWORD cProgInc;
DWORD cProgCur;
DWORD cProgMax;
FILETYPE tyFile;
DWORD dwServer;
DWORD idFolder;
BOOL fInStore;
DWORD cUnread;
DWORD cMessages;
LPFILEINFO pNext;
} FILEINFO;
// --------------------------------------------------------------------------------
// PROGRESSINFO
// --------------------------------------------------------------------------------
typedef struct tagPROGRESSINFO {
HWND hwndProgress;
DWORD cCurrent;
DWORD cMax;
DWORD cPercent;
} PROGRESSINFO, *LPPROGRESSINFO;
// --------------------------------------------------------------------------------
// Prototypes
// --------------------------------------------------------------------------------
HRESULT EnumerateStoreFiles(LPCSTR pszPath, DIRTYPE tyDir, LPCSTR pszSubDir, LPENUMFILEINFO pEnumInfo, LPFILEINFO *ppHead);
HRESULT FreeFileList(LPFILEINFO *ppHead);
INT_PTR CALLBACK MigrageDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void IncrementProgress(LPPROGRESSINFO pProgress, LPFILEINFO pInfo);
HRESULT WriteMigrationLogFile(HRESULT hrMigrate, DWORD dwLastError, LPCSTR pszStoreRoot, LPCSTR pszMigrate, LPCSTR pszCmdLine, LPFILEINFO pHeadFile);
HRESULT BlobReadData(LPBYTE lpbBlob, ULONG cbBlob, ULONG *pib, LPBYTE lpbData, ULONG cbData);
HRESULT GetAvailableDiskSpace(LPCSTR pszFilePath, DWORDLONG *pdwlFree);
void ReplaceExtension(LPCSTR pszFilePath, LPCSTR pszExtNew, LPSTR pszFilePathNew, int cchFilePathNew);
HRESULT MyWriteFile(HANDLE hFile, DWORD faAddress, LPVOID pData, DWORD cbData);
void SetProgressFile(LPPROGRESSINFO pProgress, LPFILEINFO pInfo);
UINT MigrateMessageBox(LPCSTR pszMsg, UINT uType);
void InitializeCounters(LPMEMORYFILE pFile, LPFILEINFO pInfo, LPDWORD pcMax, LPDWORD pcbNeeded, BOOL fInflate);
HRESULT BuildAccountTable(HKEY hkeyBase, LPCSTR pszRegRoot, LPCSTR pszStoreRoot, LPACCOUNTTABLE pAcctTbl);
#endif // __UTILITY_H