/*++ Copyright (c) 1996 Microsoft Corporation Module Name: faxapi.h Abstract: This module contains all includes to the FAX client DLL. All objects in this DLL should include this header only. Author: Wesley Witt (wesw) 12-Jan-1996 --*/ #define _WINFAX_ #include #include #include #include #include #include #include #include #include #include #include "jobtag.h" #include "faxreg.h" #include "prtcovpg.h" #include "faxutil.h" #include "faxrpc.h" #include "faxcli.h" #include "faxext.h" #include "faxsvcrg.h" #include "rpcutil.h" #include "tiff.h" #include "tifflib.h" #include "fxsapip.h" #include "devmode.h" #include "shlwapi.h" #include "FaxRpcLimit.h" typedef enum { FHT_SERVICE, // Handle to server (FaxConnectFaxServer) FHT_PORT, // Port Handle (FaxOpenPort) FHT_MSGENUM // Message enumeration handle (FaxStartMessagesEnum) } FaxHandleType; #define TAPI_LIBRARY TEXT("%systemroot%\\system32\\tapi32.dll") #define ARGUMENT_PRESENT(ArgumentPointer) ((CHAR *)(ArgumentPointer) != (CHAR *)(NULL)) #define FixupStringPtr(_buf,_str) \ if (_str) \ { \ LPTSTR * lpptstr = (LPTSTR *)&(_str) ; \ *lpptstr = (LPTSTR)((LPBYTE)(*(_buf)) + (ULONG_PTR)(_str)); \ } #define FixupStringPtrW(_buf,_str) \ if (_str) \ { \ LPWSTR * lppwstr = (LPWSTR *)&(_str) ; \ *lppwstr = (LPWSTR)((LPBYTE)(*(_buf)) + (ULONG_PTR)(_str)); \ } // // typedefs // typedef int (*FaxConnFunction)(LPTSTR,handle_t*); #define FH_PORT_HANDLE(_phe) (((PHANDLE_ENTRY)(_phe))->hGeneric) #define FH_MSG_ENUM_HANDLE(_phe) (((PHANDLE_ENTRY)(_phe))->hGeneric) #define FH_FAX_HANDLE(_phe) (((PHANDLE_ENTRY)(_phe))->FaxData->FaxHandle) #define FH_SERVER_VER(_phe) (((PHANDLE_ENTRY)(_phe))->FaxData->dwServerAPIVersion) #define FH_REPORTED_SERVER_VER(_phe) (((PHANDLE_ENTRY)(_phe))->FaxData->dwReportedServerAPIVersion) #define FH_CONTEXT_HANDLE(_phe) (((PHANDLE_ENTRY)(_phe))->FaxContextHandle) #define FH_DATA(_phe) (((PHANDLE_ENTRY)(_phe))->FaxData) #define ValidateFaxHandle(_phe,_type) ((_phe && \ *(LPDWORD)_phe && \ (((PHANDLE_ENTRY)_phe)->Type == _type)) ? TRUE : FALSE) typedef struct _FAX_HANDLE_DATA { HANDLE FaxHandle; // Fax handle obtained from FaxClientBindToFaxServer() LIST_ENTRY HandleTableListHead; // CRITICAL_SECTION CsHandleTable; // Critical section to protect concurrent access DWORD dwRefCount; // Usage reference counter LPTSTR MachineName; // The server machine name (NULL for local server) DWORD dwServerAPIVersion; // The API version of the server we're connected to (filtered) DWORD dwReportedServerAPIVersion; // The API version of the server we're connected to (non-filtered) BOOL bLocalConnection; // Indicates that this connection to fax server is local } FAX_HANDLE_DATA, *PFAX_HANDLE_DATA; typedef struct _HANDLE_ENTRY { LIST_ENTRY ListEntry; // linked list pointers FaxHandleType Type; // handle type, see FHT defines DWORD Flags; // open flags DWORD DeviceId; // device id PFAX_HANDLE_DATA FaxData; // pointer to connection data HANDLE hGeneric; // Generic handle to store HANDLE FaxContextHandle; // context handle for refcounting // (for FaxConnectFaxServer, obtained from FAX_ConnectionRefCount) } HANDLE_ENTRY, *PHANDLE_ENTRY; #define ASYNC_EVENT_INFO_SIGNATURE TEXT("KukiMuki") #define ASYNC_EVENT_INFO_SIGNATURE_LEN sizeof(ASYNC_EVENT_INFO_SIGNATURE)/sizeof(TCHAR)+1 typedef struct _ASYNC_EVENT_INFO { TCHAR tszSignature[ASYNC_EVENT_INFO_SIGNATURE_LEN]; // Security signature HANDLE CompletionPort; // Completion port handle ULONG_PTR CompletionKey; // Completion key HWND hWindow; // Window handle UINT MessageStart; // Application's base window message BOOL bEventEx; // Flag that indicates to use FAX_EVENT_EX BOOL bLocalNotificationsOnly; // client registration for local events only handle_t hBinding; // RPC client binding handle BOOL bInUse; // Indicates that this ASYNC_EVENT_INFO was already processed in Fax_OpenConnection DWORD dwServerAPIVersion; // The API version of the server we're connected to (filtered) } ASYNC_EVENT_INFO, *PASYNC_EVENT_INFO; // // prototypes // VOID CloseFaxHandle( PHANDLE_ENTRY pHandleEntry ); PHANDLE_ENTRY CreateNewServiceHandle( PFAX_HANDLE_DATA FaxData ); PHANDLE_ENTRY CreateNewPortHandle( PFAX_HANDLE_DATA FaxData, DWORD Flags, HANDLE FaxPortHandle ); PHANDLE_ENTRY CreateNewMsgEnumHandle( PFAX_HANDLE_DATA pFaxData ); BOOL ConvertUnicodeStringInPlace( LPCWSTR UnicodeString ); LPTSTR GetFaxPrinterName( HANDLE hFax ); BOOL IsLocalFaxConnection( HANDLE FaxHandle ); // // Fax Client RPC Client // DWORD FaxClientBindToFaxServer ( IN LPCTSTR lpctstrServerName, IN LPCTSTR lpctstrServiceName, IN LPCTSTR lpctstrNetworkOptions, OUT RPC_BINDING_HANDLE * pBindingHandle ); DWORD FaxClientUnbindFromFaxServer( IN RPC_BINDING_HANDLE BindingHandle ); BOOL FaxClientInitRpcServer( VOID ); VOID FaxClientTerminateRpcServer( VOID ); // // Fax Client RPC Server // DWORD StartFaxClientRpcServer( VOID ); DWORD StopFaxClientRpcServer( VOID ); VOID DumpRPCExtendedStatus ();