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.
 
 
 
 
 
 

4264 lines
134 KiB

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
Module Name:
winfax.h
Abstract:
This module contains the WIN32 FAX APIs.
--*/
#ifndef _FAXAPIP_
#define _FAXAPIP_
#include <FaxUIConstants.h>
#ifndef MIDL_PASS
#include <tapi.h>
#endif
#if !defined(_WINFAX_)
#define WINFAXAPI DECLSPEC_IMPORT
#else
#define WINFAXAPI
#endif
#ifdef __cplusplus
extern "C" {
#endif
//
// FAX ERROR CODES
//
#define FAX_ERR_START 7001L // First fax specific error code
#define FAX_ERR_SRV_OUTOFMEMORY 7001L
#define FAX_ERR_GROUP_NOT_FOUND 7002L
#define FAX_ERR_BAD_GROUP_CONFIGURATION 7003L
#define FAX_ERR_GROUP_IN_USE 7004L
#define FAX_ERR_RULE_NOT_FOUND 7005L
#define FAX_ERR_NOT_NTFS 7006L
#define FAX_ERR_DIRECTORY_IN_USE 7007L
#define FAX_ERR_FILE_ACCESS_DENIED 7008L
#define FAX_ERR_MESSAGE_NOT_FOUND 7009L
#define FAX_ERR_DEVICE_NUM_LIMIT_EXCEEDED 7010L
#define FAX_ERR_NOT_SUPPORTED_ON_THIS_SKU 7011L
#define FAX_ERR_VERSION_MISMATCH 7012L // Fax client/server versions mismtach
#define FAX_ERR_RECIPIENTS_LIMIT 7013L // Recipients limit in a single broadcast
#define FAX_ERR_END 7013L // Last fax specific error code
//
// MessageId: FAX_E_SRV_OUTOFMEMORY
//
// MessageText:
//
// The fax server failed to allocate memory.
//
#define FAX_E_SRV_OUTOFMEMORY MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_SRV_OUTOFMEMORY)
//
// MessageId: FAX_E_GROUP_NOT_FOUND
//
// MessageText:
//
// The fax server failed to locate an outbound routing group by name.
//
#define FAX_E_GROUP_NOT_FOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_GROUP_NOT_FOUND)
//
// MessageId: FAX_E_BAD_GROUP_CONFIGURATION
//
// MessageText:
//
// The fax server encountered an outbound routing group with bad configuration.
//
#define FAX_E_BAD_GROUP_CONFIGURATION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_BAD_GROUP_CONFIGURATION)
//
// MessageId: FAX_E_GROUP_IN_USE
//
// MessageText:
//
// The fax server cannot remove an outbound routing group because it is in use by one or more outbound routing rules.
//
#define FAX_E_GROUP_IN_USE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_GROUP_IN_USE)
//
// MessageId: FAX_E_RULE_NOT_FOUND
//
// MessageText:
//
// The fax server failed to locate an outbound routing rule by country code and area code.
//
#define FAX_E_RULE_NOT_FOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_RULE_NOT_FOUND)
//
// MessageId: FAX_E_NOT_NTFS
//
// MessageText:
//
// The fax server cannot set an archive folder to a non-NTFS partition.
//
#define FAX_E_NOT_NTFS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_NOT_NTFS)
//
// MessageId: FAX_E_DIRECTORY_IN_USE
//
// MessageText:
//
// The fax server cannot use the same folder for both the inbox and the sent-items archives.
//
#define FAX_E_DIRECTORY_IN_USE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_DIRECTORY_IN_USE)
//
// MessageId: FAX_E_FILE_ACCESS_DENIED
//
// MessageText:
//
// The fax server cannot access the specified file or folder.
//
#define FAX_E_FILE_ACCESS_DENIED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_FILE_ACCESS_DENIED)
//
// MessageId: FAX_E_MESSAGE_NOT_FOUND
//
// MessageText:
//
// The fax server cannot find the job or message by its ID.
//
#define FAX_E_MESSAGE_NOT_FOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_MESSAGE_NOT_FOUND)
//
// MessageId: FAX_E_DEVICE_NUM_LIMIT_EXCEEDED
//
// MessageText:
//
// The fax server cannot complete the operation because the number of active fax devices allowed for this version of Windows was exceeded.
//
#define FAX_E_DEVICE_NUM_LIMIT_EXCEEDED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_DEVICE_NUM_LIMIT_EXCEEDED)
//
// MessageId: FAX_E_NOT_SUPPORTED_ON_THIS_SKU
//
// MessageText:
//
// The fax server cannot complete the operation because it is not supported for this version of Windows.
//
#define FAX_E_NOT_SUPPORTED_ON_THIS_SKU MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_NOT_SUPPORTED_ON_THIS_SKU)
//
// MessageId: FAX_E_VERSION_MISMATCH
//
// MessageText:
//
// The fax server API version does not support the requested operation.
//
#define FAX_E_VERSION_MISMATCH MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_VERSION_MISMATCH)
//
// MessageId: FAX_E_RECIPIENT_LIMIT
//
// MessageText:
//
// The limit on the number of recipients for a single fax broadcast was reached.
//
#define FAX_E_RECIPIENTS_LIMIT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, FAX_ERR_RECIPIENTS_LIMIT)
typedef enum
{
FAXLOG_LEVEL_NONE = 0,
FAXLOG_LEVEL_MIN,
FAXLOG_LEVEL_MED,
FAXLOG_LEVEL_MAX
} FAX_ENUM_LOG_LEVELS;
typedef enum
{
FAXLOG_CATEGORY_INIT = 1, // Initialization / shutdown
FAXLOG_CATEGORY_OUTBOUND, // Outbound messages
FAXLOG_CATEGORY_INBOUND, // Inbound messages
FAXLOG_CATEGORY_UNKNOWN // Unknown category (all others)
} FAX_ENUM_LOG_CATEGORIES;
typedef struct _FAX_LOG_CATEGORYA
{
LPCSTR Name; // logging category name
DWORD Category; // logging category number
DWORD Level; // logging level for the category
} FAX_LOG_CATEGORYA, *PFAX_LOG_CATEGORYA;
typedef struct _FAX_LOG_CATEGORYW
{
LPCWSTR Name; // logging category name
DWORD Category; // logging category number
DWORD Level; // logging level for the category
} FAX_LOG_CATEGORYW, *PFAX_LOG_CATEGORYW;
#ifdef UNICODE
typedef FAX_LOG_CATEGORYW FAX_LOG_CATEGORY;
typedef PFAX_LOG_CATEGORYW PFAX_LOG_CATEGORY;
#else
typedef FAX_LOG_CATEGORYA FAX_LOG_CATEGORY;
typedef PFAX_LOG_CATEGORYA PFAX_LOG_CATEGORY;
#endif // UNICODE
typedef struct _FAX_TIME
{
WORD Hour;
WORD Minute;
} FAX_TIME, *PFAX_TIME;
typedef struct _FAX_CONFIGURATIONA
{
DWORD SizeOfStruct; // size of this structure
DWORD Retries; // number of retries for fax send
DWORD RetryDelay; // number of minutes between retries
DWORD DirtyDays; // number of days to keep an unsent job in the queue
BOOL Branding; // fsp should brand outgoing faxes
BOOL UseDeviceTsid; // server uses device tsid only
BOOL ServerCp; // clients must use cover pages on the server
BOOL PauseServerQueue; // is the server queue paused?
FAX_TIME StartCheapTime; // start of discount rate period
FAX_TIME StopCheapTime; // end of discount rate period
BOOL ArchiveOutgoingFaxes; // whether outgoing faxes should be archived
LPCSTR ArchiveDirectory; // archive directory for outgoing faxes
LPCSTR Reserved; // Reserved; must be NULL
} FAX_CONFIGURATIONA, *PFAX_CONFIGURATIONA;
typedef struct _FAX_CONFIGURATIONW
{
DWORD SizeOfStruct; // size of this structure
DWORD Retries; // number of retries for fax send
DWORD RetryDelay; // number of minutes between retries
DWORD DirtyDays; // number of days to keep an unsent job in the queue
BOOL Branding; // fsp should brand outgoing faxes
BOOL UseDeviceTsid; // server uses device tsid only
BOOL ServerCp; // clients must use cover pages on the server
BOOL PauseServerQueue; // is the server queue paused?
FAX_TIME StartCheapTime; // start of discount rate period
FAX_TIME StopCheapTime; // end of discount rate period
BOOL ArchiveOutgoingFaxes; // whether outgoing faxes should be archived
LPCWSTR ArchiveDirectory; // archive directory for outgoing faxes
LPCWSTR Reserved; // Reserved; must be NULL
} FAX_CONFIGURATIONW, *PFAX_CONFIGURATIONW;
#ifdef UNICODE
typedef FAX_CONFIGURATIONW FAX_CONFIGURATION;
typedef PFAX_CONFIGURATIONW PFAX_CONFIGURATION;
#else
typedef FAX_CONFIGURATIONA FAX_CONFIGURATION;
typedef PFAX_CONFIGURATIONA PFAX_CONFIGURATION;
#endif // UNICODE
//
// FaxSetJob() command codes
//
typedef enum
{
JC_UNKNOWN = 0,
JC_DELETE,
JC_PAUSE,
JC_RESUME
} FAX_ENUM_JOB_COMMANDS;
#define JC_RESTART JC_RESUME
//
// job type defines
//
//
// NOTICE: JT_* and JS_* are different from the Win2K public constants.
// If you use WinFax.h and/or the Win2K COM interfaces, you get the Win2K constants.
// If you use fxsapip.h, you get the Whistler constants.
//
// NEVER MIX THEM !!!
//
typedef enum
{
JT_UNKNOWN = 0x0001, // Fax type is not determined yet
JT_SEND = 0x0002, // Outgoing fax message
JT_RECEIVE = 0x0004, // Incoming fax message
JT_ROUTING = 0x0008, // Incoming message - being routed
JT_FAIL_RECEIVE = 0x0010, // Fail receive job (legacy support only)
JT_BROADCAST = 0x0020 // Outgoing broadcast message
} FAX_ENUM_JOB_TYPES;
//
// job status defines
//
#define JS_PENDING 0x00000001
#define JS_INPROGRESS 0x00000002
#define JS_DELETING 0x00000004
#define JS_FAILED 0x00000008
#define JS_PAUSED 0x00000010
#define JS_NOLINE 0x00000020
#define JS_RETRYING 0x00000040
#define JS_RETRIES_EXCEEDED 0x00000080
typedef struct _FAX_DEVICE_STATUSA
{
DWORD SizeOfStruct; // size of this structure
LPCSTR CallerId; // caller id string
LPCSTR Csid; // station identifier
DWORD CurrentPage; // current page
DWORD DeviceId; // permanent line id
LPCSTR DeviceName; // device name
LPCSTR DocumentName; // document name
DWORD JobType; // send or receive?
LPCSTR PhoneNumber; // sending phone number
LPCSTR RoutingString; // routing information
LPCSTR SenderName; // sender name
LPCSTR RecipientName; // recipient name
DWORD Size; // size in bytes of the document
FILETIME StartTime; // starting time of the fax send/receive
DWORD Status; // current status of the device, see FPS_??? masks
LPCSTR StatusString; // status string if the Status field is zero. this may be NULL.
FILETIME SubmittedTime; // time the document was submitted
DWORD TotalPages; // total number of pages in this job
LPCSTR Tsid; // transmitting station identifier
LPCSTR UserName; // user that submitted the active job
} FAX_DEVICE_STATUSA, *PFAX_DEVICE_STATUSA;
typedef struct _FAX_DEVICE_STATUSW
{
DWORD SizeOfStruct; // size of this structure
LPCWSTR CallerId; // caller id string
LPCWSTR Csid; // station identifier
DWORD CurrentPage; // current page
DWORD DeviceId; // permanent line id
LPCWSTR DeviceName; // device name
LPCWSTR DocumentName; // document name
DWORD JobType; // send or receive?
LPCWSTR PhoneNumber; // sending phone number
LPCWSTR RoutingString; // routing information
LPCWSTR SenderName; // sender name
LPCWSTR RecipientName; // recipient name
DWORD Size; // size in bytes of the document
FILETIME StartTime; // starting time of the fax send/receive
DWORD Status; // current status of the device, see FPS_??? masks
LPCWSTR StatusString; // status string if the Status field is zero. this may be NULL.
FILETIME SubmittedTime; // time the document was submitted
DWORD TotalPages; // total number of pages in this job
LPCWSTR Tsid; // transmitting station identifier
LPCWSTR UserName; // user that submitted the active job
} FAX_DEVICE_STATUSW, *PFAX_DEVICE_STATUSW;
#ifdef UNICODE
typedef FAX_DEVICE_STATUSW FAX_DEVICE_STATUS;
typedef PFAX_DEVICE_STATUSW PFAX_DEVICE_STATUS;
#else
typedef FAX_DEVICE_STATUSA FAX_DEVICE_STATUS;
typedef PFAX_DEVICE_STATUSA PFAX_DEVICE_STATUS;
#endif // UNICODE
typedef struct _FAX_JOB_ENTRYA
{
DWORD SizeOfStruct; // size of this structure
DWORD JobId; // fax job id
LPCSTR UserName; // user who submitted the job
DWORD JobType; // job type, see JT defines
DWORD QueueStatus; // job queue status, see JS defines
DWORD Status; // current status of the device, see FPS_??? masks
DWORD Size; // size in bytes of the document
DWORD PageCount; // total page count
LPCSTR RecipientNumber; // recipient fax number
LPCSTR RecipientName; // recipient name
LPCSTR Tsid; // transmitter's id
LPCSTR SenderName; // sender name
LPCSTR SenderCompany; // sender company
LPCSTR SenderDept; // sender department
LPCSTR BillingCode; // billing code
DWORD ScheduleAction; // when to schedule the fax, see JSA defines
SYSTEMTIME ScheduleTime; // time to send the fax when JSA_SPECIFIC_TIME is used (must be local time)
DWORD DeliveryReportType; // delivery report type, see DRT defines
LPCSTR DeliveryReportAddress; // email address for delivery report (ndr or dr) thru MAPI / SMTP
LPCSTR DocumentName; // document name
} FAX_JOB_ENTRYA, *PFAX_JOB_ENTRYA;
typedef struct _FAX_JOB_ENTRYW
{
DWORD SizeOfStruct; // size of this structure
DWORD JobId; // fax job id
LPCWSTR UserName; // user who submitted the job
DWORD JobType; // job type, see JT defines
DWORD QueueStatus; // job queue status, see JS defines
DWORD Status; // current status of the device, see FPS_??? masks
DWORD Size; // size in bytes of the document
DWORD PageCount; // total page count
LPCWSTR RecipientNumber; // recipient fax number
LPCWSTR RecipientName; // recipient name
LPCWSTR Tsid; // transmitter's id
LPCWSTR SenderName; // sender name
LPCWSTR SenderCompany; // sender company
LPCWSTR SenderDept; // sender department
LPCWSTR BillingCode; // billing code
DWORD ScheduleAction; // when to schedule the fax, see JSA defines
SYSTEMTIME ScheduleTime; // time to send the fax when JSA_SPECIFIC_TIME is used (must be local time)
DWORD DeliveryReportType; // delivery report type, see DRT defines
LPCWSTR DeliveryReportAddress; // email address for delivery report (ndr or dr) thru MAPI / SMTP
LPCWSTR DocumentName; // document name
} FAX_JOB_ENTRYW, *PFAX_JOB_ENTRYW;
#ifdef UNICODE
typedef FAX_JOB_ENTRYW FAX_JOB_ENTRY;
typedef PFAX_JOB_ENTRYW PFAX_JOB_ENTRY;
#else
typedef FAX_JOB_ENTRYA FAX_JOB_ENTRY;
typedef PFAX_JOB_ENTRYA PFAX_JOB_ENTRY;
#endif // UNICODE
//
// fax port state masks
//
// if you change these defines the be sure to
// change the resources in the fax service.
//
#define FPS_DIALING 0x20000001
#define FPS_SENDING 0x20000002
#define FPS_RECEIVING 0x20000004
#define FPS_COMPLETED 0x20000008
#define FPS_HANDLED 0x20000010
#define FPS_UNAVAILABLE 0x20000020
#define FPS_BUSY 0x20000040
#define FPS_NO_ANSWER 0x20000080
#define FPS_BAD_ADDRESS 0x20000100
#define FPS_NO_DIAL_TONE 0x20000200
#define FPS_DISCONNECTED 0x20000400
#define FPS_FATAL_ERROR 0x20000800
#define FPS_NOT_FAX_CALL 0x20001000
#define FPS_CALL_DELAYED 0x20002000
#define FPS_CALL_BLACKLISTED 0x20004000
#define FPS_INITIALIZING 0x20008000
#define FPS_OFFLINE 0x20010000
#define FPS_RINGING 0x20020000
#define FPS_AVAILABLE 0x20100000
#define FPS_ABORTING 0x20200000
#define FPS_ROUTING 0x20400000
#define FPS_ANSWERED 0x20800000
//
// fax port capability mask
//
#define FPF_RECEIVE 0x00000001 // Automatically receive faxes
#define FPF_SEND 0x00000002
#define FPF_VIRTUAL 0x00000004
typedef struct _FAX_PORT_INFOA
{
DWORD SizeOfStruct; // size of this structure
DWORD DeviceId; // Device ID
DWORD State; // State of the device
DWORD Flags; // Device specific flags
DWORD Rings; // Number of rings before answer
DWORD Priority; // Device priority
LPCSTR DeviceName; // Device name
LPCSTR Tsid; // Device Tsid
LPCSTR Csid; // Device Csid
} FAX_PORT_INFOA, *PFAX_PORT_INFOA;
typedef struct _FAX_PORT_INFOW
{
DWORD SizeOfStruct; // size of this structure
DWORD DeviceId; // Device ID
DWORD State; // State of the device
DWORD Flags; // Device specific flags
DWORD Rings; // Number of rings before answer
DWORD Priority; // Device priority
LPCWSTR DeviceName; // Device name
LPCWSTR Tsid; // Device Tsid
LPCWSTR Csid; // Device Csid
} FAX_PORT_INFOW, *PFAX_PORT_INFOW;
#ifdef UNICODE
typedef FAX_PORT_INFOW FAX_PORT_INFO;
typedef PFAX_PORT_INFOW PFAX_PORT_INFO;
#else
typedef FAX_PORT_INFOA FAX_PORT_INFO;
typedef PFAX_PORT_INFOA PFAX_PORT_INFO;
#endif // UNICODE
typedef struct _FAX_ROUTING_METHODA
{
DWORD SizeOfStruct; // size of this structure
DWORD DeviceId; // device identifier
BOOL Enabled; // is this method enabled for this device?
LPCSTR DeviceName; // device name
LPCSTR Guid; // guid that identifies this routing method
LPCSTR FriendlyName; // friendly name for this method
LPCSTR FunctionName; // exported function name that identifies this method
LPCSTR ExtensionImageName; // module (dll) name that implements this method
LPCSTR ExtensionFriendlyName; // displayable string that identifies the extension
} FAX_ROUTING_METHODA, *PFAX_ROUTING_METHODA;
typedef struct _FAX_ROUTING_METHODW
{
DWORD SizeOfStruct; // size of this structure
DWORD DeviceId; // device identifier
BOOL Enabled; // is this method enabled for this device?
LPCWSTR DeviceName; // device name
LPCWSTR Guid; // guid that identifies this routing method
LPCWSTR FriendlyName; // friendly name for this method
LPCWSTR FunctionName; // exported function name that identifies this method
LPCWSTR ExtensionImageName; // module (dll) name that implements this method
LPCWSTR ExtensionFriendlyName; // displayable string that identifies the extension
} FAX_ROUTING_METHODW, *PFAX_ROUTING_METHODW;
#ifdef UNICODE
typedef FAX_ROUTING_METHODW FAX_ROUTING_METHOD;
typedef PFAX_ROUTING_METHODW PFAX_ROUTING_METHOD;
#else
typedef FAX_ROUTING_METHODA FAX_ROUTING_METHOD;
typedef PFAX_ROUTING_METHODA PFAX_ROUTING_METHOD;
#endif // UNICODE
typedef struct _FAX_GLOBAL_ROUTING_INFOA
{
DWORD SizeOfStruct; // size of this structure
DWORD Priority; // priority of this device
LPCSTR Guid; // guid that identifies this routing method
LPCSTR FriendlyName; // friendly name for this method
LPCSTR FunctionName; // exported function name that identifies this method
LPCSTR ExtensionImageName; // module (dll) name that implements this method
LPCSTR ExtensionFriendlyName; // displayable string that identifies the extension
} FAX_GLOBAL_ROUTING_INFOA, *PFAX_GLOBAL_ROUTING_INFOA;
typedef struct _FAX_GLOBAL_ROUTING_INFOW
{
DWORD SizeOfStruct; // size of this structure
DWORD Priority; // priority of this device
LPCWSTR Guid; // guid that identifies this routing method
LPCWSTR FriendlyName; // friendly name for this method
LPCWSTR FunctionName; // exported function name that identifies this method
LPCWSTR ExtensionImageName; // module (dll) name that implements this method
LPCWSTR ExtensionFriendlyName; // displayable string that identifies the extension
} FAX_GLOBAL_ROUTING_INFOW, *PFAX_GLOBAL_ROUTING_INFOW;
#ifdef UNICODE
typedef FAX_GLOBAL_ROUTING_INFOW FAX_GLOBAL_ROUTING_INFO;
typedef PFAX_GLOBAL_ROUTING_INFOW PFAX_GLOBAL_ROUTING_INFO;
#else
typedef FAX_GLOBAL_ROUTING_INFOA FAX_GLOBAL_ROUTING_INFO;
typedef PFAX_GLOBAL_ROUTING_INFOA PFAX_GLOBAL_ROUTING_INFO;
#endif // UNICODE
typedef struct _FAX_COVERPAGE_INFOA
{
DWORD SizeOfStruct; // Size of this structure
//
// general
//
LPCSTR CoverPageName; // coverpage document name
BOOL UseServerCoverPage; // coverpage exists on the fax server
//
// Recipient information
//
LPCSTR RecName; //
LPCSTR RecFaxNumber; //
LPCSTR RecCompany; //
LPCSTR RecStreetAddress; //
LPCSTR RecCity; //
LPCSTR RecState; //
LPCSTR RecZip; //
LPCSTR RecCountry; //
LPCSTR RecTitle; //
LPCSTR RecDepartment; //
LPCSTR RecOfficeLocation; //
LPCSTR RecHomePhone; //
LPCSTR RecOfficePhone; //
//
// Sender information
//
LPCSTR SdrName; //
LPCSTR SdrFaxNumber; //
LPCSTR SdrCompany; //
LPCSTR SdrAddress; //
LPCSTR SdrTitle; //
LPCSTR SdrDepartment; //
LPCSTR SdrOfficeLocation; //
LPCSTR SdrHomePhone; //
LPCSTR SdrOfficePhone; //
//
// Misc information
//
LPCSTR Note; //
LPCSTR Subject; //
SYSTEMTIME TimeSent; // Time the fax was sent
DWORD PageCount; // Number of pages
} FAX_COVERPAGE_INFOA, *PFAX_COVERPAGE_INFOA;
typedef struct _FAX_COVERPAGE_INFOW
{
DWORD SizeOfStruct; // Size of this structure
//
// general
//
LPCWSTR CoverPageName; // coverpage document name
BOOL UseServerCoverPage; // coverpage exists on the fax server
//
// Recipient information
//
LPCWSTR RecName; //
LPCWSTR RecFaxNumber; //
LPCWSTR RecCompany; //
LPCWSTR RecStreetAddress; //
LPCWSTR RecCity; //
LPCWSTR RecState; //
LPCWSTR RecZip; //
LPCWSTR RecCountry; //
LPCWSTR RecTitle; //
LPCWSTR RecDepartment; //
LPCWSTR RecOfficeLocation; //
LPCWSTR RecHomePhone; //
LPCWSTR RecOfficePhone; //
//
// Sender information
//
LPCWSTR SdrName; //
LPCWSTR SdrFaxNumber; //
LPCWSTR SdrCompany; //
LPCWSTR SdrAddress; //
LPCWSTR SdrTitle; //
LPCWSTR SdrDepartment; //
LPCWSTR SdrOfficeLocation; //
LPCWSTR SdrHomePhone; //
LPCWSTR SdrOfficePhone; //
//
// Misc information
//
LPCWSTR Note; //
LPCWSTR Subject; //
SYSTEMTIME TimeSent; // Time the fax was sent
DWORD PageCount; // Number of pages
} FAX_COVERPAGE_INFOW, *PFAX_COVERPAGE_INFOW;
#ifdef UNICODE
typedef FAX_COVERPAGE_INFOW FAX_COVERPAGE_INFO;
typedef PFAX_COVERPAGE_INFOW PFAX_COVERPAGE_INFO;
#else
typedef FAX_COVERPAGE_INFOA FAX_COVERPAGE_INFO;
typedef PFAX_COVERPAGE_INFOA PFAX_COVERPAGE_INFO;
#endif // UNICODE
typedef enum
{
JSA_NOW = 0, // Send now
JSA_SPECIFIC_TIME, // Send at specific time
JSA_DISCOUNT_PERIOD // Send at server configured discount period
} FAX_ENUM_JOB_SEND_ATTRIBUTES;
typedef enum
{
DRT_NONE = 0x0000, // Do not send receipt
DRT_EMAIL = 0x0001, // Send receipt by email (SMTP)
DRT_UNUSED = 0x0002, // Reserved
DRT_MSGBOX = 0x0004, // Send receipt by a message box
DRT_GRP_PARENT = 0x0008, // Send a single receipt for a broadcast job
DRT_ATTACH_FAX = 0x0010 // Attach the fax tiff file to the receipt
} FAX_ENUM_DELIVERY_REPORT_TYPES;
#define DRT_ALL (DRT_EMAIL | DRT_MSGBOX) // All possible delivery report types
#define DRT_MODIFIERS (DRT_GRP_PARENT | DRT_ATTACH_FAX) // All state modifiers
//
// the reserved fields are private data used
// by the fax monitor and winfax.
//
//
// Reserved[0] == 0xffffffff
// Reserved[1] == Print job id
//
// Reserved[0] == 0xfffffffe start of a broadcast job
//
typedef struct _FAX_JOB_PARAMA
{
DWORD SizeOfStruct; // size of this structure
LPCSTR RecipientNumber; // recipient fax number
LPCSTR RecipientName; // recipient name
LPCSTR Tsid; // transmitter's id
LPCSTR SenderName; // sender name
LPCSTR SenderCompany; // sender company
LPCSTR SenderDept; // sender department
LPCSTR BillingCode; // billing code
DWORD ScheduleAction; // when to schedule the fax, see JSA defines
SYSTEMTIME ScheduleTime; // time to send the fax when JSA_SPECIFIC_TIME is used (must be local time)
DWORD DeliveryReportType; // delivery report type, see DRT defines
LPCSTR DeliveryReportAddress; // email address for delivery report (ndr or dr) thru MAPI / SMTP
LPCSTR DocumentName; // document name (optional)
HCALL CallHandle; // optional call handle
DWORD_PTR Reserved[3]; // reserved for ms use only
} FAX_JOB_PARAMA, *PFAX_JOB_PARAMA;
typedef struct _FAX_JOB_PARAMW
{
DWORD SizeOfStruct; // size of this structure
LPCWSTR RecipientNumber; // recipient fax number
LPCWSTR RecipientName; // recipient name
LPCWSTR Tsid; // transmitter's id
LPCWSTR SenderName; // sender name
LPCWSTR SenderCompany; // sender company
LPCWSTR SenderDept; // sender department
LPCWSTR BillingCode; // billing code
DWORD ScheduleAction; // when to schedule the fax, see JSA defines
SYSTEMTIME ScheduleTime; // time to send the fax when JSA_SPECIFIC_TIME is used (must be local time)
DWORD DeliveryReportType; // delivery report type, see DRT defines
LPCWSTR DeliveryReportAddress; // email address for delivery report (ndr or dr) thru MAPI / SMTP
LPCWSTR DocumentName; // document name (optional)
HCALL CallHandle; // optional call handle
DWORD_PTR Reserved[3]; // reserved for ms use only
} FAX_JOB_PARAMW, *PFAX_JOB_PARAMW;
#ifdef UNICODE
typedef FAX_JOB_PARAMW FAX_JOB_PARAM;
typedef PFAX_JOB_PARAMW PFAX_JOB_PARAM;
#else
typedef FAX_JOB_PARAMA FAX_JOB_PARAM;
typedef PFAX_JOB_PARAMA PFAX_JOB_PARAM;
#endif // UNICODE
//
// Event Ids
//
// FEI_NEVENTS is the number of events
//
#define FEI_DIALING 0x00000001
#define FEI_SENDING 0x00000002
#define FEI_RECEIVING 0x00000003
#define FEI_COMPLETED 0x00000004
#define FEI_BUSY 0x00000005
#define FEI_NO_ANSWER 0x00000006
#define FEI_BAD_ADDRESS 0x00000007
#define FEI_NO_DIAL_TONE 0x00000008
#define FEI_DISCONNECTED 0x00000009
#define FEI_FATAL_ERROR 0x0000000a
#define FEI_NOT_FAX_CALL 0x0000000b
#define FEI_CALL_DELAYED 0x0000000c
#define FEI_CALL_BLACKLISTED 0x0000000d
#define FEI_RINGING 0x0000000e
#define FEI_ABORTING 0x0000000f
#define FEI_ROUTING 0x00000010
#define FEI_MODEM_POWERED_ON 0x00000011
#define FEI_MODEM_POWERED_OFF 0x00000012
#define FEI_IDLE 0x00000013
#define FEI_FAXSVC_ENDED 0x00000014
#define FEI_ANSWERED 0x00000015
#define FEI_JOB_QUEUED 0x00000016
#define FEI_DELETED 0x00000017
#define FEI_INITIALIZING 0x00000018
#define FEI_LINE_UNAVAILABLE 0x00000019
#define FEI_HANDLED 0x0000001a
#define FEI_FAXSVC_STARTED 0x0000001b
#define FEI_NEVENTS FEI_FAXSVC_STARTED
typedef struct _FAX_EVENTA
{
DWORD SizeOfStruct; // Size of this structure
FILETIME TimeStamp; // Timestamp for when the event was generated
DWORD DeviceId; // Permanent line id
DWORD EventId; // Current event id
DWORD JobId; // Fax Job Id, 0xffffffff indicates inactive job
} FAX_EVENTA, *PFAX_EVENTA;
typedef struct _FAX_EVENTW
{
DWORD SizeOfStruct; // Size of this structure
FILETIME TimeStamp; // Timestamp for when the event was generated
DWORD DeviceId; // Permanent line id
DWORD EventId; // Current event id
DWORD JobId; // Fax Job Id, 0xffffffff indicates inactive job
} FAX_EVENTW, *PFAX_EVENTW;
#ifdef UNICODE
typedef FAX_EVENTW FAX_EVENT;
typedef PFAX_EVENTW PFAX_EVENT;
#else
typedef FAX_EVENTA FAX_EVENT;
typedef PFAX_EVENTA PFAX_EVENT;
#endif // UNICODE
typedef struct _FAX_PRINT_INFOA
{
DWORD SizeOfStruct; // Size of this structure
LPCSTR DocName; // Document name that appears in the spooler
LPCSTR RecipientName; // Recipient name
LPCSTR RecipientNumber; // Recipient fax number (non-canonical number)
LPCSTR SenderName; // Sender name
LPCSTR SenderCompany; // Sender company (optional)
LPCSTR SenderDept; // Sender department
LPCSTR SenderBillingCode; // Billing code
LPCSTR Reserved; // Reserved; must be NULL
LPCSTR DrEmailAddress; // E.Mail address for delivery report
LPCSTR OutputFileName; // for print to file, resulting file name
} FAX_PRINT_INFOA, *PFAX_PRINT_INFOA;
typedef struct _FAX_PRINT_INFOW
{
DWORD SizeOfStruct; // Size of this structure
LPCWSTR DocName; // Document name that appears in the spooler
LPCWSTR RecipientName; // Recipient name
LPCWSTR RecipientNumber; // Recipient fax number (non-canonical number)
LPCWSTR SenderName; // Sender name
LPCWSTR SenderCompany; // Sender company (optional)
LPCWSTR SenderDept; // Sender department
LPCWSTR SenderBillingCode; // Billing code
LPCWSTR Reserved; // Reserved; must be NULL
LPCWSTR DrEmailAddress; // E.Mail address for delivery report
LPCWSTR OutputFileName; // for print to file, resulting file name
} FAX_PRINT_INFOW, *PFAX_PRINT_INFOW;
#ifdef UNICODE
typedef FAX_PRINT_INFOW FAX_PRINT_INFO;
typedef PFAX_PRINT_INFOW PFAX_PRINT_INFO;
#else
typedef FAX_PRINT_INFOA FAX_PRINT_INFO;
typedef PFAX_PRINT_INFOA PFAX_PRINT_INFO;
#endif // UNICODE
typedef struct _FAX_CONTEXT_INFOA
{
DWORD SizeOfStruct; // Size of this structure
HDC hDC; // Device Context
CHAR ServerName[MAX_COMPUTERNAME_LENGTH+1]; // Server name
} FAX_CONTEXT_INFOA, *PFAX_CONTEXT_INFOA;
typedef struct _FAX_CONTEXT_INFOW
{
DWORD SizeOfStruct; // Size of this structure
HDC hDC; // Device Context
WCHAR ServerName[MAX_COMPUTERNAME_LENGTH+1]; // Server name
} FAX_CONTEXT_INFOW, *PFAX_CONTEXT_INFOW;
#ifdef UNICODE
typedef FAX_CONTEXT_INFOW FAX_CONTEXT_INFO;
typedef PFAX_CONTEXT_INFOW PFAX_CONTEXT_INFO;
#else
typedef FAX_CONTEXT_INFOA FAX_CONTEXT_INFO;
typedef PFAX_CONTEXT_INFOA PFAX_CONTEXT_INFO;
#endif // UNICODE
//
// prototypes
//
WINFAXAPI
BOOL
WINAPI
FaxConnectFaxServerA(
IN LPCSTR MachineName OPTIONAL,
OUT LPHANDLE FaxHandle
);
WINFAXAPI
BOOL
WINAPI
FaxConnectFaxServerW(
IN LPCWSTR MachineName OPTIONAL,
OUT LPHANDLE FaxHandle
);
#ifdef UNICODE
#define FaxConnectFaxServer FaxConnectFaxServerW
#else
#define FaxConnectFaxServer FaxConnectFaxServerA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXCONNECTFAXSERVERA)(
IN LPCSTR MachineName OPTIONAL,
OUT LPHANDLE FaxHandle
);
typedef BOOL
(WINAPI *PFAXCONNECTFAXSERVERW)(
IN LPCWSTR MachineName OPTIONAL,
OUT LPHANDLE FaxHandle
);
#ifdef UNICODE
#define PFAXCONNECTFAXSERVER PFAXCONNECTFAXSERVERW
#else
#define PFAXCONNECTFAXSERVER PFAXCONNECTFAXSERVERA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxClose(
IN HANDLE FaxHandle
);
typedef BOOL
(WINAPI *PFAXCLOSE)(
IN HANDLE FaxHandle
);
typedef enum
{
PORT_OPEN_QUERY = 1,
PORT_OPEN_MODIFY
} FAX_ENUM_PORT_OPEN_TYPE;
WINFAXAPI
BOOL
WINAPI
FaxOpenPort(
IN HANDLE FaxHandle,
IN DWORD DeviceId,
IN DWORD Flags,
OUT LPHANDLE FaxPortHandle
);
typedef BOOL
(WINAPI *PFAXOPENPORT)(
IN HANDLE FaxHandle,
IN DWORD DeviceId,
IN DWORD Flags,
OUT LPHANDLE FaxPortHandle
);
WINFAXAPI
BOOL
WINAPI
FaxCompleteJobParamsA(
IN OUT PFAX_JOB_PARAMA *JobParams,
IN OUT PFAX_COVERPAGE_INFOA *CoverpageInfo
);
WINFAXAPI
BOOL
WINAPI
FaxCompleteJobParamsW(
IN OUT PFAX_JOB_PARAMW *JobParams,
IN OUT PFAX_COVERPAGE_INFOW *CoverpageInfo
);
#ifdef UNICODE
#define FaxCompleteJobParams FaxCompleteJobParamsW
#else
#define FaxCompleteJobParams FaxCompleteJobParamsA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXCOMPLETEJOBPARAMSA)(
IN OUT PFAX_JOB_PARAMA *JobParams,
IN OUT PFAX_COVERPAGE_INFOA *CoverpageInfo
);
typedef BOOL
(WINAPI *PFAXCOMPLETEJOBPARAMSW)(
IN OUT PFAX_JOB_PARAMW *JobParams,
IN OUT PFAX_COVERPAGE_INFOW *CoverpageInfo
);
#ifdef UNICODE
#define PFAXCOMPLETEJOBPARAMS PFAXCOMPLETEJOBPARAMSW
#else
#define PFAXCOMPLETEJOBPARAMS PFAXCOMPLETEJOBPARAMSA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSendDocumentA(
IN HANDLE FaxHandle,
IN LPCSTR FileName,
IN PFAX_JOB_PARAMA JobParams,
IN const FAX_COVERPAGE_INFOA *CoverpageInfo, OPTIONAL
OUT LPDWORD FaxJobId OPTIONAL
);
WINFAXAPI
BOOL
WINAPI
FaxSendDocumentW(
IN HANDLE FaxHandle,
IN LPCWSTR FileName,
IN PFAX_JOB_PARAMW JobParams,
IN const FAX_COVERPAGE_INFOW *CoverpageInfo, OPTIONAL
OUT LPDWORD FaxJobId OPTIONAL
);
#ifdef UNICODE
#define FaxSendDocument FaxSendDocumentW
#else
#define FaxSendDocument FaxSendDocumentA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXSENDDOCUMENTA)(
IN HANDLE FaxHandle,
IN LPCSTR FileName,
IN PFAX_JOB_PARAMA JobParams,
IN const FAX_COVERPAGE_INFOA *CoverpageInfo, OPTIONAL
OUT LPDWORD FaxJobId OPTIONAL
);
typedef BOOL
(WINAPI *PFAXSENDDOCUMENTW)(
IN HANDLE FaxHandle,
IN LPCWSTR FileName,
IN PFAX_JOB_PARAMW JobParams,
IN const FAX_COVERPAGE_INFOW *CoverpageInfo, OPTIONAL
OUT LPDWORD FaxJobId OPTIONAL
);
#ifdef UNICODE
#define PFAXSENDDOCUMENT PFAXSENDDOCUMENTW
#else
#define PFAXSENDDOCUMENT PFAXSENDDOCUMENTA
#endif // !UNICODE
typedef BOOL
(CALLBACK *PFAX_RECIPIENT_CALLBACKA)(
IN HANDLE FaxHandle,
IN DWORD RecipientNumber,
IN LPVOID Context,
IN OUT PFAX_JOB_PARAMA JobParams,
IN OUT PFAX_COVERPAGE_INFOA CoverpageInfo OPTIONAL
);
typedef BOOL
(CALLBACK *PFAX_RECIPIENT_CALLBACKW)(
IN HANDLE FaxHandle,
IN DWORD RecipientNumber,
IN LPVOID Context,
IN OUT PFAX_JOB_PARAMW JobParams,
IN OUT PFAX_COVERPAGE_INFOW CoverpageInfo OPTIONAL
);
#ifdef UNICODE
#define PFAX_RECIPIENT_CALLBACK PFAX_RECIPIENT_CALLBACKW
#else
#define PFAX_RECIPIENT_CALLBACK PFAX_RECIPIENT_CALLBACKA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSendDocumentForBroadcastA(
IN HANDLE FaxHandle,
IN LPCSTR FileName,
OUT LPDWORD FaxJobId,
IN PFAX_RECIPIENT_CALLBACKA FaxRecipientCallback,
IN LPVOID Context
);
WINFAXAPI
BOOL
WINAPI
FaxSendDocumentForBroadcastW(
IN HANDLE FaxHandle,
IN LPCWSTR FileName,
OUT LPDWORD FaxJobId,
IN PFAX_RECIPIENT_CALLBACKW FaxRecipientCallback,
IN LPVOID Context
);
#ifdef UNICODE
#define FaxSendDocumentForBroadcast FaxSendDocumentForBroadcastW
#else
#define FaxSendDocumentForBroadcast FaxSendDocumentForBroadcastA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXSENDDOCUMENTFORBROADCASTA)(
IN HANDLE FaxHandle,
IN LPCSTR FileName,
OUT LPDWORD FaxJobId,
IN PFAX_RECIPIENT_CALLBACKA FaxRecipientCallback,
IN LPVOID Context
);
typedef BOOL
(WINAPI *PFAXSENDDOCUMENTFORBROADCASTW)(
IN HANDLE FaxHandle,
IN LPCWSTR FileName,
OUT LPDWORD FaxJobId,
IN PFAX_RECIPIENT_CALLBACKW FaxRecipientCallback,
IN LPVOID Context
);
#ifdef UNICODE
#define PFAXSENDDOCUMENTFORBROADCAST PFAXSENDDOCUMENTFORBROADCASTW
#else
#define PFAXSENDDOCUMENTFORBROADCAST PFAXSENDDOCUMENTFORBROADCASTA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetJobA(
IN HANDLE FaxHandle,
IN DWORD JobId,
IN DWORD Command,
IN const FAX_JOB_ENTRYA *JobEntry
);
WINFAXAPI
BOOL
WINAPI
FaxSetJobW(
IN HANDLE FaxHandle,
IN DWORD JobId,
IN DWORD Command,
IN const FAX_JOB_ENTRYW *JobEntry
);
#ifdef UNICODE
#define FaxSetJob FaxSetJobW
#else
#define FaxSetJob FaxSetJobA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXSETJOBA)(
IN HANDLE FaxHandle,
IN DWORD JobId,
IN DWORD Command,
IN const FAX_JOB_ENTRYA *JobEntry
);
typedef BOOL
(WINAPI *PFAXSETJOBW)(
IN HANDLE FaxHandle,
IN DWORD JobId,
IN DWORD Command,
IN const FAX_JOB_ENTRYW *JobEntry
);
#ifdef UNICODE
#define PFAXSETJOB PFAXSETJOBW
#else
#define PFAXSETJOB PFAXSETJOBA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetPageData(
IN HANDLE FaxHandle,
IN DWORD JobId,
OUT LPBYTE *Buffer,
OUT LPDWORD BufferSize,
OUT LPDWORD ImageWidth,
OUT LPDWORD ImageHeight
);
typedef BOOL
(WINAPI *PFAXGETPAGEDATA)(
IN HANDLE FaxHandle,
IN DWORD JobId,
OUT LPBYTE *Buffer,
OUT LPDWORD BufferSize,
OUT LPDWORD ImageWidth,
OUT LPDWORD ImageHeight
);
WINFAXAPI
BOOL
WINAPI
FaxGetDeviceStatusA(
IN HANDLE FaxPortHandle,
OUT PFAX_DEVICE_STATUSA *DeviceStatus
);
WINFAXAPI
BOOL
WINAPI
FaxGetDeviceStatusW(
IN HANDLE FaxPortHandle,
OUT PFAX_DEVICE_STATUSW *DeviceStatus
);
#ifdef UNICODE
#define FaxGetDeviceStatus FaxGetDeviceStatusW
#else
#define FaxGetDeviceStatus FaxGetDeviceStatusA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXGETDEVICESTATUSA)(
IN HANDLE FaxPortHandle,
OUT PFAX_DEVICE_STATUSA *DeviceStatus
);
typedef BOOL
(WINAPI *PFAXGETDEVICESTATUSW)(
IN HANDLE FaxPortHandle,
OUT PFAX_DEVICE_STATUSW *DeviceStatus
);
#ifdef UNICODE
#define PFAXGETDEVICESTATUS PFAXGETDEVICESTATUSW
#else
#define PFAXGETDEVICESTATUS PFAXGETDEVICESTATUSA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxAbort(
IN HANDLE FaxHandle,
IN DWORD JobId
);
typedef BOOL
(WINAPI *PFAXABORT)(
IN HANDLE FaxHandle,
IN DWORD JobId
);
WINFAXAPI
BOOL
WINAPI
FaxGetConfigurationA(
IN HANDLE FaxHandle,
OUT PFAX_CONFIGURATIONA *FaxConfig
);
WINFAXAPI
BOOL
WINAPI
FaxGetConfigurationW(
IN HANDLE FaxHandle,
OUT PFAX_CONFIGURATIONW *FaxConfig
);
#ifdef UNICODE
#define FaxGetConfiguration FaxGetConfigurationW
#else
#define FaxGetConfiguration FaxGetConfigurationA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXGETCONFIGURATIONA)(
IN HANDLE FaxHandle,
OUT PFAX_CONFIGURATIONA *FaxConfig
);
typedef BOOL
(WINAPI *PFAXGETCONFIGURATIONW)(
IN HANDLE FaxHandle,
OUT PFAX_CONFIGURATIONW *FaxConfig
);
#ifdef UNICODE
#define PFAXGETCONFIGURATION PFAXGETCONFIGURATIONW
#else
#define PFAXGETCONFIGURATION PFAXGETCONFIGURATIONA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetConfigurationA(
IN HANDLE FaxHandle,
IN const FAX_CONFIGURATIONA *FaxConfig
);
WINFAXAPI
BOOL
WINAPI
FaxSetConfigurationW(
IN HANDLE FaxHandle,
IN const FAX_CONFIGURATIONW *FaxConfig
);
#ifdef UNICODE
#define FaxSetConfiguration FaxSetConfigurationW
#else
#define FaxSetConfiguration FaxSetConfigurationA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXSETCONFIGURATIONA)(
IN HANDLE FaxHandle,
IN const FAX_CONFIGURATIONA *FaxConfig
);
typedef BOOL
(WINAPI *PFAXSETCONFIGURATIONW)(
IN HANDLE FaxHandle,
IN const FAX_CONFIGURATIONW *FaxConfig
);
#ifdef UNICODE
#define PFAXSETCONFIGURATION PFAXSETCONFIGURATIONW
#else
#define PFAXSETCONFIGURATION PFAXSETCONFIGURATIONA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetLoggingCategoriesA(
IN HANDLE FaxHandle,
OUT PFAX_LOG_CATEGORYA *Categories,
OUT LPDWORD NumberCategories
);
WINFAXAPI
BOOL
WINAPI
FaxGetLoggingCategoriesW(
IN HANDLE FaxHandle,
OUT PFAX_LOG_CATEGORYW *Categories,
OUT LPDWORD NumberCategories
);
#ifdef UNICODE
#define FaxGetLoggingCategories FaxGetLoggingCategoriesW
#else
#define FaxGetLoggingCategories FaxGetLoggingCategoriesA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXGETLOGGINGCATEGORIESA)(
IN HANDLE FaxHandle,
OUT PFAX_LOG_CATEGORYA *Categories,
OUT LPDWORD NumberCategories
);
typedef BOOL
(WINAPI *PFAXGETLOGGINGCATEGORIESW)(
IN HANDLE FaxHandle,
OUT PFAX_LOG_CATEGORYW *Categories,
OUT LPDWORD NumberCategories
);
#ifdef UNICODE
#define PFAXGETLOGGINGCATEGORIES PFAXGETLOGGINGCATEGORIESW
#else
#define PFAXGETLOGGINGCATEGORIES PFAXGETLOGGINGCATEGORIESA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetLoggingCategoriesA(
IN HANDLE FaxHandle,
IN const FAX_LOG_CATEGORYA *Categories,
IN DWORD NumberCategories
);
WINFAXAPI
BOOL
WINAPI
FaxSetLoggingCategoriesW(
IN HANDLE FaxHandle,
IN const FAX_LOG_CATEGORYW *Categories,
IN DWORD NumberCategories
);
#ifdef UNICODE
#define FaxSetLoggingCategories FaxSetLoggingCategoriesW
#else
#define FaxSetLoggingCategories FaxSetLoggingCategoriesA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXSETLOGGINGCATEGORIESA)(
IN HANDLE FaxHandle,
IN const FAX_LOG_CATEGORYA *Categories,
IN DWORD NumberCategories
);
typedef BOOL
(WINAPI *PFAXSETLOGGINGCATEGORIESW)(
IN HANDLE FaxHandle,
IN const FAX_LOG_CATEGORYW *Categories,
IN DWORD NumberCategories
);
#ifdef UNICODE
#define PFAXSETLOGGINGCATEGORIES PFAXSETLOGGINGCATEGORIESW
#else
#define PFAXSETLOGGINGCATEGORIES PFAXSETLOGGINGCATEGORIESA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxEnumPortsA(
IN HANDLE FaxHandle,
OUT PFAX_PORT_INFOA *PortInfo,
OUT LPDWORD PortsReturned
);
WINFAXAPI
BOOL
WINAPI
FaxEnumPortsW(
IN HANDLE FaxHandle,
OUT PFAX_PORT_INFOW *PortInfo,
OUT LPDWORD PortsReturned
);
#ifdef UNICODE
#define FaxEnumPorts FaxEnumPortsW
#else
#define FaxEnumPorts FaxEnumPortsA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXENUMPORTSA)(
IN HANDLE FaxHandle,
OUT PFAX_PORT_INFOA *PortInfo,
OUT LPDWORD PortsReturned
);
typedef BOOL
(WINAPI *PFAXENUMPORTSW)(
IN HANDLE FaxHandle,
OUT PFAX_PORT_INFOW *PortInfo,
OUT LPDWORD PortsReturned
);
#ifdef UNICODE
#define PFAXENUMPORTS PFAXENUMPORTSW
#else
#define PFAXENUMPORTS PFAXENUMPORTSA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetPortA(
IN HANDLE FaxPortHandle,
OUT PFAX_PORT_INFOA *PortInfo
);
WINFAXAPI
BOOL
WINAPI
FaxGetPortW(
IN HANDLE FaxPortHandle,
OUT PFAX_PORT_INFOW *PortInfo
);
#ifdef UNICODE
#define FaxGetPort FaxGetPortW
#else
#define FaxGetPort FaxGetPortA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXGETPORTA)(
IN HANDLE FaxPortHandle,
OUT PFAX_PORT_INFOA *PortInfo
);
typedef BOOL
(WINAPI *PFAXGETPORTW)(
IN HANDLE FaxPortHandle,
OUT PFAX_PORT_INFOW *PortInfo
);
#ifdef UNICODE
#define PFAXGETPORT PFAXGETPORTW
#else
#define PFAXGETPORT PFAXGETPORTA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetPortA(
IN HANDLE FaxPortHandle,
IN const FAX_PORT_INFOA *PortInfo
);
WINFAXAPI
BOOL
WINAPI
FaxSetPortW(
IN HANDLE FaxPortHandle,
IN const FAX_PORT_INFOW *PortInfo
);
#ifdef UNICODE
#define FaxSetPort FaxSetPortW
#else
#define FaxSetPort FaxSetPortA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXSETPORTA)(
IN HANDLE FaxPortHandle,
IN const FAX_PORT_INFOA *PortInfo
);
typedef BOOL
(WINAPI *PFAXSETPORTW)(
IN HANDLE FaxPortHandle,
IN const FAX_PORT_INFOW *PortInfo
);
#ifdef UNICODE
#define PFAXSETPORT PFAXSETPORTW
#else
#define PFAXSETPORT PFAXSETPORTA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxEnumRoutingMethodsA(
IN HANDLE FaxPortHandle,
OUT PFAX_ROUTING_METHODA *RoutingMethod,
OUT LPDWORD MethodsReturned
);
WINFAXAPI
BOOL
WINAPI
FaxEnumRoutingMethodsW(
IN HANDLE FaxPortHandle,
OUT PFAX_ROUTING_METHODW *RoutingMethod,
OUT LPDWORD MethodsReturned
);
#ifdef UNICODE
#define FaxEnumRoutingMethods FaxEnumRoutingMethodsW
#else
#define FaxEnumRoutingMethods FaxEnumRoutingMethodsA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXENUMROUTINGMETHODSA)(
IN HANDLE FaxPortHandle,
OUT PFAX_ROUTING_METHODA *RoutingMethod,
OUT LPDWORD MethodsReturned
);
typedef BOOL
(WINAPI *PFAXENUMROUTINGMETHODSW)(
IN HANDLE FaxPortHandle,
OUT PFAX_ROUTING_METHODW *RoutingMethod,
OUT LPDWORD MethodsReturned
);
#ifdef UNICODE
#define PFAXENUMROUTINGMETHODS PFAXENUMROUTINGMETHODSW
#else
#define PFAXENUMROUTINGMETHODS PFAXENUMROUTINGMETHODSA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxEnableRoutingMethodA(
IN HANDLE FaxPortHandle,
IN LPCSTR RoutingGuid,
IN BOOL Enabled
);
WINFAXAPI
BOOL
WINAPI
FaxEnableRoutingMethodW(
IN HANDLE FaxPortHandle,
IN LPCWSTR RoutingGuid,
IN BOOL Enabled
);
#ifdef UNICODE
#define FaxEnableRoutingMethod FaxEnableRoutingMethodW
#else
#define FaxEnableRoutingMethod FaxEnableRoutingMethodA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXENABLEROUTINGMETHODA)(
IN HANDLE FaxPortHandle,
IN LPCSTR RoutingGuid,
IN BOOL Enabled
);
typedef BOOL
(WINAPI *PFAXENABLEROUTINGMETHODW)(
IN HANDLE FaxPortHandle,
IN LPCWSTR RoutingGuid,
IN BOOL Enabled
);
#ifdef UNICODE
#define PFAXENABLEROUTINGMETHOD PFAXENABLEROUTINGMETHODW
#else
#define PFAXENABLEROUTINGMETHOD PFAXENABLEROUTINGMETHODA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxEnumGlobalRoutingInfoA(
IN HANDLE FaxHandle,
OUT PFAX_GLOBAL_ROUTING_INFOA *RoutingInfo,
OUT LPDWORD MethodsReturned
);
WINFAXAPI
BOOL
WINAPI
FaxEnumGlobalRoutingInfoW(
IN HANDLE FaxHandle,
OUT PFAX_GLOBAL_ROUTING_INFOW *RoutingInfo,
OUT LPDWORD MethodsReturned
);
#ifdef UNICODE
#define FaxEnumGlobalRoutingInfo FaxEnumGlobalRoutingInfoW
#else
#define FaxEnumGlobalRoutingInfo FaxEnumGlobalRoutingInfoA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXENUMGLOBALROUTINGINFOA)(
IN HANDLE FaxHandle,
OUT PFAX_GLOBAL_ROUTING_INFOA *RoutingInfo,
OUT LPDWORD MethodsReturned
);
typedef BOOL
(WINAPI *PFAXENUMGLOBALROUTINGINFOW)(
IN HANDLE FaxHandle,
OUT PFAX_GLOBAL_ROUTING_INFOW *RoutingInfo,
OUT LPDWORD MethodsReturned
);
#ifdef UNICODE
#define PFAXENUMGLOBALROUTINGINFO PFAXENUMGLOBALROUTINGINFOW
#else
#define PFAXENUMGLOBALROUTINGINFO PFAXENUMGLOBALROUTINGINFOA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetGlobalRoutingInfoA(
IN HANDLE FaxHandle,
IN const FAX_GLOBAL_ROUTING_INFOA *RoutingInfo
);
WINFAXAPI
BOOL
WINAPI
FaxSetGlobalRoutingInfoW(
IN HANDLE FaxHandle,
IN const FAX_GLOBAL_ROUTING_INFOW *RoutingInfo
);
#ifdef UNICODE
#define FaxSetGlobalRoutingInfo FaxSetGlobalRoutingInfoW
#else
#define FaxSetGlobalRoutingInfo FaxSetGlobalRoutingInfoA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXSETGLOBALROUTINGINFOA)(
IN HANDLE FaxPortHandle,
IN const FAX_GLOBAL_ROUTING_INFOA *RoutingInfo
);
typedef BOOL
(WINAPI *PFAXSETGLOBALROUTINGINFOW)(
IN HANDLE FaxPortHandle,
IN const FAX_GLOBAL_ROUTING_INFOW *RoutingInfo
);
#ifdef UNICODE
#define PFAXSETGLOBALROUTINGINFO PFAXSETGLOBALROUTINGINFOW
#else
#define PFAXSETGLOBALROUTINGINFO PFAXSETGLOBALROUTINGINFOA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetRoutingInfoA(
IN HANDLE FaxPortHandle,
IN LPCSTR RoutingGuid,
OUT LPBYTE *RoutingInfoBuffer,
OUT LPDWORD RoutingInfoBufferSize
);
WINFAXAPI
BOOL
WINAPI
FaxGetRoutingInfoW(
IN HANDLE FaxPortHandle,
IN LPCWSTR RoutingGuid,
OUT LPBYTE *RoutingInfoBuffer,
OUT LPDWORD RoutingInfoBufferSize
);
#ifdef UNICODE
#define FaxGetRoutingInfo FaxGetRoutingInfoW
#else
#define FaxGetRoutingInfo FaxGetRoutingInfoA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXGETROUTINGINFOA)(
IN HANDLE FaxPortHandle,
IN LPCSTR RoutingGuid,
OUT LPBYTE *RoutingInfoBuffer,
OUT LPDWORD RoutingInfoBufferSize
);
typedef BOOL
(WINAPI *PFAXGETROUTINGINFOW)(
IN HANDLE FaxPortHandle,
IN LPCWSTR RoutingGuid,
OUT LPBYTE *RoutingInfoBuffer,
OUT LPDWORD RoutingInfoBufferSize
);
#ifdef UNICODE
#define PFAXGETROUTINGINFO PFAXGETROUTINGINFOW
#else
#define PFAXGETROUTINGINFO PFAXGETROUTINGINFOA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetRoutingInfoA(
IN HANDLE FaxPortHandle,
IN LPCSTR RoutingGuid,
IN const BYTE *RoutingInfoBuffer,
IN DWORD RoutingInfoBufferSize
);
WINFAXAPI
BOOL
WINAPI
FaxSetRoutingInfoW(
IN HANDLE FaxPortHandle,
IN LPCWSTR RoutingGuid,
IN const BYTE *RoutingInfoBuffer,
IN DWORD RoutingInfoBufferSize
);
#ifdef UNICODE
#define FaxSetRoutingInfo FaxSetRoutingInfoW
#else
#define FaxSetRoutingInfo FaxSetRoutingInfoA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXSETROUTINGINFOA)(
IN HANDLE FaxPortHandle,
IN LPCSTR RoutingGuid,
IN const BYTE *RoutingInfoBuffer,
IN DWORD RoutingInfoBufferSize
);
typedef BOOL
(WINAPI *PFAXSETROUTINGINFOW)(
IN HANDLE FaxPortHandle,
IN LPCWSTR RoutingGuid,
IN const BYTE *RoutingInfoBuffer,
IN DWORD RoutingInfoBufferSize
);
#ifdef UNICODE
#define PFAXSETROUTINGINFO PFAXSETROUTINGINFOW
#else
#define PFAXSETROUTINGINFO PFAXSETROUTINGINFOA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxRelease(
IN HANDLE FaxHandle
);
typedef BOOL
(WINAPI *PFAXRELEASE)(
IN HANDLE FaxHandle
);
BOOL
FXSAPIInitialize(
VOID
);
VOID
FXSAPIFree(
VOID
);
WINFAXAPI
BOOL
WINAPI
FaxStartPrintJob2A
(
IN LPCSTR PrinterName,
IN const FAX_PRINT_INFOA *PrintInfo,
IN short TiffRes,
OUT LPDWORD FaxJobId,
OUT PFAX_CONTEXT_INFOA FaxContextInfo
);
WINFAXAPI
BOOL
WINAPI
FaxStartPrintJob2W
(
IN LPCWSTR PrinterName,
IN const FAX_PRINT_INFOW *PrintInfo,
IN short TiffRes,
OUT LPDWORD FaxJobId,
OUT PFAX_CONTEXT_INFOW FaxContextInfo
);
#ifdef UNICODE
#define FaxStartPrintJob2 FaxStartPrintJob2W
#else
#define FaxStartPrintJob2 FaxStartPrintJob2A
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxInitializeEventQueue(
IN HANDLE FaxHandle,
IN HANDLE CompletionPort,
IN ULONG_PTR CompletionKey,
IN HWND hWnd,
IN UINT MessageStart
);
typedef BOOL
(WINAPI *PFAXINITIALIZEEVENTQUEUE)(
IN HANDLE FaxHandle,
IN HANDLE CompletionPort,
IN ULONG_PTR CompletionKey,
IN HWND hWnd,
IN UINT MessageStart
);
WINFAXAPI
VOID
WINAPI
FaxFreeBuffer(
LPVOID Buffer
);
typedef VOID
(WINAPI *PFAXFREEBUFFER)(
LPVOID Buffer
);
WINFAXAPI
BOOL
WINAPI
FaxStartPrintJobA(
IN LPCSTR PrinterName,
IN const FAX_PRINT_INFOA *PrintInfo,
OUT LPDWORD FaxJobId,
OUT PFAX_CONTEXT_INFOA FaxContextInfo
);
WINFAXAPI
BOOL
WINAPI
FaxStartPrintJobW(
IN LPCWSTR PrinterName,
IN const FAX_PRINT_INFOW *PrintInfo,
OUT LPDWORD FaxJobId,
OUT PFAX_CONTEXT_INFOW FaxContextInfo
);
#ifdef UNICODE
#define FaxStartPrintJob FaxStartPrintJobW
#else
#define FaxStartPrintJob FaxStartPrintJobA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXSTARTPRINTJOBA)(
IN LPCSTR PrinterName,
IN const FAX_PRINT_INFOA *PrintInfo,
OUT LPDWORD FaxJobId,
OUT PFAX_CONTEXT_INFOA FaxContextInfo
);
typedef BOOL
(WINAPI *PFAXSTARTPRINTJOBW)(
IN LPCWSTR PrinterName,
IN const FAX_PRINT_INFOW *PrintInfo,
OUT LPDWORD FaxJobId,
OUT PFAX_CONTEXT_INFOW FaxContextInfo
);
#ifdef UNICODE
#define PFAXSTARTPRINTJOB PFAXSTARTPRINTJOBW
#else
#define PFAXSTARTPRINTJOB PFAXSTARTPRINTJOBA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxPrintCoverPageA(
IN const FAX_CONTEXT_INFOA *FaxContextInfo,
IN const FAX_COVERPAGE_INFOA *CoverPageInfo
);
WINFAXAPI
BOOL
WINAPI
FaxPrintCoverPageW(
IN const FAX_CONTEXT_INFOW *FaxContextInfo,
IN const FAX_COVERPAGE_INFOW *CoverPageInfo
);
#ifdef UNICODE
#define FaxPrintCoverPage FaxPrintCoverPageW
#else
#define FaxPrintCoverPage FaxPrintCoverPageA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXPRINTCOVERPAGEA)(
IN const FAX_CONTEXT_INFOA *FaxContextInfo,
IN const FAX_COVERPAGE_INFOA *CoverPageInfo
);
typedef BOOL
(WINAPI *PFAXPRINTCOVERPAGEW)(
IN const FAX_CONTEXT_INFOW *FaxContextInfo,
IN const FAX_COVERPAGE_INFOW *CoverPageInfo
);
#ifdef UNICODE
#define PFAXPRINTCOVERPAGE PFAXPRINTCOVERPAGEW
#else
#define PFAXPRINTCOVERPAGE PFAXPRINTCOVERPAGEA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxRegisterServiceProviderW(
IN LPCWSTR DeviceProvider,
IN LPCWSTR FriendlyName,
IN LPCWSTR ImageName,
IN LPCWSTR TspName
);
#define FaxRegisterServiceProvider FaxRegisterServiceProviderW
typedef BOOL
(WINAPI *PFAXREGISTERSERVICEPROVIDERW)(
IN LPCWSTR DeviceProvider,
IN LPCWSTR FriendlyName,
IN LPCWSTR ImageName,
IN LPCWSTR TspName
);
#define PFAXREGISTERSERVICEPROVIDER PFAXREGISTERSERVICEPROVIDERW
WINFAXAPI
BOOL
WINAPI
FaxUnregisterServiceProviderW(
IN LPCWSTR DeviceProvider
);
#define FaxUnregisterServiceProvider FaxUnregisterServiceProviderW
typedef BOOL
(WINAPI *PFAXUNREGISTERSERVICEPROVIDERW)(
IN LPCWSTR DeviceProvider
);
#define PFAXUNREGISTERSERVICEPROVIDER PFAXUNREGISTERSERVICEPROVIDERW
typedef BOOL
(CALLBACK *PFAX_ROUTING_INSTALLATION_CALLBACKW)(
IN HANDLE FaxHandle,
IN LPVOID Context,
IN OUT LPWSTR MethodName,
IN OUT LPWSTR FriendlyName,
IN OUT LPWSTR FunctionName,
IN OUT LPWSTR Guid
);
#define PFAX_ROUTING_INSTALLATION_CALLBACK PFAX_ROUTING_INSTALLATION_CALLBACKW
WINFAXAPI
BOOL
WINAPI
FaxRegisterRoutingExtensionW(
IN HANDLE FaxHandle,
IN LPCWSTR ExtensionName,
IN LPCWSTR FriendlyName,
IN LPCWSTR ImageName,
IN PFAX_ROUTING_INSTALLATION_CALLBACKW CallBack,
IN LPVOID Context
);
#define FaxRegisterRoutingExtension FaxRegisterRoutingExtensionW
typedef BOOL
(WINAPI *PFAXREGISTERROUTINGEXTENSIONW)(
IN HANDLE FaxHandle,
IN LPCWSTR ExtensionName,
IN LPCWSTR FriendlyName,
IN LPCWSTR ImageName,
IN PFAX_ROUTING_INSTALLATION_CALLBACKW CallBack,
IN LPVOID Context
);
#define PFAXREGISTERROUTINGEXTENSION PFAXREGISTERROUTINGEXTENSIONW
WINFAXAPI
BOOL
WINAPI
FaxUnregisterRoutingExtensionA(
IN HANDLE hFaxHandle,
IN LPCSTR lpctstrExtensionName
);
WINFAXAPI
BOOL
WINAPI
FaxUnregisterRoutingExtensionW(
IN HANDLE hFaxHandle,
IN LPCWSTR lpctstrExtensionName
);
#ifdef UNICODE
#define FaxUnregisterRoutingExtension FaxUnregisterRoutingExtensionW
#else
#define FaxUnregisterRoutingExtension FaxUnregisterRoutingExtensionA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetInstallType(
IN HANDLE FaxHandle,
OUT LPDWORD InstallType,
OUT LPDWORD InstalledPlatforms,
OUT LPDWORD ProductType
);
typedef BOOL
(WINAPI *PFAXGETINSTALLTYPE)(
IN HANDLE FaxHandle,
OUT LPDWORD InstallType,
OUT LPDWORD InstalledPlatforms,
OUT LPDWORD ProductType
);
WINFAXAPI
BOOL
WINAPI
FaxAccessCheck(
IN HANDLE FaxHandle,
IN DWORD AccessMask
);
typedef BOOL
(WINAPI *PFAXACCESSCHECK)(
IN HANDLE FaxHandle,
IN DWORD AccessMask
);
//
// Fax Specific Access Rights
//
#define FAX_JOB_SUBMIT (0x0001)
#define FAX_JOB_QUERY (0x0002)
#define FAX_CONFIG_QUERY (0x0004)
#define FAX_CONFIG_SET (0x0008)
#define FAX_PORT_QUERY (0x0010)
#define FAX_PORT_SET (0x0020)
#define FAX_JOB_MANAGE (0x0040)
#define FAX_READ (STANDARD_RIGHTS_READ |\
FAX_JOB_QUERY |\
FAX_CONFIG_QUERY |\
FAX_PORT_QUERY)
#define FAX_WRITE (STANDARD_RIGHTS_WRITE |\
FAX_JOB_SUBMIT )
#define FAX_ALL_ACCESS (STANDARD_RIGHTS_ALL |\
FAX_JOB_SUBMIT |\
FAX_JOB_QUERY |\
FAX_CONFIG_QUERY |\
FAX_CONFIG_SET |\
FAX_PORT_QUERY |\
FAX_PORT_SET |\
FAX_JOB_MANAGE)
//************************************
//* Extended API Functions
//************************************
#define MAX_DIR_PATH 248
//
// Outbound routing defines
//
#define ROUTING_RULE_COUNTRY_CODE_ANY 0 // Outbound routing rule - Any country dialing code
#define ROUTING_RULE_AREA_CODE_ANY 0 // Outbound routing rule - Any area dialing code
#define MAX_ROUTING_GROUP_NAME 128
#define ROUTING_GROUP_ALL_DEVICESW L"<All devices>"
#define ROUTING_GROUP_ALL_DEVICESA "<All devices>"
#ifdef UNICODE
#define ROUTING_GROUP_ALL_DEVICES ROUTING_GROUP_ALL_DEVICESW
#else
#define ROUTING_GROUP_ALL_DEVICES ROUTING_GROUP_ALL_DEVICESA;
#endif // UNICODE
//
// Activity logging defines
//
#define ACTIVITY_LOG_INBOX_FILENAME TEXT("InboxLOG")
#define ACTIVITY_LOG_OUTBOX_FILENAME TEXT("OutboxLOG")
#define ACTIVITY_LOG_FILE_EXTENSION TEXT(".txt")
#define ACTIVITY_LOG_INBOX_FILE ACTIVITY_LOG_INBOX_FILENAME ACTIVITY_LOG_FILE_EXTENSION
#define ACTIVITY_LOG_OUTBOX_FILE ACTIVITY_LOG_OUTBOX_FILENAME ACTIVITY_LOG_FILE_EXTENSION
#define ACTIVITY_LOG_INBOX_FILENAME_TEMPLATE ACTIVITY_LOG_INBOX_FILENAME TEXT(" %04d-%02d-%02d - %04d-%02d-%02d") ACTIVITY_LOG_FILE_EXTENSION
#define ACTIVITY_LOG_OUTBOX_FILENAME_TEMPLATE ACTIVITY_LOG_OUTBOX_FILENAME TEXT(" %04d-%02d-%02d - %04d-%02d-%02d") ACTIVITY_LOG_FILE_EXTENSION
#define ACTIVITY_LOG_INBOX (0x0000)
#define ACTIVITY_LOG_OUTBOX (0x0001)
#define ACTIVITY_LOG_LIMIT_CRITERIA_NONE (0x0000)
#define ACTIVITY_LOG_LIMIT_CRITERIA_SIZE (0x0001)
#define ACTIVITY_LOG_LIMIT_CRITERIA_AGE (0x0002)
#define ACTIVITY_LOG_LIMIT_REACHED_ACTION_COPY (0x0000)
#define ACTIVITY_LOG_LIMIT_REACHED_ACTION_DELETE (0x0001)
#define ACTIVITY_LOG_DEFAULT_SIZE_LIMIT (50) // 50 Mbyte
#define ACTIVITY_LOG_DEFAULT_AGE_LIMIT (1) // 1 Month
//
// Archive defines
//
#define FAX_ARCHIVE_FOLDER_INVALID_SIZE MAKELONGLONG(0xffffffff, 0xffffffff)
#define MAX_ARCHIVE_FOLDER_PATH 180
//
// New job status codes
//
#define JS_COMPLETED 0x00000100
#define JS_CANCELED 0x00000200
#define JS_CANCELING 0x00000400
#define JS_ROUTING 0x00000800
//
// Extended job status defines
//
#define JS_EX_DISCONNECTED 0x00000001
#define JS_EX_INITIALIZING 0x00000002
#define JS_EX_DIALING 0x00000003
#define JS_EX_TRANSMITTING 0x00000004
#define JS_EX_ANSWERED 0x00000005
#define JS_EX_RECEIVING 0x00000006
#define JS_EX_LINE_UNAVAILABLE 0x00000007
#define JS_EX_BUSY 0x00000008
#define JS_EX_NO_ANSWER 0x00000009
#define JS_EX_BAD_ADDRESS 0x0000000A
#define JS_EX_NO_DIAL_TONE 0x0000000B
#define JS_EX_FATAL_ERROR 0x0000000C
#define JS_EX_CALL_DELAYED 0x0000000D
#define JS_EX_CALL_BLACKLISTED 0x0000000E
#define JS_EX_NOT_FAX_CALL 0x0000000F
#define JS_EX_PARTIALLY_RECEIVED 0x00000010
#define JS_EX_HANDLED 0x00000011
#define FAX_API_VER_0_MAX_JS_EX JS_EX_HANDLED // API version 0 was only aware of extended status codes up to JS_EX_HANDLED
#define JS_EX_CALL_COMPLETED 0x00000012
#define JS_EX_CALL_ABORTED 0x00000013
#define FAX_API_VER_1_MAX_JS_EX JS_EX_CALL_ABORTED // API version 0 was only aware of extended status codes up to JS_EX_CALL_ABORTED
//
// Available job operations
//
typedef enum
{
FAX_JOB_OP_VIEW = 0x0001,
FAX_JOB_OP_PAUSE = 0x0002,
FAX_JOB_OP_RESUME = 0x0004,
FAX_JOB_OP_RESTART = 0x0008,
FAX_JOB_OP_DELETE = 0x0010,
FAX_JOB_OP_RECIPIENT_INFO = 0x0020,
FAX_JOB_OP_SENDER_INFO = 0x0040
} FAX_ENUM_JOB_OP;
//************************************
//* Getting / Settings the queue state
//************************************
typedef enum
{
FAX_INCOMING_BLOCKED = 0x0001,
FAX_OUTBOX_BLOCKED = 0x0002,
FAX_OUTBOX_PAUSED = 0x0004
} FAX_ENUM_QUEUE_STATE;
WINFAXAPI
BOOL
WINAPI
FaxGetQueueStates (
IN HANDLE hFaxHandle,
OUT PDWORD pdwQueueStates
);
WINFAXAPI
BOOL
WINAPI
FaxSetQueue (
IN HANDLE hFaxHandle,
IN CONST DWORD dwQueueStates
);
//************************************************
//* Getting / Setting the receipts configuration
//************************************************
typedef enum
{
FAX_SMTP_AUTH_ANONYMOUS,
FAX_SMTP_AUTH_BASIC,
FAX_SMTP_AUTH_NTLM
} FAX_ENUM_SMTP_AUTH_OPTIONS;
typedef struct _FAX_RECEIPTS_CONFIGA
{
DWORD dwSizeOfStruct; // For version checks
DWORD dwAllowedReceipts; // Any combination of DRT_EMAIL and DRT_MSGBOX
FAX_ENUM_SMTP_AUTH_OPTIONS SMTPAuthOption; // SMTP server authentication type
LPSTR lptstrReserved; // Reserved; must be NULL
LPSTR lptstrSMTPServer; // SMTP server name
DWORD dwSMTPPort; // SMTP port number
LPSTR lptstrSMTPFrom; // SMTP sender address
LPSTR lptstrSMTPUserName; // SMTP user name (for authenticated connections)
LPSTR lptstrSMTPPassword; // SMTP password (for authenticated connections)
// This value is always NULL on get and may be NULL
// on set (won't be written in the server).
BOOL bIsToUseForMSRouteThroughEmailMethod;
} FAX_RECEIPTS_CONFIGA, *PFAX_RECEIPTS_CONFIGA;
typedef struct _FAX_RECEIPTS_CONFIGW
{
DWORD dwSizeOfStruct; // For version checks
DWORD dwAllowedReceipts; // Any combination of DRT_EMAIL and DRT_MSGBOX
FAX_ENUM_SMTP_AUTH_OPTIONS SMTPAuthOption; // SMTP server authentication type
LPWSTR lptstrReserved; // Reserved; must be NULL
LPWSTR lptstrSMTPServer; // SMTP server name
DWORD dwSMTPPort; // SMTP port number
LPWSTR lptstrSMTPFrom; // SMTP sender address
LPWSTR lptstrSMTPUserName; // SMTP user name (for authenticated connections)
LPWSTR lptstrSMTPPassword; // SMTP password (for authenticated connections)
// This value is always NULL on get and may be NULL
// on set (won't be written in the server).
BOOL bIsToUseForMSRouteThroughEmailMethod;
} FAX_RECEIPTS_CONFIGW, *PFAX_RECEIPTS_CONFIGW;
#ifdef UNICODE
typedef FAX_RECEIPTS_CONFIGW FAX_RECEIPTS_CONFIG;
typedef PFAX_RECEIPTS_CONFIGW PFAX_RECEIPTS_CONFIG;
#else
typedef FAX_RECEIPTS_CONFIGA FAX_RECEIPTS_CONFIG;
typedef PFAX_RECEIPTS_CONFIGA PFAX_RECEIPTS_CONFIG;
#endif // UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetReceiptsConfigurationA (
IN HANDLE hFaxHandle,
OUT PFAX_RECEIPTS_CONFIGA *ppReceipts
);
WINFAXAPI
BOOL
WINAPI
FaxGetReceiptsConfigurationW (
IN HANDLE hFaxHandle,
OUT PFAX_RECEIPTS_CONFIGW *ppReceipts
);
#ifdef UNICODE
#define FaxGetReceiptsConfiguration FaxGetReceiptsConfigurationW
#else
#define FaxGetReceiptsConfiguration FaxGetReceiptsConfigurationA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetReceiptsConfigurationA (
IN HANDLE hFaxHandle,
IN CONST PFAX_RECEIPTS_CONFIGA pReceipts
);
WINFAXAPI
BOOL
WINAPI
FaxSetReceiptsConfigurationW (
IN HANDLE hFaxHandle,
IN CONST PFAX_RECEIPTS_CONFIGW pReceipts
);
#ifdef UNICODE
#define FaxSetReceiptsConfiguration FaxSetReceiptsConfigurationW
#else
#define FaxSetReceiptsConfiguration FaxSetReceiptsConfigurationA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetReceiptsOptions (
IN HANDLE hFaxHandle,
OUT PDWORD pdwReceiptsOptions // Combination of DRT_EMAIL and DRT_MSGBOX
);
//********************************************
//* Server version
//********************************************
typedef struct _FAX_VERSION
{
DWORD dwSizeOfStruct; // Size of this structure
BOOL bValid; // Is version valid?
WORD wMajorVersion;
WORD wMinorVersion;
WORD wMajorBuildNumber;
WORD wMinorBuildNumber;
DWORD dwFlags; // Combination of FAX_VER_FLAG_*
} FAX_VERSION, *PFAX_VERSION;
typedef enum
{
FAX_VER_FLAG_CHECKED = 0x00000001, // File was built in debug mode
FAX_VER_FLAG_EVALUATION = 0x00000002 // Evaluation build
} FAX_VERSION_FLAGS;
WINFAXAPI
BOOL
WINAPI
FaxGetVersion (
IN HANDLE hFaxHandle,
OUT PFAX_VERSION pVersion
);
#define FAX_API_VERSION_0 0x00000000 // BOS/SBS 2000 Fax Server API (0.0)
#define FAX_API_VERSION_1 0x00010000 // Windows XP Fax Server API (1.0)
#define FAX_API_VERSION_2 0x00020000 // Windows Server 2003 Fax Server API (2.0)
//
// NOTICE: Change this value whenever a new API version is introduced.
//
#define CURRENT_FAX_API_VERSION FAX_API_VERSION_2
WINFAXAPI
BOOL
WINAPI
FaxGetReportedServerAPIVersion (
IN HANDLE hFaxHandle,
OUT LPDWORD lpdwReportedServerAPIVersion
);
//********************************************
//* Activity logging
//********************************************
typedef struct _FAX_ACTIVITY_LOGGING_CONFIGA
{
DWORD dwSizeOfStruct;
BOOL bLogIncoming;
BOOL bLogOutgoing;
LPSTR lptstrDBPath;
} FAX_ACTIVITY_LOGGING_CONFIGA, *PFAX_ACTIVITY_LOGGING_CONFIGA;
typedef struct _FAX_ACTIVITY_LOGGING_CONFIGW
{
DWORD dwSizeOfStruct;
BOOL bLogIncoming;
BOOL bLogOutgoing;
LPWSTR lptstrDBPath;
} FAX_ACTIVITY_LOGGING_CONFIGW, *PFAX_ACTIVITY_LOGGING_CONFIGW;
#ifdef UNICODE
typedef FAX_ACTIVITY_LOGGING_CONFIGW FAX_ACTIVITY_LOGGING_CONFIG;
typedef PFAX_ACTIVITY_LOGGING_CONFIGW PFAX_ACTIVITY_LOGGING_CONFIG;
#else
typedef FAX_ACTIVITY_LOGGING_CONFIGA FAX_ACTIVITY_LOGGING_CONFIG;
typedef PFAX_ACTIVITY_LOGGING_CONFIGA PFAX_ACTIVITY_LOGGING_CONFIG;
#endif // UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetActivityLoggingConfigurationA (
IN HANDLE hFaxHandle,
OUT PFAX_ACTIVITY_LOGGING_CONFIGA *ppActivLogCfg
);
WINFAXAPI
BOOL
WINAPI
FaxGetActivityLoggingConfigurationW (
IN HANDLE hFaxHandle,
OUT PFAX_ACTIVITY_LOGGING_CONFIGW *ppActivLogCfg
);
#ifdef UNICODE
#define FaxGetActivityLoggingConfiguration FaxGetActivityLoggingConfigurationW
#else
#define FaxGetActivityLoggingConfiguration FaxGetActivityLoggingConfigurationA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetActivityLoggingConfigurationA (
IN HANDLE hFaxHandle,
IN CONST PFAX_ACTIVITY_LOGGING_CONFIGA pActivLogCfg
);
WINFAXAPI
BOOL
WINAPI
FaxSetActivityLoggingConfigurationW (
IN HANDLE hFaxHandle,
IN CONST PFAX_ACTIVITY_LOGGING_CONFIGW pActivLogCfg
);
#ifdef UNICODE
#define FaxSetActivityLoggingConfiguration FaxSetActivityLoggingConfigurationW
#else
#define FaxSetActivityLoggingConfiguration FaxSetActivityLoggingConfigurationA
#endif // !UNICODE
//********************************************
//* Outbox configuration
//********************************************
typedef struct _FAX_OUTBOX_CONFIG
{
DWORD dwSizeOfStruct;
BOOL bAllowPersonalCP;
BOOL bUseDeviceTSID;
DWORD dwRetries;
DWORD dwRetryDelay;
FAX_TIME dtDiscountStart;
FAX_TIME dtDiscountEnd;
DWORD dwAgeLimit;
BOOL bBranding;
} FAX_OUTBOX_CONFIG, *PFAX_OUTBOX_CONFIG;
WINFAXAPI
BOOL
WINAPI
FaxGetOutboxConfiguration (
IN HANDLE hFaxHandle,
OUT PFAX_OUTBOX_CONFIG *ppOutboxCfg
);
WINFAXAPI
BOOL
WINAPI
FaxSetOutboxConfiguration (
IN HANDLE hFaxHandle,
IN CONST PFAX_OUTBOX_CONFIG pOutboxCfg
);
WINFAXAPI
BOOL
WINAPI
FaxGetPersonalCoverPagesOption (
IN HANDLE hFaxHandle,
OUT LPBOOL lpbPersonalCPAllowed
);
//********************************************
//* Archive configuration
//********************************************
typedef enum
{
FAX_MESSAGE_FOLDER_INBOX,
FAX_MESSAGE_FOLDER_SENTITEMS,
FAX_MESSAGE_FOLDER_QUEUE
} FAX_ENUM_MESSAGE_FOLDER;
typedef struct _FAX_ARCHIVE_CONFIGA
{
DWORD dwSizeOfStruct;
BOOL bUseArchive;
LPSTR lpcstrFolder;
BOOL bSizeQuotaWarning;
DWORD dwSizeQuotaHighWatermark;
DWORD dwSizeQuotaLowWatermark;
DWORD dwAgeLimit;
DWORDLONG dwlArchiveSize;
} FAX_ARCHIVE_CONFIGA, *PFAX_ARCHIVE_CONFIGA;
typedef struct _FAX_ARCHIVE_CONFIGW
{
DWORD dwSizeOfStruct;
BOOL bUseArchive;
LPWSTR lpcstrFolder;
BOOL bSizeQuotaWarning;
DWORD dwSizeQuotaHighWatermark;
DWORD dwSizeQuotaLowWatermark;
DWORD dwAgeLimit;
DWORDLONG dwlArchiveSize;
} FAX_ARCHIVE_CONFIGW, *PFAX_ARCHIVE_CONFIGW;
#ifdef UNICODE
typedef FAX_ARCHIVE_CONFIGW FAX_ARCHIVE_CONFIG;
typedef PFAX_ARCHIVE_CONFIGW PFAX_ARCHIVE_CONFIG;
#else
typedef FAX_ARCHIVE_CONFIGA FAX_ARCHIVE_CONFIG;
typedef PFAX_ARCHIVE_CONFIGA PFAX_ARCHIVE_CONFIG;
#endif // UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetArchiveConfigurationA (
IN HANDLE hFaxHandle,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
OUT PFAX_ARCHIVE_CONFIGA *ppArchiveCfg
);
WINFAXAPI
BOOL
WINAPI
FaxGetArchiveConfigurationW (
IN HANDLE hFaxHandle,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
OUT PFAX_ARCHIVE_CONFIGW *ppArchiveCfg
);
#ifdef UNICODE
#define FaxGetArchiveConfiguration FaxGetArchiveConfigurationW
#else
#define FaxGetArchiveConfiguration FaxGetArchiveConfigurationA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetArchiveConfigurationA (
IN HANDLE hFaxHandle,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
IN CONST PFAX_ARCHIVE_CONFIGA pArchiveCfg
);
WINFAXAPI
BOOL
WINAPI
FaxSetArchiveConfigurationW (
IN HANDLE hFaxHandle,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
IN CONST PFAX_ARCHIVE_CONFIGW pArchiveCfg
);
#ifdef UNICODE
#define FaxSetArchiveConfiguration FaxSetArchiveConfigurationW
#else
#define FaxSetArchiveConfiguration FaxSetArchiveConfigurationA
#endif // !UNICODE
//********************************************
//* Server activity
//********************************************
typedef struct _FAX_SERVER_ACTIVITY
{
DWORD dwSizeOfStruct;
DWORD dwIncomingMessages;
DWORD dwRoutingMessages;
DWORD dwOutgoingMessages;
DWORD dwDelegatedOutgoingMessages;
DWORD dwQueuedMessages;
DWORD dwErrorEvents;
DWORD dwWarningEvents;
DWORD dwInformationEvents;
} FAX_SERVER_ACTIVITY, *PFAX_SERVER_ACTIVITY;
WINFAXAPI
BOOL
WINAPI
FaxGetServerActivity (
IN HANDLE hFaxHandle,
OUT PFAX_SERVER_ACTIVITY pServerActivity
);
//********************************************
//* Queue jobs
//********************************************
typedef enum
{
FAX_PRIORITY_TYPE_LOW,
FAX_PRIORITY_TYPE_NORMAL,
FAX_PRIORITY_TYPE_HIGH
} FAX_ENUM_PRIORITY_TYPE;
#define FAX_PRIORITY_TYPE_DEFAULT FAX_PRIORITY_TYPE_LOW
typedef enum
{
FAX_JOB_FIELD_JOB_ID = 0x00000001,
FAX_JOB_FIELD_TYPE = 0x00000002,
FAX_JOB_FIELD_QUEUE_STATUS = 0x00000004,
FAX_JOB_FIELD_STATUS_EX = 0x00000008,
FAX_JOB_FIELD_SIZE = 0x00000010,
FAX_JOB_FIELD_PAGE_COUNT = 0x00000020,
FAX_JOB_FIELD_CURRENT_PAGE = 0x00000040,
FAX_JOB_FIELD_RECIPIENT_PROFILE = 0x00000080,
FAX_JOB_FIELD_SCHEDULE_TIME = 0x00000100,
FAX_JOB_FIELD_ORIGINAL_SCHEDULE_TIME = 0x00000200,
FAX_JOB_FIELD_SUBMISSION_TIME = 0x00000400,
FAX_JOB_FIELD_TRANSMISSION_START_TIME = 0x00000800,
FAX_JOB_FIELD_TRANSMISSION_END_TIME = 0x00001000,
FAX_JOB_FIELD_PRIORITY = 0x00002000,
FAX_JOB_FIELD_RETRIES = 0x00004000,
FAX_JOB_FIELD_DELIVERY_REPORT_TYPE = 0x00008000,
FAX_JOB_FIELD_SENDER_PROFILE = 0x00010000,
FAX_JOB_FIELD_STATUS_SUB_STRUCT = 0x00020000,
FAX_JOB_FIELD_DEVICE_ID = 0x00040000,
FAX_JOB_FIELD_MESSAGE_ID = 0x00080000,
FAX_JOB_FIELD_BROADCAST_ID = 0x00010000
} FAX_ENUM_JOB_FIELDS;
typedef struct _FAX_JOB_STATUSA
{
DWORD dwSizeOfStruct;
DWORD dwValidityMask;
DWORD dwJobID;
DWORD dwJobType;
DWORD dwQueueStatus;
DWORD dwExtendedStatus;
LPCSTR lpctstrExtendedStatus;
DWORD dwSize;
DWORD dwPageCount;
DWORD dwCurrentPage;
LPCSTR lpctstrTsid;
LPCSTR lpctstrCsid;
SYSTEMTIME tmScheduleTime;
SYSTEMTIME tmTransmissionStartTime;
SYSTEMTIME tmTransmissionEndTime;
DWORD dwDeviceID;
LPCSTR lpctstrDeviceName;
DWORD dwRetries;
LPCSTR lpctstrCallerID;
LPCSTR lpctstrRoutingInfo;
DWORD dwAvailableJobOperations;
} FAX_JOB_STATUSA, *PFAX_JOB_STATUSA;
typedef struct _FAX_JOB_STATUSW
{
DWORD dwSizeOfStruct;
DWORD dwValidityMask;
DWORD dwJobID;
DWORD dwJobType;
DWORD dwQueueStatus;
DWORD dwExtendedStatus;
LPCWSTR lpctstrExtendedStatus;
DWORD dwSize;
DWORD dwPageCount;
DWORD dwCurrentPage;
LPCWSTR lpctstrTsid;
LPCWSTR lpctstrCsid;
SYSTEMTIME tmScheduleTime;
SYSTEMTIME tmTransmissionStartTime;
SYSTEMTIME tmTransmissionEndTime;
DWORD dwDeviceID;
LPCWSTR lpctstrDeviceName;
DWORD dwRetries;
LPCWSTR lpctstrCallerID;
LPCWSTR lpctstrRoutingInfo;
DWORD dwAvailableJobOperations;
} FAX_JOB_STATUSW, *PFAX_JOB_STATUSW;
#ifdef UNICODE
typedef FAX_JOB_STATUSW FAX_JOB_STATUS;
typedef PFAX_JOB_STATUSW PFAX_JOB_STATUS;
#else
typedef FAX_JOB_STATUSA FAX_JOB_STATUS;
typedef PFAX_JOB_STATUSA PFAX_JOB_STATUS;
#endif // UNICODE
typedef struct _FAX_JOB_ENTRY_EXA
{
DWORD dwSizeOfStruct;
DWORD dwValidityMask;
DWORDLONG dwlMessageId;
DWORDLONG dwlBroadcastId;
LPCSTR lpctstrRecipientNumber;
LPCSTR lpctstrRecipientName;
LPCSTR lpctstrSenderUserName;
LPCSTR lpctstrBillingCode;
SYSTEMTIME tmOriginalScheduleTime;
SYSTEMTIME tmSubmissionTime;
FAX_ENUM_PRIORITY_TYPE Priority;
DWORD dwDeliveryReportType;
LPCSTR lpctstrDocumentName;
LPCSTR lpctstrSubject;
PFAX_JOB_STATUSA pStatus;
} FAX_JOB_ENTRY_EXA, *PFAX_JOB_ENTRY_EXA;
typedef struct _FAX_JOB_ENTRY_EXW
{
DWORD dwSizeOfStruct;
DWORD dwValidityMask;
DWORDLONG dwlMessageId;
DWORDLONG dwlBroadcastId;
LPCWSTR lpctstrRecipientNumber;
LPCWSTR lpctstrRecipientName;
LPCWSTR lpctstrSenderUserName;
LPCWSTR lpctstrBillingCode;
SYSTEMTIME tmOriginalScheduleTime;
SYSTEMTIME tmSubmissionTime;
FAX_ENUM_PRIORITY_TYPE Priority;
DWORD dwDeliveryReportType;
LPCWSTR lpctstrDocumentName;
LPCWSTR lpctstrSubject;
PFAX_JOB_STATUSW pStatus;
} FAX_JOB_ENTRY_EXW, *PFAX_JOB_ENTRY_EXW;
#ifdef UNICODE
typedef FAX_JOB_ENTRY_EXW FAX_JOB_ENTRY_EX;
typedef PFAX_JOB_ENTRY_EXW PFAX_JOB_ENTRY_EX;
#else
typedef FAX_JOB_ENTRY_EXA FAX_JOB_ENTRY_EX;
typedef PFAX_JOB_ENTRY_EXA PFAX_JOB_ENTRY_EX;
#endif // UNICODE
typedef struct _FAX_JOB_PARAM_EXA
{
DWORD dwSizeOfStruct;
DWORD dwScheduleAction;
SYSTEMTIME tmSchedule;
DWORD dwReceiptDeliveryType;
LPSTR lptstrReceiptDeliveryAddress;
FAX_ENUM_PRIORITY_TYPE Priority;
HCALL hCall;
DWORD_PTR dwReserved[4];
LPSTR lptstrDocumentName;
DWORD dwPageCount;
} FAX_JOB_PARAM_EXA, *PFAX_JOB_PARAM_EXA;
typedef struct _FAX_JOB_PARAM_EXW
{
DWORD dwSizeOfStruct;
DWORD dwScheduleAction;
SYSTEMTIME tmSchedule;
DWORD dwReceiptDeliveryType;
LPWSTR lptstrReceiptDeliveryAddress;
FAX_ENUM_PRIORITY_TYPE Priority;
HCALL hCall;
DWORD_PTR dwReserved[4];
LPWSTR lptstrDocumentName;
DWORD dwPageCount;
} FAX_JOB_PARAM_EXW, *PFAX_JOB_PARAM_EXW;
#ifdef UNICODE
typedef FAX_JOB_PARAM_EXW FAX_JOB_PARAM_EX;
typedef PFAX_JOB_PARAM_EXW PFAX_JOB_PARAM_EX;
#else
typedef FAX_JOB_PARAM_EXA FAX_JOB_PARAM_EX;
typedef PFAX_JOB_PARAM_EXA PFAX_JOB_PARAM_EX;
#endif // UNICODE
WINFAXAPI
BOOL
WINAPI FaxEnumJobsExA (
IN HANDLE hFaxHandle,
IN DWORD dwJobTypes,
OUT PFAX_JOB_ENTRY_EXA *ppJobEntries,
OUT LPDWORD lpdwJobs
);
WINFAXAPI
BOOL
WINAPI FaxEnumJobsExW (
IN HANDLE hFaxHandle,
IN DWORD dwJobTypes,
OUT PFAX_JOB_ENTRY_EXW *ppJobEntries,
OUT LPDWORD lpdwJobs
);
#ifdef UNICODE
#define FaxEnumJobsEx FaxEnumJobsExW
#else
#define FaxEnumJobsEx FaxEnumJobsExA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetJobExA (
IN HANDLE hFaxHandle,
IN DWORDLONG dwlMessageID,
OUT PFAX_JOB_ENTRY_EXA *ppJobEntry
);
WINFAXAPI
BOOL
WINAPI
FaxGetJobExW (
IN HANDLE hFaxHandle,
IN DWORDLONG dwlMessageID,
OUT PFAX_JOB_ENTRY_EXW *ppJobEntry
);
#ifdef UNICODE
#define FaxGetJobEx FaxGetJobExW
#else
#define FaxGetJobEx FaxGetJobExA
#endif // !UNICODE
typedef const FAX_JOB_PARAM_EXW * LPCFAX_JOB_PARAM_EXW;
typedef const FAX_JOB_PARAM_EXA * LPCFAX_JOB_PARAM_EXA;
#ifdef UNICODE
typedef LPCFAX_JOB_PARAM_EXW LPCFAX_JOB_PARAM_EX;
#else
typedef LPCFAX_JOB_PARAM_EXA LPCFAX_JOB_PARAM_EX;
#endif
typedef enum
{
FAX_COVERPAGE_FMT_COV = 1,
FAX_COVERPAGE_FMT_COV_SUBJECT_ONLY
} FAX_ENUM_COVERPAGE_FORMATS;
typedef struct _FAX_COVERPAGE_INFO_EXA
{
DWORD dwSizeOfStruct;
DWORD dwCoverPageFormat;
LPSTR lptstrCoverPageFileName;
BOOL bServerBased;
LPSTR lptstrNote;
LPSTR lptstrSubject;
} FAX_COVERPAGE_INFO_EXA, *PFAX_COVERPAGE_INFO_EXA;
typedef struct _FAX_COVERPAGE_INFO_EXW
{
DWORD dwSizeOfStruct;
DWORD dwCoverPageFormat;
LPWSTR lptstrCoverPageFileName;
BOOL bServerBased;
LPWSTR lptstrNote;
LPWSTR lptstrSubject;
} FAX_COVERPAGE_INFO_EXW, *PFAX_COVERPAGE_INFO_EXW;
#ifdef UNICODE
typedef FAX_COVERPAGE_INFO_EXW FAX_COVERPAGE_INFO_EX;
typedef PFAX_COVERPAGE_INFO_EXW PFAX_COVERPAGE_INFO_EX;
#else
typedef FAX_COVERPAGE_INFO_EXA FAX_COVERPAGE_INFO_EX;
typedef PFAX_COVERPAGE_INFO_EXA PFAX_COVERPAGE_INFO_EX;
#endif // UNICODE
typedef const FAX_COVERPAGE_INFO_EXW * LPCFAX_COVERPAGE_INFO_EXW;
typedef const FAX_COVERPAGE_INFO_EXA * LPCFAX_COVERPAGE_INFO_EXA;
#ifdef UNICODE
typedef LPCFAX_COVERPAGE_INFO_EXW LPCFAX_COVERPAGE_INFO_EX;
#else
typedef LPCFAX_COVERPAGE_INFO_EXA LPCFAX_COVERPAGE_INFO_EX;
#endif
typedef struct _FAX_PERSONAL_PROFILEA
{
DWORD dwSizeOfStruct; // Size of this structure
LPSTR lptstrName; // Name of person
LPSTR lptstrFaxNumber; // Fax number
LPSTR lptstrCompany; // Company name
LPSTR lptstrStreetAddress; // Street address
LPSTR lptstrCity; // City
LPSTR lptstrState; // State
LPSTR lptstrZip; // Zip code
LPSTR lptstrCountry; // Country
LPSTR lptstrTitle; // Title
LPSTR lptstrDepartment; // Department
LPSTR lptstrOfficeLocation; // Office location
LPSTR lptstrHomePhone; // Phone number at home
LPSTR lptstrOfficePhone; // Phone number at office
LPSTR lptstrEmail; // Personal e-mail address
LPSTR lptstrBillingCode; // Billing code
LPSTR lptstrTSID; // Tsid
} FAX_PERSONAL_PROFILEA, *PFAX_PERSONAL_PROFILEA;
typedef struct _FAX_PERSONAL_PROFILEW
{
DWORD dwSizeOfStruct; // Size of this structure
LPWSTR lptstrName; // Name of person
LPWSTR lptstrFaxNumber; // Fax number
LPWSTR lptstrCompany; // Company name
LPWSTR lptstrStreetAddress; // Street address
LPWSTR lptstrCity; // City
LPWSTR lptstrState; // State
LPWSTR lptstrZip; // Zip code
LPWSTR lptstrCountry; // Country
LPWSTR lptstrTitle; // Title
LPWSTR lptstrDepartment; // Department
LPWSTR lptstrOfficeLocation; // Office location
LPWSTR lptstrHomePhone; // Phone number at home
LPWSTR lptstrOfficePhone; // Phone number at office
LPWSTR lptstrEmail; // Personal e-mail address
LPWSTR lptstrBillingCode; // Billing code
LPWSTR lptstrTSID; // Tsid
} FAX_PERSONAL_PROFILEW, *PFAX_PERSONAL_PROFILEW;
#ifdef UNICODE
typedef FAX_PERSONAL_PROFILEW FAX_PERSONAL_PROFILE;
typedef PFAX_PERSONAL_PROFILEW PFAX_PERSONAL_PROFILE;
#else
typedef FAX_PERSONAL_PROFILEA FAX_PERSONAL_PROFILE;
typedef PFAX_PERSONAL_PROFILEA PFAX_PERSONAL_PROFILE;
#endif // UNICODE
typedef const FAX_PERSONAL_PROFILEW * LPCFAX_PERSONAL_PROFILEW;
typedef const FAX_PERSONAL_PROFILEA * LPCFAX_PERSONAL_PROFILEA;
#ifdef UNICODE
typedef LPCFAX_PERSONAL_PROFILEW LPCFAX_PERSONAL_PROFILE;
#else
typedef LPCFAX_PERSONAL_PROFILEA LPCFAX_PERSONAL_PROFILE;
#endif
BOOL WINAPI FaxSendDocumentExA
(
IN HANDLE hFaxHandle,
IN LPCSTR lpctstrFileName,
IN LPCFAX_COVERPAGE_INFO_EXA lpcCoverPageInfo,
IN LPCFAX_PERSONAL_PROFILEA lpcSenderProfile,
IN DWORD dwNumRecipients,
IN LPCFAX_PERSONAL_PROFILEA lpcRecipientList,
IN LPCFAX_JOB_PARAM_EXA lpJobParams,
OUT PDWORDLONG lpdwlMessageId,
OUT PDWORDLONG lpdwlRecipientMessageIds
);
BOOL WINAPI FaxSendDocumentExW
(
IN HANDLE hFaxHandle,
IN LPCWSTR lpctstrFileName,
IN LPCFAX_COVERPAGE_INFO_EXW lpcCoverPageInfo,
IN LPCFAX_PERSONAL_PROFILEW lpcSenderProfile,
IN DWORD dwNumRecipients,
IN LPCFAX_PERSONAL_PROFILEW lpcRecipientList,
IN LPCFAX_JOB_PARAM_EXW lpJobParams,
OUT PDWORDLONG lpdwlMessageId,
OUT PDWORDLONG lpdwlRecipientMessageIds
);
#ifdef UNICODE
#define FaxSendDocumentEx FaxSendDocumentExW
#else
#define FaxSendDocumentEx FaxSendDocumentExA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXSENDDOCUMENTEXA)(
IN HANDLE hFaxHandle,
IN LPCSTR lpctstrFileName,
IN LPCFAX_COVERPAGE_INFO_EXA lpcCoverPageInfo,
IN LPCFAX_PERSONAL_PROFILEA lpcSenderProfile,
IN DWORD dwNumRecipients,
IN LPCFAX_PERSONAL_PROFILEA lpcRecipientList,
IN LPCFAX_JOB_PARAM_EXA lpcJobParams,
OUT PDWORDLONG lpdwlMessageId,
OUT PDWORDLONG lpdwlRecipientMessageIds
);
typedef BOOL
(WINAPI *PFAXSENDDOCUMENTEXW)(
IN HANDLE hFaxHandle,
IN LPCWSTR lpctstrFileName,
IN LPCFAX_COVERPAGE_INFO_EXW lpcCoverPageInfo,
IN LPCFAX_PERSONAL_PROFILEW lpcSenderProfile,
IN DWORD dwNumRecipients,
IN LPCFAX_PERSONAL_PROFILEW lpcRecipientList,
IN LPCFAX_JOB_PARAM_EXW lpcJobParams,
OUT PDWORDLONG lpdwlMessageId,
OUT PDWORDLONG lpdwlRecipientMessageIds
);
#ifdef UNICODE
#define PFAXSENDDOCUMENTEX PFAXSENDDOCUMENTEXW
#else
#define PFAXSENDDOCUMENTEX PFAXSENDDOCUMENTEXA
#endif // !UNICODE
//********************************************
//* Archive jobs
//********************************************
typedef struct _FAX_MESSAGEA
{
DWORD dwSizeOfStruct;
DWORD dwValidityMask;
DWORDLONG dwlMessageId;
DWORDLONG dwlBroadcastId;
DWORD dwJobType;
DWORD dwQueueStatus;
DWORD dwExtendedStatus;
LPCSTR lpctstrExtendedStatus;
DWORD dwSize;
DWORD dwPageCount;
LPCSTR lpctstrRecipientNumber;
LPCSTR lpctstrRecipientName;
LPCSTR lpctstrSenderNumber;
LPCSTR lpctstrSenderName;
LPCSTR lpctstrTsid;
LPCSTR lpctstrCsid;
LPCSTR lpctstrSenderUserName;
LPCSTR lpctstrBillingCode;
SYSTEMTIME tmOriginalScheduleTime;
SYSTEMTIME tmSubmissionTime;
SYSTEMTIME tmTransmissionStartTime;
SYSTEMTIME tmTransmissionEndTime;
LPCSTR lpctstrDeviceName;
FAX_ENUM_PRIORITY_TYPE Priority;
DWORD dwRetries;
LPCSTR lpctstrDocumentName;
LPCSTR lpctstrSubject;
LPCSTR lpctstrCallerID;
LPCSTR lpctstrRoutingInfo;
} FAX_MESSAGEA, *PFAX_MESSAGEA;
typedef struct _FAX_MESSAGEW
{
DWORD dwSizeOfStruct;
DWORD dwValidityMask;
DWORDLONG dwlMessageId;
DWORDLONG dwlBroadcastId;
DWORD dwJobType;
DWORD dwQueueStatus;
DWORD dwExtendedStatus;
LPCWSTR lpctstrExtendedStatus;
DWORD dwSize;
DWORD dwPageCount;
LPCWSTR lpctstrRecipientNumber;
LPCWSTR lpctstrRecipientName;
LPCWSTR lpctstrSenderNumber;
LPCWSTR lpctstrSenderName;
LPCWSTR lpctstrTsid;
LPCWSTR lpctstrCsid;
LPCWSTR lpctstrSenderUserName;
LPCWSTR lpctstrBillingCode;
SYSTEMTIME tmOriginalScheduleTime;
SYSTEMTIME tmSubmissionTime;
SYSTEMTIME tmTransmissionStartTime;
SYSTEMTIME tmTransmissionEndTime;
LPCWSTR lpctstrDeviceName;
FAX_ENUM_PRIORITY_TYPE Priority;
DWORD dwRetries;
LPCWSTR lpctstrDocumentName;
LPCWSTR lpctstrSubject;
LPCWSTR lpctstrCallerID;
LPCWSTR lpctstrRoutingInfo;
} FAX_MESSAGEW, *PFAX_MESSAGEW;
#ifdef UNICODE
typedef FAX_MESSAGEW FAX_MESSAGE;
typedef PFAX_MESSAGEW PFAX_MESSAGE;
#else
typedef FAX_MESSAGEA FAX_MESSAGE;
typedef PFAX_MESSAGEA PFAX_MESSAGE;
#endif // UNICODE
WINFAXAPI
BOOL
WINAPI
FaxStartMessagesEnum (
IN HANDLE hFaxHandle,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
OUT PHANDLE phEnum
);
WINFAXAPI
BOOL
WINAPI
FaxEndMessagesEnum (
IN HANDLE hEnum
);
WINFAXAPI
BOOL
WINAPI
FaxEnumMessagesA (
IN HANDLE hEnum,
IN DWORD dwNumMessages,
OUT PFAX_MESSAGEA *ppMsgs,
OUT LPDWORD lpdwReturnedMsgs
);
WINFAXAPI
BOOL
WINAPI
FaxEnumMessagesW (
IN HANDLE hEnum,
IN DWORD dwNumMessages,
OUT PFAX_MESSAGEW *ppMsgs,
OUT LPDWORD lpdwReturnedMsgs
);
#ifdef UNICODE
#define FaxEnumMessages FaxEnumMessagesW
#else
#define FaxEnumMessages FaxEnumMessagesA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetMessageA (
IN HANDLE hFaxHandle,
IN DWORDLONG dwlMessageId,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
OUT PFAX_MESSAGEA *ppMsg
);
WINFAXAPI
BOOL
WINAPI
FaxGetMessageW (
IN HANDLE hFaxHandle,
IN DWORDLONG dwlMessageId,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
OUT PFAX_MESSAGEW *ppMsg
);
#ifdef UNICODE
#define FaxGetMessage FaxGetMessageW
#else
#define FaxGetMessage FaxGetMessageA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxRemoveMessage (
IN HANDLE hFaxHandle,
IN DWORDLONG dwlMessageId,
IN FAX_ENUM_MESSAGE_FOLDER Folder
);
WINFAXAPI
BOOL
WINAPI
FaxGetMessageTiffA (
IN HANDLE hFaxHandle,
IN DWORDLONG dwlMessageId,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
IN LPCSTR lpctstrFilePath
);
WINFAXAPI
BOOL
WINAPI
FaxGetMessageTiffW (
IN HANDLE hFaxHandle,
IN DWORDLONG dwlMessageId,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
IN LPCWSTR lpctstrFilePath
);
#ifdef UNICODE
#define FaxGetMessageTiff FaxGetMessageTiffW
#else
#define FaxGetMessageTiff FaxGetMessageTiffA
#endif // !UNICODE
//************************************
//* Non-RPC extended interfaces
//************************************
HRESULT WINAPI
FaxFreeSenderInformation(
PFAX_PERSONAL_PROFILE pfppSender
);
HRESULT WINAPI
FaxSetSenderInformation(
PFAX_PERSONAL_PROFILE pfppSender
);
HRESULT WINAPI
FaxGetSenderInformation(
PFAX_PERSONAL_PROFILE pfppSender
);
//********************************************
//* Security
//********************************************
//
// Specific access rights
//
typedef enum
{
FAX_ACCESS_SUBMIT = 0x0001,
FAX_ACCESS_SUBMIT_NORMAL = 0x0002,
FAX_ACCESS_SUBMIT_HIGH = 0x0004,
FAX_ACCESS_QUERY_JOBS = 0x0008,
FAX_ACCESS_MANAGE_JOBS = 0x0010,
FAX_ACCESS_QUERY_CONFIG = 0x0020,
FAX_ACCESS_MANAGE_CONFIG = 0x0040,
FAX_ACCESS_QUERY_IN_ARCHIVE = 0x0080,
FAX_ACCESS_MANAGE_IN_ARCHIVE = 0x0100,
FAX_ACCESS_QUERY_OUT_ARCHIVE = 0x0200,
FAX_ACCESS_MANAGE_OUT_ARCHIVE = 0x0400
} FAX_SPECIFIC_ACCESS_RIGHTS;
#define FAX_GENERIC_READ (FAX_ACCESS_QUERY_JOBS | FAX_ACCESS_QUERY_CONFIG | FAX_ACCESS_QUERY_IN_ARCHIVE | FAX_ACCESS_QUERY_OUT_ARCHIVE)
#define FAX_GENERIC_WRITE (FAX_ACCESS_MANAGE_JOBS | FAX_ACCESS_MANAGE_CONFIG | FAX_ACCESS_MANAGE_IN_ARCHIVE | FAX_ACCESS_MANAGE_OUT_ARCHIVE)
#define FAX_GENERIC_EXECUTE (FAX_ACCESS_SUBMIT)
#define FAX_GENERIC_ALL (FAX_ACCESS_SUBMIT | \
FAX_ACCESS_SUBMIT_NORMAL | \
FAX_ACCESS_SUBMIT_HIGH | \
FAX_ACCESS_QUERY_JOBS | \
FAX_ACCESS_MANAGE_JOBS | \
FAX_ACCESS_QUERY_CONFIG | \
FAX_ACCESS_MANAGE_CONFIG | \
FAX_ACCESS_QUERY_IN_ARCHIVE | \
FAX_ACCESS_MANAGE_IN_ARCHIVE | \
FAX_ACCESS_QUERY_OUT_ARCHIVE | \
FAX_ACCESS_MANAGE_OUT_ARCHIVE)
//
// Functions
//
//********************************************
//* Security
//********************************************
WINFAXAPI
BOOL
WINAPI
FaxGetSecurity (
IN HANDLE hFaxHandle,
OUT PSECURITY_DESCRIPTOR *ppSecDesc
);
WINFAXAPI
BOOL
WINAPI
FaxGetSecurityEx (
IN HANDLE hFaxHandle,
IN SECURITY_INFORMATION SecurityInformation,
OUT PSECURITY_DESCRIPTOR *ppSecDesc
);
WINFAXAPI
BOOL
WINAPI
FaxSetSecurity (
IN HANDLE hFaxHandle,
IN SECURITY_INFORMATION SecurityInformation,
IN CONST PSECURITY_DESCRIPTOR pSecDesc
);
WINFAXAPI
BOOL
WINAPI
FaxAccessCheckEx (
IN HANDLE FaxHandle,
IN DWORD AccessMask,
OUT LPDWORD lpdwRights
);
//********************************************
//* Extension data
//********************************************
WINFAXAPI
BOOL
WINAPI
FaxGetExtensionDataA (
IN HANDLE hFaxHandle,
IN DWORD dwDeviceID,
IN LPCSTR lpctstrNameGUID,
OUT PVOID *ppData,
OUT LPDWORD lpdwDataSize
);
WINFAXAPI
BOOL
WINAPI
FaxGetExtensionDataW (
IN HANDLE hFaxHandle,
IN DWORD dwDeviceID,
IN LPCWSTR lpctstrNameGUID,
OUT PVOID *ppData,
OUT LPDWORD lpdwDataSize
);
#ifdef UNICODE
#define FaxGetExtensionData FaxGetExtensionDataW
#else
#define FaxGetExtensionData FaxGetExtensionDataA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetExtensionDataA (
IN HANDLE hFaxHandle,
IN DWORD dwDeviceID,
IN LPCSTR lpctstrNameGUID,
IN CONST PVOID pData,
IN CONST DWORD dwDataSize
);
WINFAXAPI
BOOL
WINAPI
FaxSetExtensionDataW (
IN HANDLE hFaxHandle,
IN DWORD dwDeviceID,
IN LPCWSTR lpctstrNameGUID,
IN CONST PVOID pData,
IN CONST DWORD dwDataSize
);
#ifdef UNICODE
#define FaxSetExtensionData FaxSetExtensionDataW
#else
#define FaxSetExtensionData FaxSetExtensionDataA
#endif // !UNICODE
//********************************************
//* FSP
//********************************************
typedef enum
{
FAX_PROVIDER_STATUS_SUCCESS, // Provider was successfully loaded
FAX_PROVIDER_STATUS_SERVER_ERROR,// An error occured on the server while loading provider.
FAX_PROVIDER_STATUS_BAD_GUID, // Provider's GUID is invalid
FAX_PROVIDER_STATUS_BAD_VERSION, // Provider's API version is invalid
FAX_PROVIDER_STATUS_CANT_LOAD, // Can't load provider's DLL
FAX_PROVIDER_STATUS_CANT_LINK, // Can't find required exported function(s) in provider's DLL
FAX_PROVIDER_STATUS_CANT_INIT // Failed while initializing provider
} FAX_ENUM_PROVIDER_STATUS;
typedef struct _FAX_DEVICE_PROVIDER_INFOA
{
DWORD dwSizeOfStruct;
LPCSTR lpctstrFriendlyName;
LPCSTR lpctstrImageName;
LPCSTR lpctstrProviderName;
LPCSTR lpctstrGUID;
DWORD dwCapabilities;
FAX_VERSION Version;
FAX_ENUM_PROVIDER_STATUS Status;
DWORD dwLastError;
} FAX_DEVICE_PROVIDER_INFOA, *PFAX_DEVICE_PROVIDER_INFOA;
typedef struct _FAX_DEVICE_PROVIDER_INFOW
{
DWORD dwSizeOfStruct;
LPCWSTR lpctstrFriendlyName;
LPCWSTR lpctstrImageName;
LPCWSTR lpctstrProviderName;
LPCWSTR lpctstrGUID;
DWORD dwCapabilities;
FAX_VERSION Version;
FAX_ENUM_PROVIDER_STATUS Status;
DWORD dwLastError;
} FAX_DEVICE_PROVIDER_INFOW, *PFAX_DEVICE_PROVIDER_INFOW;
#ifdef UNICODE
typedef FAX_DEVICE_PROVIDER_INFOW FAX_DEVICE_PROVIDER_INFO;
typedef PFAX_DEVICE_PROVIDER_INFOW PFAX_DEVICE_PROVIDER_INFO;
#else
typedef FAX_DEVICE_PROVIDER_INFOA FAX_DEVICE_PROVIDER_INFO;
typedef PFAX_DEVICE_PROVIDER_INFOA PFAX_DEVICE_PROVIDER_INFO;
#endif // UNICODE
WINFAXAPI
BOOL
WINAPI
FaxEnumerateProvidersA (
IN HANDLE hFaxHandle,
OUT PFAX_DEVICE_PROVIDER_INFOA *ppProviders,
OUT LPDWORD lpdwNumProviders
);
WINFAXAPI
BOOL
WINAPI
FaxEnumerateProvidersW (
IN HANDLE hFaxHandle,
OUT PFAX_DEVICE_PROVIDER_INFOW *ppProviders,
OUT LPDWORD lpdwNumProviders
);
#ifdef UNICODE
#define FaxEnumerateProviders FaxEnumerateProvidersW
#else
#define FaxEnumerateProviders FaxEnumerateProvidersA
#endif // !UNICODE
//********************************************
//* Routing extensions
//********************************************
typedef struct _FAX_ROUTING_EXTENSION_INFOA
{
DWORD dwSizeOfStruct;
LPCSTR lpctstrFriendlyName;
LPCSTR lpctstrImageName;
LPCSTR lpctstrExtensionName;
FAX_VERSION Version;
FAX_ENUM_PROVIDER_STATUS Status;
DWORD dwLastError;
} FAX_ROUTING_EXTENSION_INFOA, *PFAX_ROUTING_EXTENSION_INFOA;
typedef struct _FAX_ROUTING_EXTENSION_INFOW
{
DWORD dwSizeOfStruct;
LPCWSTR lpctstrFriendlyName;
LPCWSTR lpctstrImageName;
LPCWSTR lpctstrExtensionName;
FAX_VERSION Version;
FAX_ENUM_PROVIDER_STATUS Status;
DWORD dwLastError;
} FAX_ROUTING_EXTENSION_INFOW, *PFAX_ROUTING_EXTENSION_INFOW;
#ifdef UNICODE
typedef FAX_ROUTING_EXTENSION_INFOW FAX_ROUTING_EXTENSION_INFO;
typedef PFAX_ROUTING_EXTENSION_INFOW PFAX_ROUTING_EXTENSION_INFO;
#else
typedef FAX_ROUTING_EXTENSION_INFOA FAX_ROUTING_EXTENSION_INFO;
typedef PFAX_ROUTING_EXTENSION_INFOA PFAX_ROUTING_EXTENSION_INFO;
#endif // UNICODE
WINFAXAPI
BOOL
WINAPI
FaxEnumRoutingExtensionsA (
IN HANDLE hFaxHandle,
OUT PFAX_ROUTING_EXTENSION_INFOA *ppRoutingExtensions,
OUT LPDWORD lpdwNumExtensions
);
WINFAXAPI
BOOL
WINAPI
FaxEnumRoutingExtensionsW (
IN HANDLE hFaxHandle,
OUT PFAX_ROUTING_EXTENSION_INFOW *ppRoutingExtensions,
OUT LPDWORD lpdwNumExtensions
);
#ifdef UNICODE
#define FaxEnumRoutingExtensions FaxEnumRoutingExtensionsW
#else
#define FaxEnumRoutingExtensions FaxEnumRoutingExtensionsA
#endif // !UNICODE
//********************************************
//* Ports
//********************************************
typedef enum
{
FAX_DEVICE_STATUS_POWERED_OFF = 0x0001,
FAX_DEVICE_STATUS_SENDING = 0x0002,
FAX_DEVICE_STATUS_RECEIVING = 0x0004,
FAX_DEVICE_STATUS_RINGING = 0x0008
} FAX_ENUM_DEVICE_STATUS;
typedef enum
{
FAX_DEVICE_RECEIVE_MODE_OFF = 0, // Do not answer to incoming calls
FAX_DEVICE_RECEIVE_MODE_AUTO = 1, // Automatically answer to incoming calls after dwRings rings
FAX_DEVICE_RECEIVE_MODE_MANUAL = 2 // Manually answer to incoming calls - only FaxAnswerCall answers the call
} FAX_ENUM_DEVICE_RECEIVE_MODE;
typedef struct _FAX_PORT_INFO_EXA
{
DWORD dwSizeOfStruct; // For versioning
DWORD dwDeviceID; // Fax id
LPCSTR lpctstrDeviceName; // Name of the device
LPSTR lptstrDescription; // Descriptive string
LPCSTR lpctstrProviderName; // FSP's name
LPCSTR lpctstrProviderGUID; // FSP's GUID
BOOL bSend; // Is the device send-enabled?
FAX_ENUM_DEVICE_RECEIVE_MODE ReceiveMode; // The device receive mode. See FAX_ENUM_DEVICE_RECEIVE_MODE for details.
DWORD dwStatus; // Device status - a combination of values from FAX_ENUM_DEVICE_STATUS
DWORD dwRings; // Number of rings before answering an incoming call
LPSTR lptstrCsid; // Called Station Id
LPSTR lptstrTsid; // Transmitting Station Id
} FAX_PORT_INFO_EXA, *PFAX_PORT_INFO_EXA;
typedef struct _FAX_PORT_INFO_EXW
{
DWORD dwSizeOfStruct; // For versioning
DWORD dwDeviceID; // Fax id
LPCWSTR lpctstrDeviceName; // Name of the device
LPWSTR lptstrDescription; // Descriptive string
LPCWSTR lpctstrProviderName; // FSP's name
LPCWSTR lpctstrProviderGUID; // FSP's GUID
BOOL bSend; // Is the device send-enabled?
FAX_ENUM_DEVICE_RECEIVE_MODE ReceiveMode; // The device receive mode. See FAX_ENUM_DEVICE_RECEIVE_MODE for details.
DWORD dwStatus; // Device status - a combination of values from FAX_ENUM_DEVICE_STATUS
DWORD dwRings; // Number of rings before answering an incoming call
LPWSTR lptstrCsid; // Called Station Id
LPWSTR lptstrTsid; // Transmitting Station Id
} FAX_PORT_INFO_EXW, *PFAX_PORT_INFO_EXW;
#ifdef UNICODE
typedef FAX_PORT_INFO_EXW FAX_PORT_INFO_EX;
typedef PFAX_PORT_INFO_EXW PFAX_PORT_INFO_EX;
#else
typedef FAX_PORT_INFO_EXA FAX_PORT_INFO_EX;
typedef PFAX_PORT_INFO_EXA PFAX_PORT_INFO_EX;
#endif // UNICODE
WINFAXAPI
DWORD
WINAPI
IsDeviceVirtual (
IN HANDLE hFaxHandle,
IN DWORD dwDeviceId,
OUT LPBOOL lpbVirtual
);
WINFAXAPI
BOOL
WINAPI
FaxGetPortExA (
IN HANDLE hFaxHandle,
IN DWORD dwDeviceId,
OUT PFAX_PORT_INFO_EXA *ppPortInfo
);
WINFAXAPI
BOOL
WINAPI
FaxGetPortExW (
IN HANDLE hFaxHandle,
IN DWORD dwDeviceId,
OUT PFAX_PORT_INFO_EXW *ppPortInfo
);
#ifdef UNICODE
#define FaxGetPortEx FaxGetPortExW
#else
#define FaxGetPortEx FaxGetPortExA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetPortExA (
IN HANDLE hFaxHandle,
IN DWORD dwDeviceId,
IN PFAX_PORT_INFO_EXA pPortInfo
);
WINFAXAPI
BOOL
WINAPI
FaxSetPortExW (
IN HANDLE hFaxHandle,
IN DWORD dwDeviceId,
IN PFAX_PORT_INFO_EXW pPortInfo
);
#ifdef UNICODE
#define FaxSetPortEx FaxSetPortExW
#else
#define FaxSetPortEx FaxSetPortExA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxEnumPortsExA (
IN HANDLE hFaxHandle,
OUT PFAX_PORT_INFO_EXA *ppPorts,
OUT LPDWORD lpdwNumPorts
);
WINFAXAPI
BOOL
WINAPI
FaxEnumPortsExW (
IN HANDLE hFaxHandle,
OUT PFAX_PORT_INFO_EXW *ppPorts,
OUT LPDWORD lpdwNumPorts
);
#ifdef UNICODE
#define FaxEnumPortsEx FaxEnumPortsExW
#else
#define FaxEnumPortsEx FaxEnumPortsExA
#endif // !UNICODE
//********************************************
//* Recipient and sender information
//********************************************
WINFAXAPI
BOOL
WINAPI
FaxGetRecipientInfoA (
IN HANDLE hFaxHandle,
IN DWORDLONG dwlMessageId,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
OUT PFAX_PERSONAL_PROFILEA *lpPersonalProfile
);
WINFAXAPI
BOOL
WINAPI
FaxGetRecipientInfoW (
IN HANDLE hFaxHandle,
IN DWORDLONG dwlMessageId,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
OUT PFAX_PERSONAL_PROFILEW *lpPersonalProfile
);
#ifdef UNICODE
#define FaxGetRecipientInfo FaxGetRecipientInfoW
#else
#define FaxGetRecipientInfo FaxGetRecipientInfoA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetSenderInfoA (
IN HANDLE hFaxHandle,
IN DWORDLONG dwlMessageId,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
OUT PFAX_PERSONAL_PROFILEA *lpPersonalProfile
);
WINFAXAPI
BOOL
WINAPI
FaxGetSenderInfoW (
IN HANDLE hFaxHandle,
IN DWORDLONG dwlMessageId,
IN FAX_ENUM_MESSAGE_FOLDER Folder,
OUT PFAX_PERSONAL_PROFILEW *lpPersonalProfile
);
#ifdef UNICODE
#define FaxGetSenderInfo FaxGetSenderInfoW
#else
#define FaxGetSenderInfo FaxGetSenderInfoA
#endif // !UNICODE
//********************************************
//* Outbound routing groups
//********************************************
typedef enum
{
FAX_GROUP_STATUS_ALL_DEV_VALID,
FAX_GROUP_STATUS_EMPTY,
FAX_GROUP_STATUS_ALL_DEV_NOT_VALID,
FAX_GROUP_STATUS_SOME_DEV_NOT_VALID,
} FAX_ENUM_GROUP_STATUS;
typedef struct _FAX_OUTBOUND_ROUTING_GROUPA
{
DWORD dwSizeOfStruct;
LPCSTR lpctstrGroupName;
DWORD dwNumDevices;
LPDWORD lpdwDevices;
FAX_ENUM_GROUP_STATUS Status;
} FAX_OUTBOUND_ROUTING_GROUPA, *PFAX_OUTBOUND_ROUTING_GROUPA;
typedef struct _FAX_OUTBOUND_ROUTING_GROUPW
{
DWORD dwSizeOfStruct;
LPCWSTR lpctstrGroupName;
DWORD dwNumDevices;
LPDWORD lpdwDevices;
FAX_ENUM_GROUP_STATUS Status;
} FAX_OUTBOUND_ROUTING_GROUPW, *PFAX_OUTBOUND_ROUTING_GROUPW;
#ifdef UNICODE
typedef FAX_OUTBOUND_ROUTING_GROUPW FAX_OUTBOUND_ROUTING_GROUP;
typedef PFAX_OUTBOUND_ROUTING_GROUPW PFAX_OUTBOUND_ROUTING_GROUP;
#else
typedef FAX_OUTBOUND_ROUTING_GROUPA FAX_OUTBOUND_ROUTING_GROUP;
typedef PFAX_OUTBOUND_ROUTING_GROUPA PFAX_OUTBOUND_ROUTING_GROUP;
#endif // UNICODE
WINFAXAPI
BOOL
WINAPI
FaxEnumOutboundGroupsA (
IN HANDLE hFaxHandle,
OUT PFAX_OUTBOUND_ROUTING_GROUPA *ppGroups,
OUT LPDWORD lpdwNumGroups
);
WINFAXAPI
BOOL
WINAPI
FaxEnumOutboundGroupsW (
IN HANDLE hFaxHandle,
OUT PFAX_OUTBOUND_ROUTING_GROUPW *ppGroups,
OUT LPDWORD lpdwNumGroups
);
#ifdef UNICODE
#define FaxEnumOutboundGroups FaxEnumOutboundGroupsW
#else
#define FaxEnumOutboundGroups FaxEnumOutboundGroupsA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetOutboundGroupA (
IN HANDLE hFaxHandle,
IN PFAX_OUTBOUND_ROUTING_GROUPA pGroup
);
WINFAXAPI
BOOL
WINAPI
FaxSetOutboundGroupW (
IN HANDLE hFaxHandle,
IN PFAX_OUTBOUND_ROUTING_GROUPW pGroup
);
#ifdef UNICODE
#define FaxSetOutboundGroup FaxSetOutboundGroupW
#else
#define FaxSetOutboundGroup FaxSetOutboundGroupA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxAddOutboundGroupA (
IN HANDLE hFaxHandle,
IN LPCSTR lpctstrGroupName
);
WINFAXAPI
BOOL
WINAPI
FaxAddOutboundGroupW (
IN HANDLE hFaxHandle,
IN LPCWSTR lpctstrGroupName
);
#ifdef UNICODE
#define FaxAddOutboundGroup FaxAddOutboundGroupW
#else
#define FaxAddOutboundGroup FaxAddOutboundGroupA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxRemoveOutboundGroupA (
IN HANDLE hFaxHandle,
IN LPCSTR lpctstrGroupName
);
WINFAXAPI
BOOL
WINAPI
FaxRemoveOutboundGroupW (
IN HANDLE hFaxHandle,
IN LPCWSTR lpctstrGroupName
);
#ifdef UNICODE
#define FaxRemoveOutboundGroup FaxRemoveOutboundGroupW
#else
#define FaxRemoveOutboundGroup FaxRemoveOutboundGroupA
#endif // !UNICODE
BOOL
WINAPI
FaxSetDeviceOrderInGroupA (
IN HANDLE hFaxHandle,
IN LPCSTR lpctstrGroupName,
IN DWORD dwDeviceId,
IN DWORD dwNewOrder
);
BOOL
WINAPI
FaxSetDeviceOrderInGroupW (
IN HANDLE hFaxHandle,
IN LPCWSTR lpctstrGroupName,
IN DWORD dwDeviceId,
IN DWORD dwNewOrder
);
#ifdef UNICODE
#define FaxSetDeviceOrderInGroup FaxSetDeviceOrderInGroupW
#else
#define FaxSetDeviceOrderInGroup FaxSetDeviceOrderInGroupA
#endif // !UNICODE
//********************************************
//* Outbound routing rules
//********************************************
typedef enum
{
FAX_RULE_STATUS_VALID,
FAX_RULE_STATUS_EMPTY_GROUP, // The rule's destination group has no devices
FAX_RULE_STATUS_ALL_GROUP_DEV_NOT_VALID, // The rule's destination group has valid devices
FAX_RULE_STATUS_SOME_GROUP_DEV_NOT_VALID, // The rule's destination group has some invalid devices
FAX_RULE_STATUS_BAD_DEVICE // The rule's destination device is not valid
} FAX_ENUM_RULE_STATUS;
typedef struct _FAX_OUTBOUND_ROUTING_RULEA
{
DWORD dwSizeOfStruct;
DWORD dwAreaCode;
DWORD dwCountryCode;
LPCSTR lpctstrCountryName;
union
{
DWORD dwDeviceId;
LPCSTR lpcstrGroupName;
} Destination;
BOOL bUseGroup;
FAX_ENUM_RULE_STATUS Status;
} FAX_OUTBOUND_ROUTING_RULEA, *PFAX_OUTBOUND_ROUTING_RULEA;
typedef struct _FAX_OUTBOUND_ROUTING_RULEW
{
DWORD dwSizeOfStruct;
DWORD dwAreaCode;
DWORD dwCountryCode;
LPCWSTR lpctstrCountryName;
union
{
DWORD dwDeviceId;
LPCWSTR lpcstrGroupName;
} Destination;
BOOL bUseGroup;
FAX_ENUM_RULE_STATUS Status;
} FAX_OUTBOUND_ROUTING_RULEW, *PFAX_OUTBOUND_ROUTING_RULEW;
#ifdef UNICODE
typedef FAX_OUTBOUND_ROUTING_RULEW FAX_OUTBOUND_ROUTING_RULE;
typedef PFAX_OUTBOUND_ROUTING_RULEW PFAX_OUTBOUND_ROUTING_RULE;
#else
typedef FAX_OUTBOUND_ROUTING_RULEA FAX_OUTBOUND_ROUTING_RULE;
typedef PFAX_OUTBOUND_ROUTING_RULEA PFAX_OUTBOUND_ROUTING_RULE;
#endif // UNICODE
WINFAXAPI
BOOL
WINAPI
FaxEnumOutboundRulesA (
IN HANDLE hFaxHandle,
OUT PFAX_OUTBOUND_ROUTING_RULEA *ppRules,
OUT LPDWORD lpdwNumRules
);
WINFAXAPI
BOOL
WINAPI
FaxEnumOutboundRulesW (
IN HANDLE hFaxHandle,
OUT PFAX_OUTBOUND_ROUTING_RULEW *ppRules,
OUT LPDWORD lpdwNumRules
);
#ifdef UNICODE
#define FaxEnumOutboundRules FaxEnumOutboundRulesW
#else
#define FaxEnumOutboundRules FaxEnumOutboundRulesA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxSetOutboundRuleA (
IN HANDLE hFaxHandle,
IN PFAX_OUTBOUND_ROUTING_RULEA pRule
);
WINFAXAPI
BOOL
WINAPI
FaxSetOutboundRuleW (
IN HANDLE hFaxHandle,
IN PFAX_OUTBOUND_ROUTING_RULEW pRule
);
#ifdef UNICODE
#define FaxSetOutboundRule FaxSetOutboundRuleW
#else
#define FaxSetOutboundRule FaxSetOutboundRuleA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxAddOutboundRuleA (
IN HANDLE hFaxHandle,
IN DWORD dwAreaCode,
IN DWORD dwCountryCode,
IN DWORD dwDeviceID,
IN LPCSTR lpctstrGroupName,
IN BOOL bUseGroup
);
WINFAXAPI
BOOL
WINAPI
FaxAddOutboundRuleW (
IN HANDLE hFaxHandle,
IN DWORD dwAreaCode,
IN DWORD dwCountryCode,
IN DWORD dwDeviceID,
IN LPCWSTR lpctstrGroupName,
IN BOOL bUseGroup
);
#ifdef UNICODE
#define FaxAddOutboundRule FaxAddOutboundRuleW
#else
#define FaxAddOutboundRule FaxAddOutboundRuleA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxRemoveOutboundRule (
IN HANDLE hFaxHandle,
IN DWORD dwAreaCode,
IN DWORD dwCountryCode
);
//********************************************
//* TAPI countries support
//********************************************
typedef struct _FAX_TAPI_LINECOUNTRY_ENTRYA
{
DWORD dwCountryID;
DWORD dwCountryCode;
LPCSTR lpctstrCountryName;
LPCSTR lpctstrLongDistanceRule;
} FAX_TAPI_LINECOUNTRY_ENTRYA, *PFAX_TAPI_LINECOUNTRY_ENTRYA;
typedef struct _FAX_TAPI_LINECOUNTRY_ENTRYW
{
DWORD dwCountryID;
DWORD dwCountryCode;
LPCWSTR lpctstrCountryName;
LPCWSTR lpctstrLongDistanceRule;
} FAX_TAPI_LINECOUNTRY_ENTRYW, *PFAX_TAPI_LINECOUNTRY_ENTRYW;
#ifdef UNICODE
typedef FAX_TAPI_LINECOUNTRY_ENTRYW FAX_TAPI_LINECOUNTRY_ENTRY;
typedef PFAX_TAPI_LINECOUNTRY_ENTRYW PFAX_TAPI_LINECOUNTRY_ENTRY;
#else
typedef FAX_TAPI_LINECOUNTRY_ENTRYA FAX_TAPI_LINECOUNTRY_ENTRY;
typedef PFAX_TAPI_LINECOUNTRY_ENTRYA PFAX_TAPI_LINECOUNTRY_ENTRY;
#endif // UNICODE
typedef struct _FAX_TAPI_LINECOUNTRY_LISTA
{
DWORD dwNumCountries;
PFAX_TAPI_LINECOUNTRY_ENTRYA LineCountryEntries;
} FAX_TAPI_LINECOUNTRY_LISTA, *PFAX_TAPI_LINECOUNTRY_LISTA;
typedef struct _FAX_TAPI_LINECOUNTRY_LISTW
{
DWORD dwNumCountries;
PFAX_TAPI_LINECOUNTRY_ENTRYW LineCountryEntries;
} FAX_TAPI_LINECOUNTRY_LISTW, *PFAX_TAPI_LINECOUNTRY_LISTW;
#ifdef UNICODE
typedef FAX_TAPI_LINECOUNTRY_LISTW FAX_TAPI_LINECOUNTRY_LIST;
typedef PFAX_TAPI_LINECOUNTRY_LISTW PFAX_TAPI_LINECOUNTRY_LIST;
#else
typedef FAX_TAPI_LINECOUNTRY_LISTA FAX_TAPI_LINECOUNTRY_LIST;
typedef PFAX_TAPI_LINECOUNTRY_LISTA PFAX_TAPI_LINECOUNTRY_LIST;
#endif // UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetCountryListA (
IN HANDLE hFaxHandle,
OUT PFAX_TAPI_LINECOUNTRY_LISTA *ppCountryListBuffer
);
WINFAXAPI
BOOL
WINAPI
FaxGetCountryListW (
IN HANDLE hFaxHandle,
OUT PFAX_TAPI_LINECOUNTRY_LISTW *ppCountryListBuffer
);
#ifdef UNICODE
#define FaxGetCountryList FaxGetCountryListW
#else
#define FaxGetCountryList FaxGetCountryListA
#endif // !UNICODE
//********************************************
//* FSP registration
//********************************************
WINFAXAPI
BOOL
WINAPI
FaxRegisterServiceProviderExA(
IN HANDLE hFaxHandle,
IN LPCSTR lpctstrGUID,
IN LPCSTR lpctstrFriendlyName,
IN LPCSTR lpctstrImageName,
IN LPCSTR lpctstrTspName,
IN DWORD dwFSPIVersion,
IN DWORD dwCapabilities
);
WINFAXAPI
BOOL
WINAPI
FaxRegisterServiceProviderExW(
IN HANDLE hFaxHandle,
IN LPCWSTR lpctstrGUID,
IN LPCWSTR lpctstrFriendlyName,
IN LPCWSTR lpctstrImageName,
IN LPCWSTR lpctstrTspName,
IN DWORD dwFSPIVersion,
IN DWORD dwCapabilities
);
#ifdef UNICODE
#define FaxRegisterServiceProviderEx FaxRegisterServiceProviderExW
#else
#define FaxRegisterServiceProviderEx FaxRegisterServiceProviderExA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxUnregisterServiceProviderExA(
IN HANDLE hFaxHandle,
IN LPCSTR lpctstrGUID
);
WINFAXAPI
BOOL
WINAPI
FaxUnregisterServiceProviderExW(
IN HANDLE hFaxHandle,
IN LPCWSTR lpctstrGUID
);
#ifdef UNICODE
#define FaxUnregisterServiceProviderEx FaxUnregisterServiceProviderExW
#else
#define FaxUnregisterServiceProviderEx FaxUnregisterServiceProviderExA
#endif // !UNICODE
//********************************************
//* Server events
//********************************************
typedef enum
{
FAX_EVENT_TYPE_LEGACY = 0x00000000,
FAX_EVENT_TYPE_IN_QUEUE = 0x00000001,
FAX_EVENT_TYPE_OUT_QUEUE = 0x00000002,
FAX_EVENT_TYPE_CONFIG = 0x00000004,
FAX_EVENT_TYPE_ACTIVITY = 0x00000008,
FAX_EVENT_TYPE_QUEUE_STATE = 0x00000010,
FAX_EVENT_TYPE_IN_ARCHIVE = 0x00000020,
FAX_EVENT_TYPE_OUT_ARCHIVE = 0x00000040,
FAX_EVENT_TYPE_FXSSVC_ENDED = 0x00000080,
FAX_EVENT_TYPE_DEVICE_STATUS = 0x00000100,
FAX_EVENT_TYPE_NEW_CALL = 0x00000200
} FAX_ENUM_EVENT_TYPE;
typedef enum
{
FAX_JOB_EVENT_TYPE_ADDED,
FAX_JOB_EVENT_TYPE_REMOVED,
FAX_JOB_EVENT_TYPE_STATUS
} FAX_ENUM_JOB_EVENT_TYPE;
typedef enum
{
FAX_CONFIG_TYPE_RECEIPTS,
FAX_CONFIG_TYPE_ACTIVITY_LOGGING,
FAX_CONFIG_TYPE_OUTBOX,
FAX_CONFIG_TYPE_SENTITEMS,
FAX_CONFIG_TYPE_INBOX,
FAX_CONFIG_TYPE_SECURITY,
FAX_CONFIG_TYPE_EVENTLOGS,
FAX_CONFIG_TYPE_DEVICES,
FAX_CONFIG_TYPE_OUT_GROUPS,
FAX_CONFIG_TYPE_OUT_RULES
} FAX_ENUM_CONFIG_TYPE;
typedef struct _FAX_EVENT_JOBA
{
DWORDLONG dwlMessageId;
FAX_ENUM_JOB_EVENT_TYPE Type;
PFAX_JOB_STATUSA pJobData;
} FAX_EVENT_JOBA, *PFAX_EVENT_JOBA;
typedef struct _FAX_EVENT_JOBW
{
DWORDLONG dwlMessageId;
FAX_ENUM_JOB_EVENT_TYPE Type;
PFAX_JOB_STATUSW pJobData;
} FAX_EVENT_JOBW, *PFAX_EVENT_JOBW;
#ifdef UNICODE
typedef FAX_EVENT_JOBW FAX_EVENT_JOB;
typedef PFAX_EVENT_JOBW PFAX_EVENT_JOB;
#else
typedef FAX_EVENT_JOBA FAX_EVENT_JOB;
typedef PFAX_EVENT_JOBA PFAX_EVENT_JOB;
#endif // UNICODE
typedef struct _FAX_EVENT_DEVICE_STATUS
{
DWORD dwDeviceId; // Id of the device whose status has just changed
DWORD dwNewStatus; // The new status - a combination of values from FAX_ENUM_DEVICE_STATUS
} FAX_EVENT_DEVICE_STATUS, *PFAX_EVENT_DEVICE_STATUS;
typedef struct _FAX_EVENT_NEW_CALLA
{
HCALL hCall;
DWORD dwDeviceId;
LPTSTR lptstrCallerId;
} FAX_EVENT_NEW_CALLA, *PFAX_EVENT_NEW_CALLA;
typedef struct _FAX_EVENT_NEW_CALLW
{
HCALL hCall;
DWORD dwDeviceId;
LPTSTR lptstrCallerId;
} FAX_EVENT_NEW_CALLW, *PFAX_EVENT_NEW_CALLW;
#ifdef UNICODE
typedef FAX_EVENT_NEW_CALLW FAX_EVENT_NEW_CALL;
typedef PFAX_EVENT_NEW_CALLW PFAX_EVENT_NEW_CALL;
#else
typedef FAX_EVENT_NEW_CALLA FAX_EVENT_NEW_CALL;
typedef PFAX_EVENT_NEW_CALLA PFAX_EVENT_NEW_CALL;
#endif // UNICODE
typedef struct _FAX_EVENT_EXA
{
DWORD dwSizeOfStruct;
FILETIME TimeStamp;
FAX_ENUM_EVENT_TYPE EventType;
union
{
FAX_EVENT_JOBA JobInfo;
FAX_ENUM_CONFIG_TYPE ConfigType;
FAX_SERVER_ACTIVITY ActivityInfo;
FAX_EVENT_NEW_CALL NewCall;
DWORD dwQueueStates;
FAX_EVENT_DEVICE_STATUS DeviceStatus;
} EventInfo;
} FAX_EVENT_EXA, *PFAX_EVENT_EXA;
typedef struct _FAX_EVENT_EXW
{
DWORD dwSizeOfStruct;
FILETIME TimeStamp;
FAX_ENUM_EVENT_TYPE EventType;
union
{
FAX_EVENT_JOBW JobInfo;
FAX_ENUM_CONFIG_TYPE ConfigType;
FAX_SERVER_ACTIVITY ActivityInfo;
FAX_EVENT_NEW_CALL NewCall;
DWORD dwQueueStates;
FAX_EVENT_DEVICE_STATUS DeviceStatus;
} EventInfo;
} FAX_EVENT_EXW, *PFAX_EVENT_EXW;
#ifdef UNICODE
typedef FAX_EVENT_EXW FAX_EVENT_EX;
typedef PFAX_EVENT_EXW PFAX_EVENT_EX;
#else
typedef FAX_EVENT_EXA FAX_EVENT_EX;
typedef PFAX_EVENT_EXA PFAX_EVENT_EX;
#endif // UNICODE
//-------------------------------------------------------------------------------
// Printers Info
//-------------------------------------------------------------------------------
typedef struct _FAX_PRINTER_INFOA
{
LPSTR lptstrPrinterName;
LPSTR lptstrServerName;
LPSTR lptstrDriverName;
} FAX_PRINTER_INFOA, *PFAX_PRINTER_INFOA;
typedef struct _FAX_PRINTER_INFOW
{
LPWSTR lptstrPrinterName;
LPWSTR lptstrServerName;
LPWSTR lptstrDriverName;
} FAX_PRINTER_INFOW, *PFAX_PRINTER_INFOW;
#ifdef UNICODE
typedef FAX_PRINTER_INFOW FAX_PRINTER_INFO;
typedef PFAX_PRINTER_INFOW PFAX_PRINTER_INFO;
#else
typedef FAX_PRINTER_INFOA FAX_PRINTER_INFO;
typedef PFAX_PRINTER_INFOA PFAX_PRINTER_INFO;
#endif // UNICODE
WINFAXAPI
BOOL
WINAPI
FaxGetServicePrintersA(
IN HANDLE hFaxHandle,
OUT PFAX_PRINTER_INFOA *ppPrinterInfo,
OUT LPDWORD lpdwPrintersReturned
);
WINFAXAPI
BOOL
WINAPI
FaxGetServicePrintersW(
IN HANDLE hFaxHandle,
OUT PFAX_PRINTER_INFOW *ppPrinterInfo,
OUT LPDWORD lpdwPrintersReturned
);
#ifdef UNICODE
#define FaxGetServicePrinters FaxGetServicePrintersW
#else
#define FaxGetServicePrinters FaxGetServicePrintersA
#endif // !UNICODE
typedef BOOL
(WINAPI *PFAXGETSERVICEPRINTERSA)(
IN HANDLE hFaxHandle,
OUT PFAX_PRINTER_INFOA *ppPrinterInfo,
OUT LPDWORD lpdwPrintersReturned
);
typedef BOOL
(WINAPI *PFAXGETSERVICEPRINTERSW)(
IN HANDLE hFaxHandle,
OUT PFAX_PRINTER_INFOW *ppPrinterInfo,
OUT LPDWORD lpdwPrintersReturned
);
#ifdef UNICODE
#define PFAXGETSERVICEPRINTERS PFAXGETSERVICEPRINTERSW
#else
#define PFAXGETSERVICEPRINTERS PFAXGETSERVICEPRINTERSA
#endif // !UNICODE
WINFAXAPI
BOOL
WINAPI
FaxRegisterForServerEvents (
IN HANDLE hFaxHandle,
IN DWORD dwEventTypes,
IN HANDLE hCompletionPort,
IN DWORD_PTR dwCompletionKey,
IN HWND hWnd,
IN DWORD dwMessage,
OUT LPHANDLE lphEvent
);
WINFAXAPI
BOOL
WINAPI
FaxUnregisterForServerEvents (
IN HANDLE hEvent
);
//********************************************
//* Manual answer support functions
//********************************************
WINFAXAPI
BOOL
WINAPI
FaxAnswerCall(
IN HANDLE hFaxHandle,
IN CONST DWORD dwDeviceId
);
//********************************************
//* Configuration Wizard support functions
//********************************************
WINFAXAPI
BOOL
WINAPI
FaxGetConfigWizardUsed (
OUT LPBOOL lpbConfigWizardUsed
);
WINFAXAPI
BOOL
WINAPI
FaxSetConfigWizardUsed (
IN HANDLE hFaxHandle,
OUT BOOL bConfigWizardUsed
);
//********************************************
//* Ivalidate archive folder
//********************************************
WINFAXAPI
BOOL
WINAPI
FaxRefreshArchive (
IN HANDLE hFaxHandle,
IN FAX_ENUM_MESSAGE_FOLDER Folder
);
WINFAXAPI
BOOL
FaxSetRecipientsLimit(
IN HANDLE hFaxHandle,
IN DWORD dwRecipientsLimit
);
WINFAXAPI
BOOL
WINAPI
FaxGetRecipientsLimit(
IN HANDLE hFaxHandle,
OUT LPDWORD lpdwRecipientsLimit
);
#include "FaxSuite.h"
WINFAXAPI
BOOL
FaxGetServerSKU(
IN HANDLE hFaxHandle,
OUT PRODUCT_SKU_TYPE* pServerSKU
);
//
// FaxCheckValidFaxFolder should be used to verify arbitrary folder paths before they are used
// as a parameter for the store-in-folder routing method.
// It should not be used to verify the fax queue folder or the fax archive folders.
//
WINFAXAPI
BOOL
FaxCheckValidFaxFolder(
IN HANDLE hFaxHandle,
IN LPCWSTR lpcwstrPath
);
#ifdef __cplusplus
}
#endif
#endif