137 lines
5.8 KiB
C
137 lines
5.8 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1997 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
newfsp.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module contains the newfsp definitions
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <stdio.h>
|
||
|
#include <tapi.h>
|
||
|
#include <faxdev.h>
|
||
|
#include <winfax.h>
|
||
|
|
||
|
#include "macros.h"
|
||
|
#include "reg.h"
|
||
|
|
||
|
// RESOURCE_STRING_LEN is the maximum length of a resource string
|
||
|
#define RESOURCE_STRING_LEN 256
|
||
|
// MAX_PATH_LEN is the maximum length of a fully-qualified path without the filename
|
||
|
#define MAX_PATH_LEN MAX_PATH - 16
|
||
|
|
||
|
// NEWFSP_DEVICE_LIMIT is the virtual fax device limit of the newfsp service provider
|
||
|
#define NEWFSP_DEVICE_LIMIT 4
|
||
|
|
||
|
// NEWFSP_LOG_FILE is the name of the log file
|
||
|
#define NEWFSP_LOG_FILE L"newfsp.log"
|
||
|
|
||
|
// DEVICE_NAME_PREFIX is the name prefix for the virtual fax devices
|
||
|
#define NEWFSP_DEVICE_NAME_PREFIX L"NewFsp Device "
|
||
|
// DEVICE_ID_PREFIX is the value that identifies the virtual fax devices
|
||
|
#define NEWFSP_DEVICE_ID_PREFIX 0x10000
|
||
|
|
||
|
// DEVICE_IDLE indicates the virtual fax device is idle
|
||
|
#define DEVICE_IDLE 1
|
||
|
// DEVICE_START indicates the virtual fax device is pending a fax job
|
||
|
#define DEVICE_START 2
|
||
|
// DEVICE_SEND indicates the virtual fax device is sending
|
||
|
#define DEVICE_SEND 3
|
||
|
// DEVICE_RECEIVE indicates the virtual fax device is receiving
|
||
|
#define DEVICE_RECEIVE 4
|
||
|
// DEVICE_ABORTING indicates the virtual fax device is aborting
|
||
|
#define DEVICE_ABORTING 5
|
||
|
|
||
|
// JOB_UNKNOWN indicates the fax job is pending
|
||
|
#define JOB_UNKNOWN 1
|
||
|
// JOB_SEND indicates the fax job is a send
|
||
|
#define JOB_SEND 2
|
||
|
// JOB_RECEIVE indicates the fax job is a receive
|
||
|
#define JOB_RECEIVE 3
|
||
|
|
||
|
typedef struct _DEVICE_INFO {
|
||
|
CRITICAL_SECTION cs; // object to serialize access to the virtual fax device
|
||
|
DWORD DeviceId; // specifies the identifier of the virtual fax device
|
||
|
WCHAR Directory[MAX_PATH_LEN]; // specifies the virtual fax device's incoming fax directory
|
||
|
DWORD Status; // specifies the current status of the virtual fax device
|
||
|
HANDLE ExitEvent; // specifies the handle to the event to indicate the thread to watch for an incoming fax transmission is to exit
|
||
|
struct _DEVICE_INFO *pNextDeviceInfo; // pointer to the next virtual fax device
|
||
|
struct _JOB_INFO *pJobInfo; // pointer to the fax job associated with the virtual fax device
|
||
|
} DEVICE_INFO, *PDEVICE_INFO;
|
||
|
|
||
|
typedef struct _JOB_INFO {
|
||
|
PDEVICE_INFO pDeviceInfo; // pointer to the virtual fax device data associated with the fax job
|
||
|
HANDLE CompletionPortHandle; // specifies a handle to an I/O completion port
|
||
|
ULONG_PTR CompletionKey; // specifies a completion port key value
|
||
|
DWORD JobType; // specifies the fax job type
|
||
|
DWORD Status; // specifies the current status of the fax job
|
||
|
HLINE LineHandle; // specifies a handle to the open line device associated with the fax job
|
||
|
HCALL CallHandle; // specifies a handle to the active call associated with the fax job
|
||
|
LPWSTR FileName; // specifies the full path to the file that contains the data stream for the fax document
|
||
|
LPWSTR CallerName; // specifies the name of the calling device
|
||
|
LPWSTR CallerNumber; // specifies the telephone number of the calling device
|
||
|
LPWSTR ReceiverName; // specifies the name of the receiving device
|
||
|
LPWSTR ReceiverNumber; // specifies the telephone number of the receiving device
|
||
|
DWORD RetryCount; // specifies the number of retries associated with the fax job
|
||
|
BOOL Branding; // specifies whether the fax service provider should generate a brand at the top of the fax transmission
|
||
|
DWORD PageCount; // specifies the number of pages associated with the fax job
|
||
|
LPWSTR CSI; // specifies the identifier of the remote fax device
|
||
|
LPWSTR CallerId; // specifies the identifier of the calling fax device
|
||
|
LPWSTR RoutingInfo; // specifies the routing string associated with the fax job
|
||
|
} JOB_INFO, *PJOB_INFO;
|
||
|
|
||
|
HANDLE g_hInstance; // g_hInstance is the global handle to the module
|
||
|
HLINEAPP g_LineAppHandle; // g_LineAppHandle is the global handle to the fax service's registration with TAPI
|
||
|
HANDLE g_CompletionPort; // g_CompletionPort is the global handle to an I/O completion port that the fax service provider must use to post I/O completion port packets to the fax service for asynchronous line status events
|
||
|
ULONG_PTR g_CompletionKey; // g_CompletionKey is the global completion port key value
|
||
|
|
||
|
HANDLE g_hLogFile; // g_hLogFile is the global handle to the log file
|
||
|
PDEVICE_INFO *g_pDeviceInfo; // g_pDeviceInfo is the global pointer to the virtual fax device data
|
||
|
|
||
|
// Function definitions:
|
||
|
|
||
|
BOOL
|
||
|
GetNewFspRegistryData(
|
||
|
BOOL *bLoggingEnabled,
|
||
|
LPWSTR lpszLoggingDirectory,
|
||
|
PDEVICE_INFO *pDeviceInfo,
|
||
|
LPDWORD pdwNumDevices
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
SetNewFspRegistryData(
|
||
|
BOOL bLoggingEnabled,
|
||
|
LPWSTR lpszLoggingDirectory,
|
||
|
PDEVICE_INFO pDeviceInfo
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
OpenLogFile(
|
||
|
BOOL bLoggingEnabled,
|
||
|
LPWSTR lpszLoggingDirectory
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
CloseLogFile(
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
WriteDebugString(
|
||
|
LPWSTR lpszFormatString,
|
||
|
...
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
PostJobStatus(
|
||
|
HANDLE CompletionPort,
|
||
|
ULONG_PTR CompletionKey,
|
||
|
DWORD StatusId,
|
||
|
DWORD ErrorCode
|
||
|
);
|