windows-nt/Source/XPSP1/NT/printscan/fax/samples/newfsp/newfsp.h
2020-09-26 16:20:57 +08:00

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
);