6.1 Appendix A.1: faxdatatypes.idl

For ease of implementation, the full IDL for the data types used by the Fax Server Interface and FaxObs Server Interface is provided as follows, where "ms-dtyp.idl" is the IDL found in [MS-DTYP] section 5 (Appendix A).

 import "ms-dtyp.idl";
  
 #define FAX_MAX_DEVICES_IN_GROUP          1000  
       
 typedef [context_handle] HANDLE RPC_FAX_HANDLE;
 typedef [ref] RPC_FAX_HANDLE* PRPC_FAX_HANDLE;
  
 typedef [context_handle] HANDLE RPC_FAX_PORT_HANDLE;
 typedef RPC_FAX_PORT_HANDLE* PRPC_FAX_PORT_HANDLE;
  
 typedef [context_handle] HANDLE RPC_FAX_SVC_HANDLE;
 typedef RPC_FAX_SVC_HANDLE* PRPC_FAX_SVC_HANDLE;
  
 typedef [context_handle] HANDLE RPC_FAX_MSG_ENUM_HANDLE;
 typedef RPC_FAX_MSG_ENUM_HANDLE* PRPC_FAX_MSG_ENUM_HANDLE;
  
 typedef [context_handle] HANDLE RPC_FAX_COPY_HANDLE;
 typedef RPC_FAX_COPY_HANDLE* PRPC_FAX_COPY_HANDLE;
  
 typedef [context_handle] HANDLE RPC_FAX_EVENT_HANDLE;
 typedef RPC_FAX_EVENT_HANDLE* PRPC_FAX_EVENT_HANDLE;
  
 typedef [context_handle] HANDLE RPC_FAX_EVENT_EX_HANDLE;
 typedef RPC_FAX_EVENT_EX_HANDLE* PRPC_FAX_EVENT_EX_HANDLE;
  
 #ifdef SERVER_STUB
   typedef [range(0, RPC_COPY_BUFFER_SIZE)]    DWORD    RANGED_DWORD;
   typedef RANGED_DWORD *    LPRANGED_DWORD;
 #else
   typedef DWORD *    LPRANGED_DWORD;
 #endif
  
 typedef struct {
   DWORD dwSizeOfStruct;
   DWORD dwCoverPageFormat;
   [string] LPWSTR lpwstrCoverPageFileName;
   BOOL bServerBased;
   [string] LPWSTR lpwstrNote;
   [string] LPWSTR lpwstrSubject;
 } FAX_COVERPAGE_INFO_EXW, 
   *PFAX_COVERPAGE_INFO_EXW, 
   *LPCFAX_COVERPAGE_INFO_EXW;
  
 typedef struct {
     DWORD SizeOfStruct;
     [string] LPCWSTR RecipientNumber;
     [string] LPCWSTR RecipientName;
     [string] LPCWSTR Tsid;
     [string] LPCWSTR SenderName;
     [string] LPCWSTR SenderCompany;
     [string] LPCWSTR SenderDept;
     [string] LPCWSTR BillingCode;
     DWORD ScheduleAction;
     SYSTEMTIME ScheduleTime;
     DWORD DeliveryReportType;
     [string] LPCWSTR DeliveryReportAddress;
     [string] LPCWSTR DocumentName;
     HCALL CallHandle;
     DWORD_PTR Reserved[3];
 } FAX_JOB_PARAMW, *PFAX_JOB_PARAMW;
  
 typedef enum 
 {
   FAX_DEVICE_RECEIVE_MODE_OFF = 0,
   FAX_DEVICE_RECEIVE_MODE_AUTO = 1,
   FAX_DEVICE_RECEIVE_MODE_MANUAL = 2
 }FAX_ENUM_DEVICE_RECEIVE_MODE;
  
 typedef enum
 {
     FAX_GROUP_STATUS_ALL_DEV_VALID = 0x00000000,
     FAX_GROUP_STATUS_EMPTY = 0x00000001,
     FAX_GROUP_STATUS_ALL_DEV_NOT_VALID = 0x00000002,
     FAX_GROUP_STATUS_SOME_DEV_NOT_VALID = 0x00000003
 } FAX_ENUM_GROUP_STATUS;
  
 typedef enum
 {
     FAX_MESSAGE_FOLDER_INBOX = 0x00000000,
     FAX_MESSAGE_FOLDER_SENTITEMS = 0x00000001,
     FAX_MESSAGE_FOLDER_QUEUE = 0x00000002
 } FAX_ENUM_MESSAGE_FOLDER;
  
 typedef enum 
 {
   RECIPIENT_PERSONAL_PROF = 1,
   SENDER_PERSONAL_PROF = 2
 }FAX_ENUM_PERSONAL_PROF_TYPES;
  
 typedef enum
 {
     FAX_PRIORITY_TYPE_LOW = 0x00000000,
     FAX_PRIORITY_TYPE_NORMAL = 0x00000001,
     FAX_PRIORITY_TYPE_HIGH = 0x00000002
 } FAX_ENUM_PRIORITY_TYPE;
  
 typedef enum 
 {
   FAX_SMTP_AUTH_ANONYMOUS = 0,
   FAX_SMTP_AUTH_BASIC = 1,
   FAX_SMTP_AUTH_NTLM = 2
 }FAX_ENUM_SMTP_AUTH_OPTIONS;
  
 typedef enum 
 {
   PRODUCT_SKU_UNKNOWN = 0x00000000,
   PRODUCT_SKU_PERSONAL = 0x00000001,
   PRODUCT_SKU_PROFESSIONAL = 0x00000002,
   PRODUCT_SKU_SERVER = 0x00000004,
   PRODUCT_SKU_ADVANCED_SERVER = 0x00000008,
   PRODUCT_SKU_DATA_CENTER = 0x00000010,
   PRODUCT_SKU_DESKTOP_EMBEDDED = 0x00000020,
   PRODUCT_SKU_SERVER_EMBEDDED = 0x00000040,
   PRODUCT_SKU_WEB_SERVER = 0x00000080
 }PRODUCT_SKU_TYPE;
  
 typedef enum 
 {
   FAX_CONFIG_OPTION_ALLOW_PERSONAL_CP = 0x00000000,
   FAX_CONFIG_OPTION_QUEUE_STATE = 0x00000001,
   FAX_CONFIG_OPTION_ALLOWED_RECEIPTS = 0x00000002,
   FAX_CONFIG_OPTION_INCOMING_FAXES_PUBLIC = 0x00000003
 }FAX_ENUM_CONFIG_OPTION;
  
 typedef struct {
   WORD Hour;
   WORD Minute;
 } FAX_TIME, 
  *PFAX_TIME;
  
 typedef struct {
   DWORD dwSizeOfStruct;
   DWORD dwAllowedReceipts;
   FAX_ENUM_SMTP_AUTH_OPTIONS SMTPAuthOption;
   [string] LPWSTR lpwstrReserved;
   [string] LPWSTR lpwstrSMTPServer;
   DWORD dwSMTPPort;
   [string] LPWSTR lpwstrSMTPFrom;
   [string] LPWSTR lpwstrSMTPUserName;
   [string] LPWSTR lpwstrSMTPPassword;
   BOOL bIsToUseForMSRouteThroughEmailMethod;
 } FAX_RECEIPTS_CONFIGW, 
   *PFAX_RECEIPTS_CONFIGW;
  
 typedef struct {
    DWORD SizeOfStruct;
    DWORD Retries;
    DWORD RetryDelay;
    DWORD DirtyDays;
    BOOL Branding;
    BOOL UseDeviceTsid;
    BOOL ServerCp;
    BOOL PauseServerQueue;
    FAX_TIME StartCheapTime;
    FAX_TIME StopCheapTime;
    BOOL ArchiveOutgoingFaxes;
    [string] LPCWSTR ArchiveDirectory;
    [string] LPCWSTR ProfileName;
 } FAX_CONFIGURATIONW, 
   *PFAX_CONFIGURATIONW;
  
 typedef struct {
   DWORD SizeOfStruct;
   DWORD Priority;
   [string] LPCWSTR Guid;
   [string] LPCWSTR FriendlyName;
   [string] LPCWSTR FunctionName;
   [string] LPCWSTR ExtensionImageName;
   [string] LPCWSTR ExtensionFriendlyName;
 } FAX_GLOBAL_ROUTING_INFOW,
   *PFAX_GLOBAL_ROUTING_INFOW;
  
 typedef struct {
  
         DWORD                   dwSizeOfStruct;
         DWORD                   dwScheduleAction;
         SYSTEMTIME              tmSchedule;
         DWORD                   dwReceiptDeliveryType;
         [string] LPWSTR                  lpwstrReceiptDeliveryAddress;
         FAX_ENUM_PRIORITY_TYPE  Priority;
         HCALL                   hCall;
         DWORD_PTR               dwReserved[4];
         [string] LPWSTR                  lpwstrDocumentName;
         DWORD                   dwPageCount;
 } FAX_JOB_PARAM_EXW, 
   *PFAX_JOB_PARAM_EXW, 
   *LPCFAX_JOB_PARAM_EXW;
  
 typedef struct {
  
     DWORD                                      dwSizeOfStruct;
     [string] LPWSTR                            lpwstrGroupName;
     [range(0,FAX_MAX_DEVICES_IN_GROUP)]DWORD   dwNumDevices;
     [unique, size_is(dwNumDevices)] LPDWORD    lpdwDevices;
     FAX_ENUM_GROUP_STATUS                      Status;
 } RPC_FAX_OUTBOUND_ROUTING_GROUPW,
   *PRPC_FAX_OUTBOUND_ROUTING_GROUPW;
  
 typedef struct {
    DWORD                           SizeOfStruct;
    DWORD                           DeviceId;
    DWORD                           State;
    DWORD                           Flags;
    DWORD                           Rings;
    DWORD                           Priority;
    [string] LPCWSTR                DeviceName;
    [string] LPCWSTR                Tsid;
    [string] LPCWSTR                Csid;
 }  FAX_PORT_INFO,
   *PFAX_PORT_INFO;
  
 typedef
 [switch_type(int)]
 union {
     [case(0)]
         DWORD               dwDeviceId;
     [default]
         [string] LPWSTR     lpwstrGroupName;
 } FAX_RULE_DESTINATION;
  
 typedef enum {
   FAX_RULE_STATUS_VALID = 0x00000000,
   FAX_RULE_STATUS_EMPTY_GROUP = 0x00000001,
   FAX_RULE_STATUS_ALL_GROUP_DEV_NOT_VALID = 0x00000002,
   FAX_RULE_STATUS_SOME_GROUP_DEV_NOT_VALID = 0x00000003,
   FAX_RULE_STATUS_BAD_DEVICE = 0x00000004
 } FAX_ENUM_RULE_STATUS;
  
 typedef struct {
     DWORD                                        dwSizeOfStruct;
     DWORD                                        dwAreaCode;
     DWORD                                        dwCountryCode;
     [string] LPWSTR                          lpwstrCountryName;
     [switch_is(bUseGroup)]            FAX_RULE_DESTINATION  Destination;
     BOOL                                            bUseGroup;
 } RPC_FAX_OUTBOUND_ROUTING_RULEW,
   *RPC_PFAX_OUTBOUND_ROUTING_RULEW;
  
 typedef struct {
   DWORD dwSizeOfStruct;
   BOOL bValid;
   WORD wMajorVersion;
   WORD wMinorVersion;
   WORD wMajorBuildNumber;
   WORD wMinorBuildNumber;
   DWORD dwFlags;
 } FAX_VERSION, 
  *PFAX_VERSION;
  
 typedef struct {
   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;
  
 typedef struct {
   DWORD dwSizeOfStruct;
   BOOL bLogIncoming;
   BOOL bLogOutgoing;
   [string] LPWSTR lpwstrDBPath;
 } FAX_ACTIVITY_LOGGING_CONFIGW, 
  *PFAX_ACTIVITY_LOGGING_CONFIGW;
  
 typedef struct {
   DWORD dwSizeOfStruct;
   DWORD dwDeviceID;
   [string] LPCWSTR lpcwstrDeviceName;
   [string] LPWSTR lpwstrDescription;
   [string] LPCWSTR lpcwstrProviderName;
   [string] LPCWSTR lpcwstrProviderGUID;
   BOOL bSend;
   FAX_ENUM_DEVICE_RECEIVE_MODE ReceiveMode;
   DWORD dwStatus;
   DWORD dwRings;
   [string] LPWSTR lpwstrCsid;
   [string] LPWSTR lpwstrTsid;
 } FAX_PORT_INFO_EXW, 
  *PFAX_PORT_INFO_EXW;
  
 typedef struct {
   DWORD dwSizeOfStruct;
   DWORD dwIncomingMessages;
   DWORD dwRoutingMessages;
   DWORD dwOutgoingMessages;
   DWORD dwDelegatedOutgoingMessages;
   DWORD dwQueuedMessages;
   DWORD dwErrorEvents;
   DWORD dwWarningEvents;
   DWORD dwInformationEvents;
 } FAX_SERVER_ACTIVITY, 
  *PFAX_SERVER_ACTIVITY;
  
 typedef struct {
   [string] LPCWSTR lpcwstrRecipients;
   [string] LPCWSTR lpcwstrSenderName;
   [string] LPCWSTR lpcwstrSenderFaxNumber;
   [string] LPCWSTR lpcwstrSubject;
   BOOL bHasCoverPage;
 } FAX_REASSIGN_INFO, 
  *PFAX_REASSIGN_INFO;
  
 typedef struct  {
   DWORD dwValidityMask;
   DWORD dwMsgFlags;
 } FAX_MESSAGE_PROPS, 
  *PFAX_MESSAGE_PROPS;
  
 typedef struct {
   DWORD SizeOfStruct;
   DWORD JobId;
   LPCWSTR UserName;
   DWORD JobType;
   DWORD QueueStatus;
   DWORD Status;
   DWORD Size;
   DWORD PageCount;
   LPCWSTR RecipientNumber;
   LPCWSTR RecipientName;
   LPCWSTR Tsid;
   LPCWSTR SenderName;
   LPCWSTR SenderCompany;
   LPCWSTR SenderDept;
   LPCWSTR BillingCode;
   DWORD ScheduleAction;
   SYSTEMTIME ScheduleTime;
   DWORD DeliveryReportType;
   LPCWSTR DeliveryReportAddress;
   LPCWSTR DocumentName;
 } FAX_JOB_ENTRY, 
  *PFAX_JOB_ENTRY;