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.
 
 
 
 
 
 

290 lines
6.0 KiB

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
faxui.c
Abstract:
Common routines for fax driver user interface
Environment:
Fax driver user interface
Revision History:
01/09/96 -davidx-
Created it.
mm/dd/yy -author-
description
--*/
#include "faxui.h"
#include "forms.h"
#include <shlobj.h>
#include <faxres.h>
#include <delayimp.h>
#ifdef UNICODE
#include <shfusion.h>
#endif // UNICODE
HANDLE g_hResource = NULL; // Resource DLL instance handle
HANDLE g_hModule = NULL; // DLL instance handle
HANDLE g_hFxsApiModule = NULL; // FXSAPI.DLL instance handle
HANDLE g_hFxsTiffModule = NULL; // FXSTIFF.DLL instance handle
INT _debugLevel = 1; // for debuggping purposes
BOOL g_bDllInitialied = FALSE; // TRUE if the DLL successfuly initialized
char g_szDelayLoadFxsApiName[64] = {0}; // Case sensitive name of FxsApi.dll for delay load mechanism
char g_szDelayLoadFxsTiffName[64] = {0}; // Case sensitive name of FxsTiff.dll for delay load mechanism
#ifdef UNICODE
BOOL g_bSHFusionInitialized = FALSE; // Fusion initialization flag
#endif // UNICODE
FARPROC WINAPI DelayLoadHandler(unsigned dliNotify,PDelayLoadInfo pdli)
{
switch (dliNotify)
{
case dliNotePreLoadLibrary:
if(!g_hFxsApiModule || !g_hFxsTiffModule)
{
Assert(FALSE);
}
if (_strnicmp(pdli->szDll, FAX_API_MODULE_NAME_A, strlen(FAX_API_MODULE_NAME_A))==0)
{
//
// Save the sensitive name DLL name for later use
//
strncpy(g_szDelayLoadFxsApiName, pdli->szDll, ARR_SIZE(g_szDelayLoadFxsApiName)-1);
// trying to load FXSAPI.DLL
return g_hFxsApiModule;
}
if (_strnicmp(pdli->szDll, FAX_TIFF_MODULE_NAME_A, strlen(FAX_TIFF_MODULE_NAME_A))==0)
{
//
// Save the sensitive name DLL name for later use
//
strncpy(g_szDelayLoadFxsTiffName, pdli->szDll, ARR_SIZE(g_szDelayLoadFxsTiffName)-1);
// trying to load FXSAPI.DLL
return g_hFxsTiffModule;
}
}
return 0;
}
PfnDliHook __pfnDliNotifyHook = DelayLoadHandler;
BOOL
DllMain(
HANDLE hModule,
ULONG ulReason,
PCONTEXT pContext
)
/*++
Routine Description:
DLL initialization procedure.
Arguments:
hModule - DLL instance handle
ulReason - Reason for the call
pContext - Pointer to context (not used by us)
Return Value:
TRUE if DLL is initialized successfully, FALSE otherwise.
--*/
{
switch (ulReason) {
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hModule);
g_hModule = hModule;
g_hResource = GetResInstance(hModule);
if(!g_hResource)
{
return FALSE;
}
break;
case DLL_PROCESS_DETACH:
HeapCleanup();
FreeResInstance();
break;
}
return TRUE;
}
BOOL
InitializeDll()
{
INITCOMMONCONTROLSEX CommonControlsEx = {sizeof(INITCOMMONCONTROLSEX),
ICC_WIN95_CLASSES|ICC_DATE_CLASSES };
if(g_bDllInitialied)
{
return TRUE;
}
// load FXSAPI.DLL
g_hFxsApiModule = LoadLibraryFromLocalFolder(FAX_API_MODULE_NAME, g_hModule);
if(!g_hFxsApiModule)
{
return FALSE;
}
// load FXSTIFF.DLL
g_hFxsTiffModule = LoadLibraryFromLocalFolder(FAX_TIFF_MODULE_NAME, g_hModule);
if(!g_hFxsTiffModule)
{
FreeLibrary(g_hFxsApiModule);
g_hFxsApiModule = NULL;
return FALSE;
}
#ifdef UNICODE
if (!SHFusionInitializeFromModuleID(g_hModule, SXS_MANIFEST_RESOURCE_ID))
{
Verbose(("SHFusionInitializeFromModuleID failed"));
}
else
{
g_bSHFusionInitialized = TRUE;
}
#endif // UNICODE
if (!InitCommonControlsEx(&CommonControlsEx))
{
Verbose(("InitCommonControlsEx failed"));
return FALSE;
}
g_bDllInitialied = TRUE;
return TRUE;
} // InitializeDll
VOID
UnInitializeDll()
{
#ifdef UNICODE
if (g_bSHFusionInitialized)
{
SHFusionUninitialize();
g_bSHFusionInitialized = FALSE;
}
#endif // UNICODE
}
INT
DisplayMessageDialog(
HWND hwndParent,
UINT type,
INT titleStrId,
INT formatStrId,
...
)
/*++
Routine Description:
Display a message dialog box
Arguments:
hwndParent - Specifies a parent window for the error message dialog
titleStrId - Title string (could be a string resource ID)
formatStrId - Message format string (could be a string resource ID)
...
Return Value:
NONE
--*/
{
LPTSTR pTitle, pFormat, pMessage;
INT result;
va_list ap;
pTitle = pFormat = pMessage = NULL;
if ((pTitle = AllocStringZ(MAX_TITLE_LEN)) &&
(pFormat = AllocStringZ(MAX_STRING_LEN)) &&
(pMessage = AllocStringZ(MAX_MESSAGE_LEN)))
{
//
// Load dialog box title string resource
//
if (titleStrId == 0)
titleStrId = IDS_ERROR_DLGTITLE;
if(!LoadString(g_hResource, titleStrId, pTitle, MAX_TITLE_LEN))
{
Assert(FALSE);
}
//
// Load message format string resource
//
if(!LoadString(g_hResource, formatStrId, pFormat, MAX_STRING_LEN))
{
Assert(FALSE);
}
//
// Compose the message string
//
va_start(ap, formatStrId);
wvsprintf(pMessage, pFormat, ap);
va_end(ap);
//
// Display the message box
//
if (type == 0)
type = MB_OK | MB_ICONERROR;
result = AlignedMessageBox(hwndParent, pMessage, pTitle, type);
} else {
MessageBeep(MB_ICONHAND);
result = 0;
}
MemFree(pTitle);
MemFree(pFormat);
MemFree(pMessage);
return result;
}