/*++ Copyright (c) Microsoft Corporation. All rights reserved. Module Name: winfax.h Abstract: This module contains the WIN32 FAX APIs. --*/ #ifndef _FAXAPI_ #define _FAXAPI_ #ifndef MIDL_PASS #include #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_END 7012L // 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) 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 // #define JT_UNKNOWN 0 #define JT_SEND 1 #define JT_RECEIVE 2 #define JT_ROUTING 3 #define JT_FAIL_RECEIVE 4 // // job status defines // #define JS_PENDING 0x00000000 #define JS_INPROGRESS 0x00000001 #define JS_DELETING 0x00000002 #define JS_FAILED 0x00000004 #define JS_PAUSED 0x00000008 #define JS_NOLINE 0x00000010 #define JS_RETRYING 0x00000020 #define JS_RETRIES_EXCEEDED 0x00000040 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 DRT_INBOX = 0x0002 // send receipt to local inbox } FAX_ENUM_DELIVERY_REPORT_TYPES; 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 FaxEnumJobsA( IN HANDLE FaxHandle, OUT PFAX_JOB_ENTRYA *JobEntry, OUT LPDWORD JobsReturned ); WINFAXAPI BOOL WINAPI FaxEnumJobsW( IN HANDLE FaxHandle, OUT PFAX_JOB_ENTRYW *JobEntry, OUT LPDWORD JobsReturned ); #ifdef UNICODE #define FaxEnumJobs FaxEnumJobsW #else #define FaxEnumJobs FaxEnumJobsA #endif // !UNICODE typedef BOOL (WINAPI *PFAXENUMJOBSA)( IN HANDLE FaxHandle, OUT PFAX_JOB_ENTRYA *JobEntry, OUT LPDWORD JobsReturned ); typedef BOOL (WINAPI *PFAXENUMJOBSW)( IN HANDLE FaxHandle, OUT PFAX_JOB_ENTRYW *JobEntry, OUT LPDWORD JobsReturned ); #ifdef UNICODE #define PFAXENUMJOBS PFAXENUMJOBSW #else #define PFAXENUMJOBS PFAXENUMJOBSA #endif // !UNICODE WINFAXAPI BOOL WINAPI FaxGetJobA( IN HANDLE FaxHandle, IN DWORD JobId, OUT PFAX_JOB_ENTRYA *JobEntry ); WINFAXAPI BOOL WINAPI FaxGetJobW( IN HANDLE FaxHandle, IN DWORD JobId, OUT PFAX_JOB_ENTRYW *JobEntry ); #ifdef UNICODE #define FaxGetJob FaxGetJobW #else #define FaxGetJob FaxGetJobA #endif // !UNICODE typedef BOOL (WINAPI *PFAXGETJOBA)( IN HANDLE FaxHandle, IN DWORD JobId, OUT PFAX_JOB_ENTRYA *JobEntry ); typedef BOOL (WINAPI *PFAXGETJOBW)( IN HANDLE FaxHandle, IN DWORD JobId, OUT PFAX_JOB_ENTRYW *JobEntry ); #ifdef UNICODE #define PFAXGETJOB PFAXGETJOBW #else #define PFAXGETJOB PFAXGETJOBA #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 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 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 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) #ifdef __cplusplus } #endif #endif