220 lines
6.3 KiB
C
220 lines
6.3 KiB
C
/*++
|
|
|
|
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 <windows.h>
|
|
#include <shellapi.h>
|
|
#include <winspool.h>
|
|
|
|
#include <rpc.h>
|
|
#include <tapi.h>
|
|
#include <tapi3if.h>
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <tchar.h>
|
|
#include <shlobj.h>
|
|
|
|
#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 ();
|
|
|