Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1020 lines
27 KiB

//////////////////////////////////////////////////////////////////////////////////////
// W2K TIF files import support
//
#include "stdafx.h"
#include <tiff.h>
#include <Sddl.h>
#include <shlobjp.h> // LinkWindow control
#define __FILE_ID__ 75
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#ifdef UNICODE
#define WM_IMPORT_PROGRESS_INC WM_APP + 3 // Increment Import progress bar
#define WM_IMPORT_SET_FILE_COUNT WM_APP + 4 // Set the file number to import
extern CClientConsoleApp theApp;
//
// Structure passed to the ImportArchiveFolder thread
//
struct ImportFolderParam
{
LPCWSTR cszImportFolder; // Import folder name
BOOL bSentItems; // TRUE if the folder contains outbound faxes
HWND hImportDlg; // Handle to the Import progress dialog
BOOL bCancel; // TRUE if the Cancel button has been pressed
};
DWORD
ImportArchiveFile(
LPCWSTR pszFile,
LPWSTR pszArchiveFolder,
BOOL bSentItems,
WCHAR* pszUserSid,
DWORDLONG* pdwlUniqueId
)
/*++
Routine name : ImportArchiveFile
Routine description:
Imports pszFile file to the pszArchiveFolder folder.
The pszFile should be generated by W2K MS Fax
Arguments:
pszFile - [in] Imported file name
pszArchiveFolder - [in] MS Fax archive folder name
bSentItems - [in] TRUE if the file from the sent archive, FALSE if it from receive one
pszUserSid - [in] The user string SID, can be NULL if(bSentItems == FALSE)
pdwlUniqueId - [out] Unique id for the file
Return Value:
Standard Win32 error code
--*/
{
DWORD dwRes = ERROR_SUCCESS;
DBG_ENTER(TEXT("ImportArchive"), dwRes);
WCHAR* pszFileExt = FAX_TIF_FILE_EXT;
WCHAR szArchFile[MAX_PATH] = {0};
MS_TAG_INFO msTags = {0};
//
// Generate unique file name in the archive folder
//
*pdwlUniqueId = GenerateUniqueFileName(pszArchiveFolder,
pszFileExt,
szArchFile,
ARR_SIZE(szArchFile));
if(*pdwlUniqueId == 0)
{
dwRes = GetLastError();
CALL_FAIL (GENERAL_ERR, TEXT ("GenerateUniqueFileName"), dwRes);
goto exit;
}
if(bSentItems)
{
//
// Add user user SID to the file name for the outbound archive
//
// Delete generated file without the user SID in the name
//
if(!DeleteFile(szArchFile))
{
CALL_FAIL (GENERAL_ERR, TEXT ("DeleteFile"), GetLastError());
}
//
// Add the user SID to the file name
//
if (_sntprintf(szArchFile,
ARR_SIZE(szArchFile) -1,
TEXT("%s\\%s$%I64X%s"),
pszArchiveFolder,
pszUserSid,
*pdwlUniqueId,
FAX_TIF_FILE_DOT_EXT) < 0)
{
dwRes = ERROR_BUFFER_OVERFLOW;
CALL_FAIL (GENERAL_ERR, TEXT ("Insufficient szArchFile buffer"), dwRes);
goto exit;
}
}
if(!CopyFile(pszFile, szArchFile, FALSE))
{
dwRes = GetLastError();
CALL_FAIL (GENERAL_ERR, TEXT ("CopyFile"), dwRes);
goto exit;
}
//
// Read W2K MS TIF tags from the file
//
dwRes = GetW2kMsTiffTags(szArchFile, &msTags, bSentItems);
if(ERROR_SUCCESS == dwRes)
{
//
// Add new (XP) MS TIF tags to the file
//
if(!TiffAddMsTags(szArchFile, &msTags, bSentItems))
{
dwRes = GetLastError();
CALL_FAIL (GENERAL_ERR, TEXT ("TiffAddMsTags"), dwRes);
if(!DeleteFile(szArchFile))
{
CALL_FAIL (GENERAL_ERR, TEXT ("DeleteFile"), GetLastError());
}
goto exit;
}
}
else if(ERROR_XP_TIF_FILE_FORMAT == dwRes)
{
//
// The TIF file already has new (XP) TIF tags
//
dwRes = ERROR_SUCCESS;
}
else
{
//
// The tiff file was not created by MS fax
//
if(!DeleteFile(szArchFile))
{
CALL_FAIL (GENERAL_ERR, TEXT ("DeleteFile"), GetLastError());
}
}
exit:
FreeMsTagInfo(&msTags);
return dwRes;
} // ImportArchiveFile
DWORD
WINAPI
ImportArchiveFolder(
LPVOID lpParameter // thread data
)
/*++
Routine name : ImportArchiveFolder
Routine description:
Imports fax (tif) files from the cstrImportFolder folder to the MS Fax archive.
Returns ERROR_FILE_NOT_FOUND if the folder does not contain TIF files
Arguments:
lpParameter - [in] pointer to ImportFolderParam structure
Return Value:
Standard Win32 error code
--*/
{
ImportFolderParam* pParam = (ImportFolderParam*)lpParameter;
DWORD dwRes = ERROR_SUCCESS;
DWORD dwError;
int nRes;
WCHAR szFindMask[MAX_PATH] = {0};
WCHAR szImportFile[MAX_PATH] = {0};
WIN32_FIND_DATA findData = {0};
HANDLE hFile = INVALID_HANDLE_VALUE;
HANDLE hFax = NULL;
PFAX_ARCHIVE_CONFIG pArchiveCfg = NULL;
PSID pUserSid = NULL;
WCHAR* pszUserSid = NULL;
DWORDLONG dwlUniqueId;
DWORD dwFileCount = 0;
DWORD dwNotifyMsgID = 0; // Windows message id used for notification
HMODULE hAdvapi32 = NULL;
BOOL (*pfConvertSidToStringSid)(PSID, LPTSTR*) = NULL; // pointer to ConvertSidToStringSid()
DBG_ENTER(TEXT("ImportFolderThread"), dwRes);
if(!IsWinXPOS())
{
//
// The Import functionality supported on XP OS only
//
ASSERTION_FAILURE;
return ERROR_CALL_NOT_IMPLEMENTED;
}
//
// ConvertSidToStringSid() Requires Windows 2000 or later, so we connect to it dynamically
//
hAdvapi32 = LoadLibrary(TEXT("advapi32.dll"));
if(!hAdvapi32)
{
dwRes = GetLastError();
CALL_FAIL (GENERAL_ERR, TEXT ("LoadLibrary(advapi32.dll)"), dwRes);
goto exit;
}
(FARPROC&)pfConvertSidToStringSid = GetProcAddress(hAdvapi32, "ConvertSidToStringSidW");
if(!pfConvertSidToStringSid)
{
dwRes = GetLastError();
CALL_FAIL (GENERAL_ERR, TEXT ("GetProcAddress(ConvertSidToStringSid)"), dwRes);
goto exit;
}
//
// Compose find mask: path\*.tif
//
_snwprintf(szFindMask, MAX_PATH-1, TEXT("%s\\%s"), pParam->cszImportFolder, FAX_TIF_FILE_MASK);
//
// Count TIF files in the pParam->cszImportFolder folder
//
// Find the first tif file in the cstrImportFolder
//
hFile = FindFirstFile(szFindMask, &findData);
if(INVALID_HANDLE_VALUE == hFile)
{
dwRes = GetLastError();
CALL_FAIL (GENERAL_ERR, TEXT ("FindFirstFile"), dwRes);
goto exit;
}
dwFileCount = 1;
for(;;)
{
//
// Find Next File
//
if(!FindNextFile(hFile, &findData))
{
dwError = GetLastError();
if(ERROR_NO_MORE_FILES != dwError)
{
dwRes = dwError;
CALL_FAIL (GENERAL_ERR, TEXT ("FindNextFile"), dwRes);
}
break;
}
dwFileCount += 1;
}
if(INVALID_HANDLE_VALUE != hFile)
{
FindClose(hFile);
}
if(pParam->hImportDlg)
{
//
// Set progress bar range
//
SendMessage(pParam->hImportDlg, WM_IMPORT_SET_FILE_COUNT, dwFileCount, 0);
}
//
// Find the first tif file in the cstrImportFolder
//
hFile = FindFirstFile(szFindMask, &findData);
if(INVALID_HANDLE_VALUE == hFile)
{
dwRes = GetLastError();
CALL_FAIL (GENERAL_ERR, TEXT ("FindFirstFile"), dwRes);
goto exit;
}
//
// Get fax server archive configuration
//
if(!FaxConnectFaxServer(NULL, &hFax))
{
dwRes = GetLastError();
CALL_FAIL (RPC_ERR, TEXT ("FaxConnectFaxServer"), dwRes);
goto exit;
}
//
// Get pointer to the Client Console archive folder
//
if(theApp.m_pMainWnd)
{
CClientConsoleDoc* pDoc = NULL;
pDoc = (CClientConsoleDoc*)((CFrameWnd*)theApp.m_pMainWnd)->GetActiveDocument();
if(pDoc)
{
//
// find local fax server
//
CServerNode* pServer = NULL;
pServer = pDoc->FindServerByName(NULL);
if(pServer)
{
//
// Get archive folder
//
CFolder* pFolder = NULL;
pFolder = pServer->GetFolder(pParam->bSentItems ? FOLDER_TYPE_SENT_ITEMS : FOLDER_TYPE_INBOX);
if(pFolder && pFolder->IsValid())
{
dwNotifyMsgID = pServer->GetNotifyMsgID();
}
}
}
}
//
// Access check
//
DWORD dwAccessRights;
if (!FaxAccessCheckEx(hFax,
pParam->bSentItems ? FAX_ACCESS_MANAGE_OUT_ARCHIVE : FAX_ACCESS_MANAGE_IN_ARCHIVE,
&dwAccessRights))
{
dwRes = GetLastError();
CALL_FAIL (RPC_ERR, TEXT ("FaxAccessCheckEx"), dwRes);
AlignedAfxMessageBox(IDS_IMPORT_NO_ACCESS, MB_OK | MB_ICONSTOP | MB_APPLMODAL);
goto exit;
}
if(!FaxGetArchiveConfiguration(hFax,
pParam->bSentItems ? FAX_MESSAGE_FOLDER_SENTITEMS : FAX_MESSAGE_FOLDER_INBOX,
&pArchiveCfg))
{
dwRes = GetLastError();
CALL_FAIL (RPC_ERR, TEXT ("FaxGetArchiveConfiguration"), dwRes);
goto exit;
}
BOOL bSameDir = FALSE;
if ((dwRes = CheckToSeeIfSameDir((LPTSTR)pArchiveCfg->lpcstrFolder,(LPTSTR)pParam->cszImportFolder,&bSameDir)) != ERROR_SUCCESS)
{
CALL_FAIL (RPC_ERR, TEXT ("CheckToSeeIfSameDir"), dwRes);
goto exit;
}
if (bSameDir)
{
AlignedAfxMessageBox(pParam->bSentItems ? IDS_IMPORT_SAME_DIR_SENT : IDS_IMPORT_SAME_DIR_INBOX
, MB_OK | MB_ICONSTOP | MB_APPLMODAL);
goto exit;
}
if(pParam->bSentItems)
{
//
// Get the user string SID for the outbound archive
//
pUserSid = GetCurrentThreadSID();
if (!pUserSid)
{
dwRes = GetLastError ();
CALL_FAIL (GENERAL_ERR, TEXT ("GetCurrentThreadSID"), dwRes);
goto exit;
}
if (!pfConvertSidToStringSid(pUserSid, &pszUserSid))
{
dwRes = GetLastError ();
CALL_FAIL (GENERAL_ERR, TEXT ("ConvertSidToStringSid"), dwRes);
goto exit;
}
}
while(!pParam->bCancel)
{
//
// Compose full path
//
_snwprintf(szImportFile, MAX_PATH-1, TEXT("%s\\%s\0"), pParam->cszImportFolder, findData.cFileName);
nRes = IDOK;
do
{
//
// Import the file
//
dwError = ImportArchiveFile(szImportFile,
pArchiveCfg->lpcstrFolder,
pParam->bSentItems,
pszUserSid,
&dwlUniqueId);
if(ERROR_SUCCESS != dwError)
{
CALL_FAIL (GENERAL_ERR, TEXT ("ImportArchiveFile"), dwRes);
//
// Popup "Cancel, Try Again, Continue" dialog
//
DWORD dwResId = IDS_IMPORT_ERROR;
WCHAR szFormat[MAX_PATH] = {0};
WCHAR szMsg[MAX_PATH] = {0};
if(ERROR_BAD_FORMAT == dwError)
{
dwResId = IDS_IMPORT_BAD_FORMAT;
}
else if(ERROR_XP_TIF_WITH_WRONG_ARCHIVE_TYPE == dwError)
{
dwResId = pParam->bSentItems ? IDS_IMPORT_FILE_NOT_SEND_TYPE : IDS_IMPORT_FILE_NOT_RECEIVE_TYPE;
}
if(LoadString(GetResourceHandle(),
dwResId,
szFormat,
ARR_SIZE(szFormat)))
{
_snwprintf(szMsg, MAX_PATH-1, szFormat, findData.cFileName);
nRes = AlignedAfxMessageBox(szMsg, MB_CANCELTRYCONTINUE | MB_ICONSTOP | MB_APPLMODAL);
if(IDCANCEL == nRes)
{
pParam->bCancel = TRUE;
}
}
else
{
CALL_FAIL (GENERAL_ERR, TEXT ("LoadString(IDS_IMPORT_ERROR)"), GetLastError());
}
}
}
while(nRes == IDTRYAGAIN);
if(dwNotifyMsgID)
{
//
// Add the message to the archive folder
// We simulate the server notification handled by the application main thread
// The notification handler should free the event data
//
FAX_EVENT_EX* pEvent = (FAX_EVENT_EX*)MemAlloc(sizeof(FAX_EVENT_EX));
if(!pEvent)
{
dwRes = ERROR_NOT_ENOUGH_MEMORY;
CALL_FAIL (GENERAL_ERR, TEXT ("MemAlloc"), dwRes);
goto exit;
}
ZeroMemory(pEvent, sizeof(FAX_EVENT_EX));
pEvent->dwSizeOfStruct = sizeof(FAX_EVENT_EX);
pEvent->EventType = pParam->bSentItems ? FAX_EVENT_TYPE_OUT_ARCHIVE : FAX_EVENT_TYPE_IN_ARCHIVE;
pEvent->EventInfo.JobInfo.Type = FAX_JOB_EVENT_TYPE_ADDED;
pEvent->EventInfo.JobInfo.dwlMessageId = dwlUniqueId;
theApp.m_pMainWnd->SendMessage(dwNotifyMsgID, 0, (LPARAM)pEvent);
}
if(pParam->hImportDlg)
{
//
// Increment progress bar
//
SendMessage(pParam->hImportDlg, WM_IMPORT_PROGRESS_INC, 0, 0);
}
//
// Find Next File
//
if(!FindNextFile(hFile, &findData))
{
dwError = GetLastError();
if(ERROR_NO_MORE_FILES != dwError)
{
dwRes = dwError;
CALL_FAIL (GENERAL_ERR, TEXT ("FindNextFile"), dwRes);
}
break;
}
} // while
//
// Notify the fax service
//
if(!FaxRefreshArchive(hFax,
pParam->bSentItems ? FAX_MESSAGE_FOLDER_SENTITEMS : FAX_MESSAGE_FOLDER_INBOX))
{
dwRes = GetLastError();
CALL_FAIL (GENERAL_ERR, TEXT ("FaxArchiveMessageAdded"), dwRes);
}
exit:
if(pParam->hImportDlg)
{
//
// Close the Progress dialog
//
SendMessage(pParam->hImportDlg, WM_CLOSE, 0, 0);
}
if(0 == dwFileCount)
{
//
// The folder does not contain faxes
//
AlignedAfxMessageBox(IDS_IMPORT_EMPTY_FOLDER, MB_OK | MB_ICONEXCLAMATION | MB_APPLMODAL);
}
if(INVALID_HANDLE_VALUE != hFile)
{
FindClose(hFile);
}
if(pArchiveCfg)
{
FaxFreeBuffer(pArchiveCfg);
}
if(hFax)
{
FaxClose(hFax);
}
if(pUserSid)
{
MemFree(pUserSid);
}
if(pszUserSid)
{
LocalFree(pszUserSid);
}
if(hAdvapi32)
{
FreeLibrary(hAdvapi32);
}
return dwRes;
} // ImportArchiveFolder
INT_PTR
CALLBACK
ImportDlgProc(
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
/*++
Routine description:
Import fax dialog procedure
Arguments:
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
Return Value:
return TRUE if it processed the message
--*/
{
static ImportFolderParam* pIpmParam = NULL;
static DWORD dwFileCount; // The number of the files to import
static DWORD dwCurrentFile; // The number of the currently imported file
switch ( uMsg )
{
case WM_INITDIALOG:
{
HANDLE hImportThread = NULL;
pIpmParam = (ImportFolderParam*)lParam;
TCHAR szFolder[MAX_PATH] = {0};
DBG_ENTER(TEXT("ImportDlgProc(WM_INITDIALOG)"));
dwFileCount = 0;
dwCurrentFile = 0;
//
// Set import folder name
//
if(LoadString(GetResourceHandle(),
pIpmParam->bSentItems ? IDS_IMPORT_TO_SENT_ITEMS : IDS_IMPORT_TO_INBOX,
szFolder,
ARR_SIZE(szFolder)))
{
SetDlgItemText(hwndDlg, IDC_PROGRESS_TITLE, szFolder);
}
else
{
CALL_FAIL (GENERAL_ERR, TEXT ("LoadString() for IDC_PROGRESS_TITLE"), GetLastError());
}
pIpmParam->hImportDlg = hwndDlg;
hImportThread = CreateThread(NULL, // SD
0, // initial stack size
ImportArchiveFolder, // thread function
(LPVOID)pIpmParam, // thread argument
0, // creation option
NULL); // thread identifier
if(!hImportThread)
{
CALL_FAIL (GENERAL_ERR, TEXT ("CreateThread"), GetLastError());
}
else
{
CloseHandle(hImportThread);
}
return TRUE;
}
case WM_IMPORT_PROGRESS_INC:
{
//
// Increment progress bar
//
SendDlgItemMessage(hwndDlg, IDC_PROGRESS_BAR, PBM_STEPIT, 0, 0);
//
// Compose and set currently imported fax number
//
++dwCurrentFile;
TCHAR szFormat[MAX_PATH] = {0};
TCHAR szText[MAX_PATH] = {0};
DWORD dwParam[2];
DBG_ENTER(TEXT("ImportDlgProc(WM_IMPORT_PROGRESS_INC)"));
dwParam[0] = dwCurrentFile;
dwParam[1] = dwFileCount;
if(!LoadString(GetResourceHandle(),
IDS_PROGRESS_NUMBER,
szFormat,
ARR_SIZE(szFormat)))
{
CALL_FAIL (GENERAL_ERR, TEXT ("LoadString(IDS_PROGRESS_NUMBER)"), GetLastError());
return TRUE;
}
if(FormatMessage(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY,
(LPCVOID)szFormat,
0,
0,
szText,
ARR_SIZE(szText),
(va_list*)dwParam))
{
SetDlgItemText(hwndDlg, IDC_PROGRESS_NUMBER, szText);
}
return TRUE;
}
case WM_IMPORT_SET_FILE_COUNT:
//
// Set the pange and step of the proggress bar
//
dwFileCount = wParam;
dwCurrentFile = 1;
SendDlgItemMessage(hwndDlg, IDC_PROGRESS_BAR, PBM_SETRANGE32, 0, dwFileCount);
SendDlgItemMessage(hwndDlg, IDC_PROGRESS_BAR, PBM_SETSTEP, 1, 0);
return TRUE;
case WM_CLOSE:
EndDialog(hwndDlg, IDCANCEL);
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDCANCEL:
//
// Mark cancel, don't close the dialog
//
pIpmParam->bCancel = TRUE;
EnableWindow(GetDlgItem(hwndDlg, IDCANCEL), FALSE);
return TRUE;
}
break;
} // switch ( uMsg )
return FALSE;
} // ImportDlgProc
DWORD
ImportArchiveFolderUI(
LPCWSTR cstrImportFolder,
BOOL bSentItems,
HWND hWnd
)
/*++
Routine name : ImportArchiveFolderUI
Routine description:
Opens the Import Progress dialog
Arguments:
cstrImportFolder - [in] Import folder name
bSentItems - [in] TRUE if the folder is the sent archive, FALSE if it is receive one
hWnd - [in] Parent window
Return Value:
Standard Win32 error code
--*/
{
DWORD dwRes = ERROR_SUCCESS;
ImportFolderParam impParam = {0};
impParam.cszImportFolder = cstrImportFolder;
impParam.bSentItems = bSentItems;
DBG_ENTER(TEXT("ImportArchiveFolderUI"), dwRes);
DialogBoxParam(GetResourceHandle(), // handle to module
MAKEINTRESOURCE(IDD_FAX_PROGRESS), // dialog box template
hWnd, // handle to owner window
ImportDlgProc, // dialog box procedure
(LPARAM)&impParam); // initialization value
return dwRes;
} // ImportArchiveFolderUI
BOOL
IsFaxArchive(
WCHAR* szFolder
)
/*++
Routine name : IsFaxArchive
Routine description:
Determine if the folder contains at least one TIF file
Arguments:
szFolder - [in] folder name
Return Value:
TRUE if if the folder contains at least one TIF file
FALSE otherwise
--*/
{
WCHAR szFindMask[MAX_PATH] = {0};
WIN32_FIND_DATA findData = {0};
HANDLE hFile = INVALID_HANDLE_VALUE;
DBG_ENTER(TEXT("IsFaxArchive"));
//
// Compose find mask: path\*.tif
//
_snwprintf(szFindMask, MAX_PATH-1, TEXT("%s\\%s"), szFolder, FAX_TIF_FILE_MASK);
//
// Find the first tif file in the cstrImportFolder
//
hFile = FindFirstFile(szFindMask, &findData);
if(INVALID_HANDLE_VALUE == hFile)
{
CALL_FAIL (GENERAL_ERR, TEXT ("FindFirstFile"), GetLastError());
return FALSE;
}
FindClose(hFile);
return TRUE;
}
INT_PTR
CALLBACK
ImportInfoDlgProc(
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
/*++
Routine description:
Import information fax dialog procedure
Arguments:
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
Return Value:
return TRUE if it processed the message
--*/
{
switch (uMsg)
{
case WM_INITDIALOG:
//
// Set focus on the OK button
//
SetFocus(GetDlgItem(hwndDlg, IDOK));
return FALSE;
case WM_NOTIFY :
{
LPNMHDR lpnm = (LPNMHDR) lParam;
if(((NM_CLICK == lpnm->code) || (NM_RETURN == lpnm->code)) &&
lpnm->idFrom == IDC_IMPORT_HELP_LINK)
{
//
// Display import help
//
HtmlHelpTopic(hwndDlg, FAX_HELP_IMPORT);
return TRUE;
}
}
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
case IDCANCEL:
EndDialog(hwndDlg, IDOK);
return TRUE;
}
break;
}
return FALSE;
} // ImportInfoDlgProc
DWORD
DetectImportFiles()
/*++
Routine name : DetectImportFiles
Routine description:
Determine if the system has W2K fax archives.
If yes warning dialog will be displayed for the first time.
Return Value:
Standard Win32 error code
--*/
{
DWORD dwRes = ERROR_SUCCESS;
HKEY hRegKey;
DWORD dwImportWrn = 0; // 1 if the import warning has been displayed
WCHAR* pszInbox = NULL;
WCHAR* pszSentItems = NULL;
DWORD dwSize = 0;
BOOL bHaveFax = FALSE; // TRUE if the archives contain at least one TIF file
DBG_ENTER(TEXT("DetectImportFiles"), dwRes);
if(!IsWinXPOS())
{
return dwRes;
}
//
// Check if the Import warning has been displayed
//
if ((hRegKey = OpenRegistryKey(HKEY_CURRENT_USER, REGKEY_FAX_SETUP, TRUE, KEY_ALL_ACCESS)))
{
dwImportWrn = GetRegistryDword(hRegKey, REGVAL_IMPORT_INFO);
if(!dwImportWrn)
{
SetRegistryDword(hRegKey, REGVAL_IMPORT_INFO, TRUE);
}
RegCloseKey(hRegKey);
}
else
{
CALL_FAIL (GENERAL_ERR, TEXT ("OpenRegistryKey"), GetLastError());
}
if(dwImportWrn)
{
//
// Import warning has been displayed
//
return dwRes;
}
//
// Read W2K archives location
//
if (!(hRegKey = OpenRegistryKey(HKEY_LOCAL_MACHINE, REGKEY_FAX_SETUP, TRUE, KEY_QUERY_VALUE)))
{
CALL_FAIL (GENERAL_ERR, TEXT ("OpenRegistryKey"), GetLastError());
return dwRes;
}
pszInbox = GetRegistryStringMultiSz(hRegKey, REGVAL_W2K_INBOX, NULL, &dwSize);
pszSentItems = GetRegistryString(hRegKey, REGVAL_W2K_SENT_ITEMS, NULL);
RegCloseKey(hRegKey);
//
// Determine if the archives have at least one TIF file
//
bHaveFax = IsFaxArchive(pszSentItems);
WCHAR* pszFolder = pszInbox;
while(!bHaveFax && pszFolder && *pszFolder)
{
//
// Walk though the multiline pszInbox string
//
bHaveFax = IsFaxArchive(pszFolder);
pszFolder = _wcsninc(pszFolder, wcslen(pszFolder)+1);
}
MemFree(pszInbox);
MemFree(pszSentItems);
if(bHaveFax)
{
if(!LinkWindow_RegisterClass())
{
dwRes = ERROR_CAN_NOT_COMPLETE;
CALL_FAIL (GENERAL_ERR, TEXT ("LinkWindow_RegisterClass"), dwRes);
return dwRes;
}
DialogBoxParam(GetResourceHandle(), // handle to module
MAKEINTRESOURCE(IDD_IMPORT_INFO), // dialog box template
theApp.m_pMainWnd->m_hWnd, // handle to owner window
ImportInfoDlgProc, // dialog box procedure
NULL); // initialization value
LinkWindow_UnregisterClass(theApp.m_hInstance);
}
return dwRes;
}
#endif //UNICODE