#ifndef _WINSPOOL_H
#define _WINSPOOL_H

/* Windows Print API definitions */

#ifdef _WINUSER_
#include <prsht.h>
#endif

#ifdef __cplusplus
extern "C" {
#endif

#define DSPRINT_PUBLISH  0x00000001
#define DSPRINT_UPDATE  0x00000002
#define DSPRINT_UNPUBLISH  0x00000004
#define DSPRINT_REPUBLISH  0x00000008
#define DSPRINT_PENDING  0x80000000

#define PRINTER_CONTROL_PAUSE  1
#define PRINTER_CONTROL_RESUME  2
#define PRINTER_CONTROL_PURGE  3
#define PRINTER_CONTROL_SET_STATUS  4

#define PRINTER_STATUS_PAUSED  0x00000001
#define PRINTER_STATUS_ERROR  0x00000002
#define PRINTER_STATUS_PENDING_DELETION  0x00000004
#define PRINTER_STATUS_PAPER_JAM  0x00000008
#define PRINTER_STATUS_PAPER_OUT  0x00000010
#define PRINTER_STATUS_MANUAL_FEED  0x00000020
#define PRINTER_STATUS_PAPER_PROBLEM  0x00000040
#define PRINTER_STATUS_OFFLINE  0x00000080
#define PRINTER_STATUS_IO_ACTIVE  0x00000100
#define PRINTER_STATUS_BUSY  0x00000200
#define PRINTER_STATUS_PRINTING  0x00000400
#define PRINTER_STATUS_OUTPUT_BIN_FULL  0x00000800
#define PRINTER_STATUS_NOT_AVAILABLE  0x00001000
#define PRINTER_STATUS_WAITING  0x00002000
#define PRINTER_STATUS_PROCESSING  0x00004000
#define PRINTER_STATUS_INITIALIZING  0x00008000
#define PRINTER_STATUS_WARMING_UP  0x00010000
#define PRINTER_STATUS_TONER_LOW  0x00020000
#define PRINTER_STATUS_NO_TONER  0x00040000
#define PRINTER_STATUS_PAGE_PUNT  0x00080000
#define PRINTER_STATUS_USER_INTERVENTION  0x00100000
#define PRINTER_STATUS_OUT_OF_MEMORY  0x00200000
#define PRINTER_STATUS_DOOR_OPEN  0x00400000
#define PRINTER_STATUS_SERVER_UNKNOWN  0x00800000
#define PRINTER_STATUS_POWER_SAVE  0x01000000

#define PRINTER_ATTRIBUTE_QUEUED  0x00000001
#define PRINTER_ATTRIBUTE_DIRECT  0x00000002
#define PRINTER_ATTRIBUTE_DEFAULT  0x00000004
#define PRINTER_ATTRIBUTE_SHARED  0x00000008
#define PRINTER_ATTRIBUTE_NETWORK  0x00000010
#define PRINTER_ATTRIBUTE_HIDDEN  0x00000020
#define PRINTER_ATTRIBUTE_LOCAL  0x00000040

#define PRINTER_ATTRIBUTE_ENABLE_DEVQ  0x00000080
#define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS  0x00000100
#define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x00000200

#define PRINTER_ATTRIBUTE_WORK_OFFLINE  0x00000400
#define PRINTER_ATTRIBUTE_ENABLE_BIDI  0x00000800
#define PRINTER_ATTRIBUTE_RAW_ONLY  0x00001000
#define PRINTER_ATTRIBUTE_PUBLISHED  0x00002000

#define NO_PRIORITY  0
#define MAX_PRIORITY  99
#define MIN_PRIORITY  1
#define DEF_PRIORITY  1

#define JOB_CONTROL_PAUSE  1
#define JOB_CONTROL_RESUME  2
#define JOB_CONTROL_CANCEL  3
#define JOB_CONTROL_RESTART  4
#define JOB_CONTROL_DELETE  5
#define JOB_CONTROL_SENT_TO_PRINTER  6
#define JOB_CONTROL_LAST_PAGE_EJECTED  7

#define JOB_STATUS_PAUSED  0x00000001
#define JOB_STATUS_ERROR  0x00000002
#define JOB_STATUS_DELETING  0x00000004
#define JOB_STATUS_SPOOLING  0x00000008
#define JOB_STATUS_PRINTING  0x00000010
#define JOB_STATUS_OFFLINE  0x00000020
#define JOB_STATUS_PAPEROUT  0x00000040
#define JOB_STATUS_PRINTED  0x00000080
#define JOB_STATUS_DELETED  0x00000100
#define JOB_STATUS_BLOCKED_DEVQ  0x00000200
#define JOB_STATUS_USER_INTERVENTION  0x00000400
#define JOB_STATUS_RESTART  0x00000800

#define JOB_POSITION_UNSPECIFIED  0

#define DRIVER_KERNELMODE  0x00000001
#define DRIVER_USERMODE  0x00000002

#define DPD_DELETE_UNUSED_FILES  0x00000001
#define DPD_DELETE_SPECIFIC_VERSION  0x00000002
#define DPD_DELETE_ALL_FILES  0x00000004

#define APD_STRICT_UPGRADE  0x00000001
#define APD_STRICT_DOWNGRADE  0x00000002
#define APD_COPY_ALL_FILES  0x00000004
#define APD_COPY_NEW_FILES  0x00000008

#define DI_CHANNEL  1
#define DI_READ_SPOOL_JOB  3

#define DI_MEMORYMAP_WRITE  0x00000001

#define FORM_USER  0x00000000
#define FORM_BUILTIN  0x00000001
#define FORM_PRINTER  0x00000002

#define PORT_TYPE_WRITE  0x0001
#define PORT_TYPE_READ  0x0002
#define PORT_TYPE_REDIRECTED  0x0004
#define PORT_TYPE_NET_ATTACHED  0x0008

#define PORT_STATUS_TYPE_ERROR  1
#define PORT_STATUS_TYPE_WARNING  2
#define PORT_STATUS_TYPE_INFO  3

#define PORT_STATUS_OFFLINE  1
#define PORT_STATUS_PAPER_JAM  2
#define PORT_STATUS_PAPER_OUT  3
#define PORT_STATUS_OUTPUT_BIN_FULL  4
#define PORT_STATUS_PAPER_PROBLEM  5
#define PORT_STATUS_NO_TONER  6
#define PORT_STATUS_DOOR_OPEN  7
#define PORT_STATUS_USER_INTERVENTION  8
#define PORT_STATUS_OUT_OF_MEMORY  9
#define PORT_STATUS_TONER_LOW  10
#define PORT_STATUS_WARMING_UP  11
#define PORT_STATUS_POWER_SAVE  12

#define PRINTER_ENUM_DEFAULT  0x00000001
#define PRINTER_ENUM_LOCAL  0x00000002
#define PRINTER_ENUM_CONNECTIONS  0x00000004
#define PRINTER_ENUM_FAVORITE  0x00000004
#define PRINTER_ENUM_NAME  0x00000008
#define PRINTER_ENUM_REMOTE  0x00000010
#define PRINTER_ENUM_SHARED  0x00000020
#define PRINTER_ENUM_NETWORK  0x00000040
#define PRINTER_ENUM_EXPAND  0x00004000
#define PRINTER_ENUM_CONTAINER  0x00008000
#define PRINTER_ENUM_ICONMASK  0x00ff0000
#define PRINTER_ENUM_ICON1  0x00010000
#define PRINTER_ENUM_ICON2  0x00020000
#define PRINTER_ENUM_ICON3  0x00040000
#define PRINTER_ENUM_ICON4  0x00080000
#define PRINTER_ENUM_ICON5  0x00100000
#define PRINTER_ENUM_ICON6  0x00200000
#define PRINTER_ENUM_ICON7  0x00400000
#define PRINTER_ENUM_ICON8  0x00800000
#define PRINTER_ENUM_HIDE  0x01000000

#define SPOOL_FILE_PERSISTENT  0x00000001
#define SPOOL_FILE_TEMPORARY  0x00000002

#define PRINTER_NOTIFY_TYPE  0x00
#define JOB_NOTIFY_TYPE  0x01

#define PRINTER_NOTIFY_FIELD_SERVER_NAME  0x00
#define PRINTER_NOTIFY_FIELD_PRINTER_NAME  0x01
#define PRINTER_NOTIFY_FIELD_SHARE_NAME  0x02
#define PRINTER_NOTIFY_FIELD_PORT_NAME  0x03
#define PRINTER_NOTIFY_FIELD_DRIVER_NAME  0x04
#define PRINTER_NOTIFY_FIELD_COMMENT  0x05
#define PRINTER_NOTIFY_FIELD_LOCATION  0x06
#define PRINTER_NOTIFY_FIELD_DEVMODE  0x07
#define PRINTER_NOTIFY_FIELD_SEPFILE  0x08
#define PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR  0x09
#define PRINTER_NOTIFY_FIELD_PARAMETERS  0x0A
#define PRINTER_NOTIFY_FIELD_DATATYPE  0x0B
#define PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR  0x0C
#define PRINTER_NOTIFY_FIELD_ATTRIBUTES  0x0D
#define PRINTER_NOTIFY_FIELD_PRIORITY  0x0E
#define PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY  0x0F
#define PRINTER_NOTIFY_FIELD_START_TIME  0x10
#define PRINTER_NOTIFY_FIELD_UNTIL_TIME  0x11
#define PRINTER_NOTIFY_FIELD_STATUS  0x12
#define PRINTER_NOTIFY_FIELD_STATUS_STRING  0x13
#define PRINTER_NOTIFY_FIELD_CJOBS  0x14
#define PRINTER_NOTIFY_FIELD_AVERAGE_PPM  0x15
#define PRINTER_NOTIFY_FIELD_TOTAL_PAGES  0x16
#define PRINTER_NOTIFY_FIELD_PAGES_PRINTED  0x17
#define PRINTER_NOTIFY_FIELD_TOTAL_BYTES  0x18
#define PRINTER_NOTIFY_FIELD_BYTES_PRINTED  0x19
#define PRINTER_NOTIFY_FIELD_OBJECT_GUID  0x1A

#define JOB_NOTIFY_FIELD_PRINTER_NAME  0x00
#define JOB_NOTIFY_FIELD_MACHINE_NAME  0x01
#define JOB_NOTIFY_FIELD_PORT_NAME  0x02
#define JOB_NOTIFY_FIELD_USER_NAME  0x03
#define JOB_NOTIFY_FIELD_NOTIFY_NAME  0x04
#define JOB_NOTIFY_FIELD_DATATYPE  0x05
#define JOB_NOTIFY_FIELD_PRINT_PROCESSOR  0x06
#define JOB_NOTIFY_FIELD_PARAMETERS  0x07
#define JOB_NOTIFY_FIELD_DRIVER_NAME  0x08
#define JOB_NOTIFY_FIELD_DEVMODE  0x09
#define JOB_NOTIFY_FIELD_STATUS  0x0A
#define JOB_NOTIFY_FIELD_STATUS_STRING  0x0B
#define JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR  0x0C
#define JOB_NOTIFY_FIELD_DOCUMENT  0x0D
#define JOB_NOTIFY_FIELD_PRIORITY  0x0E
#define JOB_NOTIFY_FIELD_POSITION  0x0F
#define JOB_NOTIFY_FIELD_SUBMITTED  0x10
#define JOB_NOTIFY_FIELD_START_TIME  0x11
#define JOB_NOTIFY_FIELD_UNTIL_TIME  0x12
#define JOB_NOTIFY_FIELD_TIME  0x13
#define JOB_NOTIFY_FIELD_TOTAL_PAGES  0x14
#define JOB_NOTIFY_FIELD_PAGES_PRINTED  0x15
#define JOB_NOTIFY_FIELD_TOTAL_BYTES  0x16
#define JOB_NOTIFY_FIELD_BYTES_PRINTED  0x17

#define PRINTER_NOTIFY_OPTIONS_REFRESH  0x01
#define PRINTER_NOTIFY_INFO_DISCARDED  0x01

#define PRINTER_CHANGE_ADD_PRINTER  0x00000001
#define PRINTER_CHANGE_SET_PRINTER  0x00000002
#define PRINTER_CHANGE_DELETE_PRINTER  0x00000004
#define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER  0x00000008
#define PRINTER_CHANGE_PRINTER  0x000000FF
#define PRINTER_CHANGE_ADD_JOB  0x00000100
#define PRINTER_CHANGE_SET_JOB  0x00000200
#define PRINTER_CHANGE_DELETE_JOB  0x00000400
#define PRINTER_CHANGE_WRITE_JOB  0x00000800
#define PRINTER_CHANGE_JOB  0x0000FF00
#define PRINTER_CHANGE_ADD_FORM  0x00010000
#define PRINTER_CHANGE_SET_FORM  0x00020000
#define PRINTER_CHANGE_DELETE_FORM  0x00040000
#define PRINTER_CHANGE_FORM  0x00070000
#define PRINTER_CHANGE_ADD_PORT  0x00100000
#define PRINTER_CHANGE_CONFIGURE_PORT  0x00200000
#define PRINTER_CHANGE_DELETE_PORT  0x00400000
#define PRINTER_CHANGE_PORT  0x00700000
#define PRINTER_CHANGE_ADD_PRINT_PROCESSOR  0x01000000
#define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR  0x04000000
#define PRINTER_CHANGE_PRINT_PROCESSOR  0x07000000
#define PRINTER_CHANGE_ADD_PRINTER_DRIVER  0x10000000
#define PRINTER_CHANGE_SET_PRINTER_DRIVER  0x20000000
#define PRINTER_CHANGE_DELETE_PRINTER_DRIVER  0x40000000
#define PRINTER_CHANGE_PRINTER_DRIVER  0x70000000
#define PRINTER_CHANGE_TIMEOUT  0x80000000
#define PRINTER_CHANGE_ALL  0x7777FFFF

#define PRINTER_ERROR_INFORMATION  0x80000000
#define PRINTER_ERROR_WARNING  0x40000000
#define PRINTER_ERROR_SEVERE  0x20000000

#define PRINTER_ERROR_OUTOFPAPER  0x00000001
#define PRINTER_ERROR_JAM  0x00000002
#define PRINTER_ERROR_OUTOFTONER  0x00000004

#define SERVER_ACCESS_ADMINISTER  0x00000001
#define SERVER_ACCESS_ENUMERATE  0x00000002

#define PRINTER_ACCESS_ADMINISTER  0x00000004
#define PRINTER_ACCESS_USE  0x00000008

#define JOB_ACCESS_ADMINISTER  0x00000010

#define SERVER_ALL_ACCESS  (STANDARD_RIGHTS_REQUIRED|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE)
#define SERVER_READ  (STANDARD_RIGHTS_READ|SERVER_ACCESS_ENUMERATE)
#define SERVER_WRITE  (STANDARD_RIGHTS_WRITE|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE)
#define SERVER_EXECUTE  (STANDARD_RIGHTS_EXECUTE|SERVER_ACCESS_ENUMERATE)

#define PRINTER_ALL_ACCESS  (STANDARD_RIGHTS_REQUIRED|PRINTER_ACCESS_ADMINISTER|PRINTER_ACCESS_USE)
#define PRINTER_READ  (STANDARD_RIGHTS_READ|PRINTER_ACCESS_USE)
#define PRINTER_WRITE  (STANDARD_RIGHTS_WRITE|PRINTER_ACCESS_USE)
#define PRINTER_EXECUTE  (STANDARD_RIGHTS_EXECUTE|PRINTER_ACCESS_USE)

#define JOB_ALL_ACCESS  (STANDARD_RIGHTS_REQUIRED|JOB_ACCESS_ADMINISTER)
#define JOB_READ  (STANDARD_RIGHTS_READ|JOB_ACCESS_ADMINISTER)
#define JOB_WRITE  (STANDARD_RIGHTS_WRITE|JOB_ACCESS_ADMINISTER)
#define JOB_EXECUTE  (STANDARD_RIGHTS_EXECUTE|JOB_ACCESS_ADMINISTER)

#define SPLREG_DEFAULT_SPOOL_DIRECTORY  TEXT("DefaultSpoolDirectory")
#define SPLREG_PORT_THREAD_PRIORITY_DEFAULT  TEXT("PortThreadPriorityDefault")
#define SPLREG_PORT_THREAD_PRIORITY  TEXT("PortThreadPriority")
#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT  TEXT("SchedulerThreadPriorityDefault")
#define SPLREG_SCHEDULER_THREAD_PRIORITY  TEXT("SchedulerThreadPriority")
#define SPLREG_BEEP_ENABLED  TEXT("BeepEnabled")
#define SPLREG_NET_POPUP  TEXT("NetPopup")
#define SPLREG_RETRY_POPUP  TEXT("RetryPopup")
#define SPLREG_NET_POPUP_TO_COMPUTER  TEXT("NetPopupToComputer")
#define SPLREG_EVENT_LOG  TEXT("EventLog")
#define SPLREG_MAJOR_VERSION  TEXT("MajorVersion")
#define SPLREG_MINOR_VERSION  TEXT("MinorVersion")
#define SPLREG_ARCHITECTURE  TEXT("Architecture")
#define SPLREG_OS_VERSION  TEXT("OSVersion")
#define SPLREG_DS_PRESENT  TEXT("DsPresent")
#define SPLREG_DS_PRESENT_FOR_USER  TEXT("DsPresentForUser")
#define SPLREG_REMOTE_FAX  TEXT("RemoteFax")
#define SPLREG_RESTART_JOB_ON_POOL_ERROR  TEXT("RestartJobOnPoolError")
#define SPLREG_RESTART_JOB_ON_POOL_ENABLED  TEXT("RestartJobOnPoolEnabled")
#define SPLREG_DNS_MACHINE_NAME  TEXT("DNSMachineName")

#define SPLDS_SPOOLER_KEY  TEXT("DsSpooler")
#define SPLDS_DRIVER_KEY  TEXT("DsDriver")
#define SPLDS_USER_KEY  TEXT("DsUser")
#define SPLDS_ASSET_NUMBER  TEXT("assetNumber")
#define SPLDS_BYTES_PER_MINUTE  TEXT("bytesPerMinute")
#define SPLDS_DESCRIPTION  TEXT("description")
#define SPLDS_DRIVER_NAME  TEXT("driverName")
#define SPLDS_DRIVER_VERSION  TEXT("driverVersion")
#define SPLDS_LOCATION  TEXT("location")
#define SPLDS_PORT_NAME  TEXT("portName")
#define SPLDS_PRINT_ATTRIBUTES  TEXT("printAttributes")
#define SPLDS_PRINT_BIN_NAMES  TEXT("printBinNames")
#define SPLDS_PRINT_COLLATE  TEXT("printCollate")
#define SPLDS_PRINT_COLOR  TEXT("printColor")
#define SPLDS_PRINT_DUPLEX_SUPPORTED  TEXT("printDuplexSupported")
#define SPLDS_PRINT_END_TIME  TEXT("printEndTime")
#define SPLDS_PRINTER_CLASS  TEXT("printQueue")
#define SPLDS_PRINTER_NAME  TEXT("printerName")
#define SPLDS_PRINT_KEEP_PRINTED_JOBS  TEXT("printKeepPrintedJobs")
#define SPLDS_PRINT_LANGUAGE  TEXT("printLanguage")
#define SPLDS_PRINT_MAC_ADDRESS  TEXT("printMACAddress")
#define SPLDS_PRINT_MAX_X_EXTENT  TEXT("printMaxXExtent")
#define SPLDS_PRINT_MAX_Y_EXTENT  TEXT("printMaxYExtent")
#define SPLDS_PRINT_MAX_RESOLUTION_SUPPORTED  TEXT("printMaxResolutionSupported")
#define SPLDS_PRINT_MEDIA_READY  TEXT("printMediaReady")
#define SPLDS_PRINT_MEDIA_SUPPORTED  TEXT("printMediaSupported")
#define SPLDS_PRINT_MEMORY  TEXT("printMemory")
#define SPLDS_PRINT_MIN_X_EXTENT  TEXT("printMinXExtent")
#define SPLDS_PRINT_MIN_Y_EXTENT  TEXT("printMinYExtent")
#define SPLDS_PRINT_NETWORK_ADDRESS  TEXT("printNetworkAddress")
#define SPLDS_PRINT_NOTIFY  TEXT("printNotify")
#define SPLDS_PRINT_NUMBER_UP  TEXT("printNumberUp")
#define SPLDS_PRINT_ORIENTATIONS_SUPPORTED  TEXT("printOrientationsSupported")
#define SPLDS_PRINT_OWNER  TEXT("printOwner")
#define SPLDS_PRINT_PAGES_PER_MINUTE  TEXT("printPagesPerMinute")
#define SPLDS_PRINT_RATE  TEXT("printRate")
#define SPLDS_PRINT_RATE_UNIT  TEXT("printRateUnit")
#define SPLDS_PRINT_SEPARATOR_FILE  TEXT("printSeparatorFile")
#define SPLDS_PRINT_SHARE_NAME  TEXT("printShareName")
#define SPLDS_PRINT_SPOOLING  TEXT("printSpooling")
#define SPLDS_PRINT_STAPLING_SUPPORTED  TEXT("printStaplingSupported")
#define SPLDS_PRINT_START_TIME  TEXT("printStartTime")
#define SPLDS_PRINT_STATUS  TEXT("printStatus")
#define SPLDS_PRIORITY  TEXT("priority")
#define SPLDS_SERVER_NAME  TEXT("serverName")
#define SPLDS_SHORT_SERVER_NAME  TEXT("shortServerName")
#define SPLDS_UNC_NAME  TEXT("uNCName")
#define SPLDS_URL  TEXT("url")
#define SPLDS_FLAGS  TEXT("flags")
#define SPLDS_VERSION_NUMBER  TEXT("versionNumber")
#define SPLDS_PRINTER_NAME_ALIASES  TEXT("printerNameAliases")
#define SPLDS_PRINTER_LOCATIONS  TEXT("printerLocations")
#define SPLDS_PRINTER_MODEL  TEXT("printerModel")

typedef struct _PRINTER_INFO_1A {
    DWORD Flags;
    LPSTR pDescription;
    LPSTR pName;
    LPSTR pComment;
} PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A;

typedef struct _PRINTER_INFO_1W {
    DWORD Flags;
    LPWSTR pDescription;
    LPWSTR pName;
    LPWSTR pComment;
} PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W;

typedef struct _PRINTER_INFO_2A {
    LPSTR pServerName;
    LPSTR pPrinterName;
    LPSTR pShareName;
    LPSTR pPortName;
    LPSTR pDriverName;
    LPSTR pComment;
    LPSTR pLocation;
    LPDEVMODEA pDevMode;
    LPSTR pSepFile;
    LPSTR pPrintProcessor;
    LPSTR pDatatype;
    LPSTR pParameters;
    PSECURITY_DESCRIPTOR pSecurityDescriptor;
    DWORD Attributes;
    DWORD Priority;
    DWORD DefaultPriority;
    DWORD StartTime;
    DWORD UntilTime;
    DWORD Status;
    DWORD cJobs;
    DWORD AveragePPM;
} PRINTER_INFO_2A, *PPRINTER_INFO_2A, *LPPRINTER_INFO_2A;

typedef struct _PRINTER_INFO_2W {
    LPWSTR pServerName;
    LPWSTR pPrinterName;
    LPWSTR pShareName;
    LPWSTR pPortName;
    LPWSTR pDriverName;
    LPWSTR pComment;
    LPWSTR pLocation;
    LPDEVMODEW pDevMode;
    LPWSTR pSepFile;
    LPWSTR pPrintProcessor;
    LPWSTR pDatatype;
    LPWSTR pParameters;
    PSECURITY_DESCRIPTOR pSecurityDescriptor;
    DWORD Attributes;
    DWORD Priority;
    DWORD DefaultPriority;
    DWORD StartTime;
    DWORD UntilTime;
    DWORD Status;
    DWORD cJobs;
    DWORD AveragePPM;
} PRINTER_INFO_2W, *PPRINTER_INFO_2W, *LPPRINTER_INFO_2W;

typedef struct _PRINTER_INFO_3 {
    PSECURITY_DESCRIPTOR pSecurityDescriptor;
} PRINTER_INFO_3, *PPRINTER_INFO_3, *LPPRINTER_INFO_3;

typedef struct _PRINTER_INFO_4A {
    LPSTR pPrinterName;
    LPSTR pServerName;
    DWORD Attributes;
} PRINTER_INFO_4A, *PPRINTER_INFO_4A, *LPPRINTER_INFO_4A;

typedef struct _PRINTER_INFO_4W {
    LPWSTR pPrinterName;
    LPWSTR pServerName;
    DWORD Attributes;
} PRINTER_INFO_4W, *PPRINTER_INFO_4W, *LPPRINTER_INFO_4W;

typedef struct _PRINTER_INFO_5A {
    LPSTR pPrinterName;
    LPSTR pPortName;
    DWORD Attributes;
    DWORD DeviceNotSelectedTimeout;
    DWORD TransmissionRetryTimeout;
} PRINTER_INFO_5A, *PPRINTER_INFO_5A, *LPPRINTER_INFO_5A;

typedef struct _PRINTER_INFO_5W {
    LPWSTR pPrinterName;
    LPWSTR pPortName;
    DWORD Attributes;
    DWORD DeviceNotSelectedTimeout;
    DWORD TransmissionRetryTimeout;
} PRINTER_INFO_5W, *PPRINTER_INFO_5W, *LPPRINTER_INFO_5W;

typedef struct _PRINTER_INFO_6 {
    DWORD dwStatus;
} PRINTER_INFO_6, *PPRINTER_INFO_6, *LPPRINTER_INFO_6;

typedef struct _PRINTER_INFO_7A {
    LPSTR pszObjectGUID;
    DWORD dwAction;
} PRINTER_INFO_7A, *PPRINTER_INFO_7A, *LPPRINTER_INFO_7A;

typedef struct _PRINTER_INFO_7W {
    LPWSTR pszObjectGUID;
    DWORD dwAction;
} PRINTER_INFO_7W, *PPRINTER_INFO_7W, *LPPRINTER_INFO_7W;

typedef struct _PRINTER_INFO_8A {
    LPDEVMODEA pDevMode;
} PRINTER_INFO_8A, *PPRINTER_INFO_8A, *LPPRINTER_INFO_8A;

typedef struct _PRINTER_INFO_8W {
    LPDEVMODEW pDevMode;
} PRINTER_INFO_8W, *PPRINTER_INFO_8W, *LPPRINTER_INFO_8W;

typedef struct _PRINTER_INFO_9A {
    LPDEVMODEA pDevMode;
} PRINTER_INFO_9A, *PPRINTER_INFO_9A, *LPPRINTER_INFO_9A;

typedef struct _PRINTER_INFO_9W {
    LPDEVMODEW pDevMode;
} PRINTER_INFO_9W, *PPRINTER_INFO_9W, *LPPRINTER_INFO_9W;

typedef struct _JOB_INFO_1A {
    DWORD JobId;
    LPSTR pPrinterName;
    LPSTR pMachineName;
    LPSTR pUserName;
    LPSTR pDocument;
    LPSTR pDatatype;
    LPSTR pStatus;
    DWORD Status;
    DWORD Priority;
    DWORD Position;
    DWORD TotalPages;
    DWORD PagesPrinted;
    SYSTEMTIME Submitted;
} JOB_INFO_1A, *PJOB_INFO_1A, *LPJOB_INFO_1A;

typedef struct _JOB_INFO_1W {
    DWORD JobId;
    LPWSTR pPrinterName;
    LPWSTR pMachineName;
    LPWSTR pUserName;
    LPWSTR pDocument;
    LPWSTR pDatatype;
    LPWSTR pStatus;
    DWORD Status;
    DWORD Priority;
    DWORD Position;
    DWORD TotalPages;
    DWORD PagesPrinted;
    SYSTEMTIME Submitted;
} JOB_INFO_1W, *PJOB_INFO_1W, *LPJOB_INFO_1W;

typedef struct _JOB_INFO_2A {
    DWORD JobId;
    LPSTR pPrinterName;
    LPSTR pMachineName;
    LPSTR pUserName;
    LPSTR pDocument;
    LPSTR pNotifyName;
    LPSTR pDatatype;
    LPSTR pPrintProcessor;
    LPSTR pParameters;
    LPSTR pDriverName;
    LPDEVMODEA pDevMode;
    LPSTR pStatus;
    PSECURITY_DESCRIPTOR pSecurityDescriptor;
    DWORD Status;
    DWORD Priority;
    DWORD Position;
    DWORD StartTime;
    DWORD UntilTime;
    DWORD TotalPages;
    DWORD Size;
    SYSTEMTIME Submitted;
    DWORD Time;
    DWORD PagesPrinted;
} JOB_INFO_2A, *PJOB_INFO_2A, *LPJOB_INFO_2A;

typedef struct _JOB_INFO_2W {
    DWORD JobId;
    LPWSTR pPrinterName;
    LPWSTR pMachineName;
    LPWSTR pUserName;
    LPWSTR pDocument;
    LPWSTR pNotifyName;
    LPWSTR pDatatype;
    LPWSTR pPrintProcessor;
    LPWSTR pParameters;
    LPWSTR pDriverName;
    LPDEVMODEW pDevMode;
    LPWSTR pStatus;
    PSECURITY_DESCRIPTOR pSecurityDescriptor;
    DWORD Status;
    DWORD Priority;
    DWORD Position;
    DWORD StartTime;
    DWORD UntilTime;
    DWORD TotalPages;
    DWORD Size;
    SYSTEMTIME Submitted;
    DWORD Time;
    DWORD PagesPrinted;
} JOB_INFO_2W, *PJOB_INFO_2W, *LPJOB_INFO_2W;

typedef struct _JOB_INFO_3 {
    DWORD JobId;
    DWORD NextJobId;
    DWORD Reserved;
} JOB_INFO_3, *PJOB_INFO_3, *LPJOB_INFO_3;

typedef struct _ADDJOB_INFO_1A {
    LPSTR Path;
    DWORD JobId;
} ADDJOB_INFO_1A, *PADDJOB_INFO_1A, *LPADDJOB_INFO_1A;

typedef struct _ADDJOB_INFO_1W {
    LPWSTR Path;
    DWORD JobId;
} ADDJOB_INFO_1W, *PADDJOB_INFO_1W, *LPADDJOB_INFO_1W;

typedef struct _DRIVER_INFO_1A {
    LPSTR pName;
} DRIVER_INFO_1A, *PDRIVER_INFO_1A, *LPDRIVER_INFO_1A;

typedef struct _DRIVER_INFO_1W {
    LPWSTR pName;
} DRIVER_INFO_1W, *PDRIVER_INFO_1W, *LPDRIVER_INFO_1W;

typedef struct _DRIVER_INFO_2A {
    DWORD cVersion;
    LPSTR pName;
    LPSTR pEnvironment;
    LPSTR pDriverPath;
    LPSTR pDataFile;
    LPSTR pConfigFile;
} DRIVER_INFO_2A, *PDRIVER_INFO_2A, *LPDRIVER_INFO_2A;

typedef struct _DRIVER_INFO_2W {
    DWORD cVersion;
    LPWSTR pName;
    LPWSTR pEnvironment;
    LPWSTR pDriverPath;
    LPWSTR pDataFile;
    LPWSTR pConfigFile;
} DRIVER_INFO_2W, *PDRIVER_INFO_2W, *LPDRIVER_INFO_2W;

typedef struct _DRIVER_INFO_3A {
    DWORD cVersion;
    LPSTR pName;
    LPSTR pEnvironment;
    LPSTR pDriverPath;
    LPSTR pDataFile;
    LPSTR pConfigFile;
    LPSTR pHelpFile;
    LPSTR pDependentFiles;
    LPSTR pMonitorName;
    LPSTR pDefaultDataType;
} DRIVER_INFO_3A, *PDRIVER_INFO_3A, *LPDRIVER_INFO_3A;

typedef struct _DRIVER_INFO_3W {
    DWORD cVersion;
    LPWSTR pName;
    LPWSTR pEnvironment;
    LPWSTR pDriverPath;
    LPWSTR pDataFile;
    LPWSTR pConfigFile;
    LPWSTR pHelpFile;
    LPWSTR pDependentFiles;
    LPWSTR pMonitorName;
    LPWSTR pDefaultDataType;
} DRIVER_INFO_3W, *PDRIVER_INFO_3W, *LPDRIVER_INFO_3W;

typedef struct _DRIVER_INFO_4A {
    DWORD cVersion;
    LPSTR pName;
    LPSTR pEnvironment;
    LPSTR pDriverPath;
    LPSTR pDataFile;
    LPSTR pConfigFile;
    LPSTR pHelpFile;
    LPSTR pDependentFiles;
    LPSTR pMonitorName;
    LPSTR pDefaultDataType;
    LPSTR pszzPreviousNames;
} DRIVER_INFO_4A, *PDRIVER_INFO_4A, *LPDRIVER_INFO_4A;

typedef struct _DRIVER_INFO_4W {
    DWORD cVersion;
    LPWSTR pName;
    LPWSTR pEnvironment;
    LPWSTR pDriverPath;
    LPWSTR pDataFile;
    LPWSTR pConfigFile;
    LPWSTR pHelpFile;
    LPWSTR pDependentFiles;
    LPWSTR pMonitorName;
    LPWSTR pDefaultDataType;
    LPWSTR pszzPreviousNames;
} DRIVER_INFO_4W, *PDRIVER_INFO_4W, *LPDRIVER_INFO_4W;

typedef struct _DRIVER_INFO_5A {
    DWORD cVersion;
    LPSTR pName;
    LPSTR pEnvironment;
    LPSTR pDriverPath;
    LPSTR pDataFile;
    LPSTR pConfigFile;
    DWORD dwDriverAttributes;
    DWORD dwConfigVersion;
    DWORD dwDriverVersion;
} DRIVER_INFO_5A, *PDRIVER_INFO_5A, *LPDRIVER_INFO_5A;

typedef struct _DRIVER_INFO_5W {
    DWORD cVersion;
    LPWSTR pName;
    LPWSTR pEnvironment;
    LPWSTR pDriverPath;
    LPWSTR pDataFile;
    LPWSTR pConfigFile;
    DWORD dwDriverAttributes;
    DWORD dwConfigVersion;
    DWORD dwDriverVersion;
} DRIVER_INFO_5W, *PDRIVER_INFO_5W, *LPDRIVER_INFO_5W;

typedef struct _DRIVER_INFO_6A {
    DWORD cVersion;
    LPSTR pName;
    LPSTR pEnvironment;
    LPSTR pDriverPath;
    LPSTR pDataFile;
    LPSTR pConfigFile;
    LPSTR pHelpFile;
    LPSTR pDependentFiles;
    LPSTR pMonitorName;
    LPSTR pDefaultDataType;
    LPSTR pszzPreviousNames;
    FILETIME ftDriverDate;
    DWORDLONG dwlDriverVersion;
    LPSTR pszMfgName;
    LPSTR pszOEMUrl;
    LPSTR pszHardwareID;
    LPSTR pszProvider;
} DRIVER_INFO_6A, *PDRIVER_INFO_6A, *LPDRIVER_INFO_6A;

typedef struct _DRIVER_INFO_6W {
    DWORD cVersion;
    LPWSTR pName;
    LPWSTR pEnvironment;
    LPWSTR pDriverPath;
    LPWSTR pDataFile;
    LPWSTR pConfigFile;
    LPWSTR pHelpFile;
    LPWSTR pDependentFiles;
    LPWSTR pMonitorName;
    LPWSTR pDefaultDataType;
    LPWSTR pszzPreviousNames;
    FILETIME ftDriverDate;
    DWORDLONG dwlDriverVersion;
    LPWSTR pszMfgName;
    LPWSTR pszOEMUrl;
    LPWSTR pszHardwareID;
    LPWSTR pszProvider;
} DRIVER_INFO_6W, *PDRIVER_INFO_6W, *LPDRIVER_INFO_6W;

typedef struct _DOC_INFO_1A {
    LPSTR pDocName;
    LPSTR pOutputFile;
    LPSTR pDatatype;
} DOC_INFO_1A, *PDOC_INFO_1A, *LPDOC_INFO_1A;

typedef struct _DOC_INFO_1W {
    LPWSTR pDocName;
    LPWSTR pOutputFile;
    LPWSTR pDatatype;
} DOC_INFO_1W, *PDOC_INFO_1W, *LPDOC_INFO_1W;

typedef struct _FORM_INFO_1A {
    DWORD Flags;
    LPSTR pName;
    SIZEL Size;
    RECTL ImageableArea;
} FORM_INFO_1A, *PFORM_INFO_1A, *LPFORM_INFO_1A;

typedef struct _FORM_INFO_1W {
    DWORD Flags;
    LPWSTR pName;
    SIZEL Size;
    RECTL ImageableArea;
} FORM_INFO_1W, *PFORM_INFO_1W, *LPFORM_INFO_1W;

typedef struct _DOC_INFO_2A {
    LPSTR pDocName;
    LPSTR pOutputFile;
    LPSTR pDatatype;
    DWORD dwMode;
    DWORD JobId;
} DOC_INFO_2A, *PDOC_INFO_2A, *LPDOC_INFO_2A;

typedef struct _DOC_INFO_2W {
    LPWSTR pDocName;
    LPWSTR pOutputFile;
    LPWSTR pDatatype;
    DWORD dwMode;
    DWORD JobId;
} DOC_INFO_2W, *PDOC_INFO_2W, *LPDOC_INFO_2W;

typedef struct _DOC_INFO_3A {
    LPSTR pDocName;
    LPSTR pOutputFile;
    LPSTR pDatatype;
    DWORD dwFlags;
} DOC_INFO_3A, *PDOC_INFO_3A, *LPDOC_INFO_3A;

typedef struct _DOC_INFO_3W {
    LPWSTR pDocName;
    LPWSTR pOutputFile;
    LPWSTR pDatatype;
    DWORD dwFlags;
} DOC_INFO_3W, *PDOC_INFO_3W, *LPDOC_INFO_3W;

typedef struct _PRINTPROCESSOR_INFO_1A {
    LPSTR pName;
} PRINTPROCESSOR_INFO_1A, *PPRINTPROCESSOR_INFO_1A, *LPPRINTPROCESSOR_INFO_1A;

typedef struct _PRINTPROCESSOR_INFO_1W {
    LPWSTR pName;
} PRINTPROCESSOR_INFO_1W, *PPRINTPROCESSOR_INFO_1W, *LPPRINTPROCESSOR_INFO_1W;

typedef struct _PORT_INFO_1A {
    LPSTR pName;
} PORT_INFO_1A, *PPORT_INFO_1A, *LPPORT_INFO_1A;

typedef struct _PORT_INFO_1W {
    LPWSTR pName;
} PORT_INFO_1W, *PPORT_INFO_1W, *LPPORT_INFO_1W;

typedef struct _PORT_INFO_2A {
    LPSTR pPortName;
    LPSTR pMonitorName;
    LPSTR pDescription;
    DWORD fPortType;
    DWORD Reserved;
} PORT_INFO_2A, *PPORT_INFO_2A, *LPPORT_INFO_2A;

typedef struct _PORT_INFO_2W {
    LPWSTR pPortName;
    LPWSTR pMonitorName;
    LPWSTR pDescription;
    DWORD fPortType;
    DWORD Reserved;
} PORT_INFO_2W, *PPORT_INFO_2W, *LPPORT_INFO_2W;

typedef struct _PORT_INFO_3A {
    DWORD dwStatus;
    LPSTR pszStatus;
    DWORD dwSeverity;
} PORT_INFO_3A, *PPORT_INFO_3A, *LPPORT_INFO_3A;

typedef struct _PORT_INFO_3W {
    DWORD dwStatus;
    LPWSTR pszStatus;
    DWORD dwSeverity;
} PORT_INFO_3W, *PPORT_INFO_3W, *LPPORT_INFO_3W;

typedef struct _MONITOR_INFO_1A {
    LPSTR pName;
} MONITOR_INFO_1A, *PMONITOR_INFO_1A, *LPMONITOR_INFO_1A;

typedef struct _MONITOR_INFO_1W {
    LPWSTR pName;
} MONITOR_INFO_1W, *PMONITOR_INFO_1W, *LPMONITOR_INFO_1W;

typedef struct _MONITOR_INFO_2A {
    LPSTR pName;
    LPSTR pEnvironment;
    LPSTR pDLLName;
} MONITOR_INFO_2A, *PMONITOR_INFO_2A, *LPMONITOR_INFO_2A;

typedef struct _MONITOR_INFO_2W {
    LPWSTR pName;
    LPWSTR pEnvironment;
    LPWSTR pDLLName;
} MONITOR_INFO_2W, *PMONITOR_INFO_2W, *LPMONITOR_INFO_2W;

typedef struct _DATATYPES_INFO_1A {
    LPSTR pName;
} DATATYPES_INFO_1A, *PDATATYPES_INFO_1A, *LPDATATYPES_INFO_1A;

typedef struct _DATATYPES_INFO_1W {
    LPWSTR pName;
} DATATYPES_INFO_1W, *PDATATYPES_INFO_1W, *LPDATATYPES_INFO_1W;

typedef struct _PRINTER_DEFAULTSA {
    LPSTR pDatatype;
    LPDEVMODEA pDevMode;
    ACCESS_MASK DesiredAccess;
} PRINTER_DEFAULTSA, *PPRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA;

typedef struct _PRINTER_DEFAULTSW {
    LPWSTR pDatatype;
    LPDEVMODEW pDevMode;
    ACCESS_MASK DesiredAccess;
} PRINTER_DEFAULTSW, *PPRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW;

typedef struct _PRINTER_ENUM_VALUESA {
    LPSTR pValueName;
    DWORD cbValueName;
    DWORD dwType;
    LPBYTE pData;
    DWORD cbData;
} PRINTER_ENUM_VALUESA, *PPRINTER_ENUM_VALUESA, *LPPRINTER_ENUM_VALUESA;

typedef struct _PRINTER_ENUM_VALUESW {
    LPWSTR pValueName;
    DWORD cbValueName;
    DWORD dwType;
    LPBYTE pData;
    DWORD cbData;
} PRINTER_ENUM_VALUESW, *PPRINTER_ENUM_VALUESW, *LPPRINTER_ENUM_VALUESW;

typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE {
    WORD Type;
    WORD Reserved0;
    DWORD Reserved1;
    DWORD Reserved2;
    DWORD Count;
    PWORD pFields;
} PRINTER_NOTIFY_OPTIONS_TYPE, *PPRINTER_NOTIFY_OPTIONS_TYPE, *LPPRINTER_NOTIFY_OPTIONS_TYPE;

typedef struct _PRINTER_NOTIFY_OPTIONS {
    DWORD Version;
    DWORD Flags;
    DWORD Count;
    PPRINTER_NOTIFY_OPTIONS_TYPE pTypes;
} PRINTER_NOTIFY_OPTIONS, *PPRINTER_NOTIFY_OPTIONS, *LPPRINTER_NOTIFY_OPTIONS;

typedef struct _PRINTER_NOTIFY_INFO_DATA {
    WORD Type;
    WORD Field;
    DWORD Reserved;
    DWORD Id;
    union {
        DWORD adwData[2];
        struct {
            DWORD cbBuf;
            LPVOID pBuf;
        } Data;
    } NotifyData;
} PRINTER_NOTIFY_INFO_DATA, *PPRINTER_NOTIFY_INFO_DATA, *LPPRINTER_NOTIFY_INFO_DATA;

typedef struct _PRINTER_NOTIFY_INFO {
    DWORD Version;
    DWORD Flags;
    DWORD Count;
    PRINTER_NOTIFY_INFO_DATA aData[1];
} PRINTER_NOTIFY_INFO, *PPRINTER_NOTIFY_INFO, *LPPRINTER_NOTIFY_INFO;

typedef struct _PROVIDOR_INFO_1A {
    LPSTR pName;
    LPSTR pEnvironment;
    LPSTR pDLLName;
} PROVIDOR_INFO_1A, *PPROVIDOR_INFO_1A, *LPPROVIDOR_INFO_1A;

typedef struct _PROVIDOR_INFO_1W {
    LPWSTR pName;
    LPWSTR pEnvironment;
    LPWSTR pDLLName;
} PROVIDOR_INFO_1W, *PPROVIDOR_INFO_1W, *LPPROVIDOR_INFO_1W;

typedef struct _PROVIDOR_INFO_2A {
    LPSTR pOrder;
} PROVIDOR_INFO_2A, *PPROVIDOR_INFO_2A, *LPPROVIDOR_INFO_2A;

typedef struct _PROVIDOR_INFO_2W {
    LPWSTR pOrder;
} PROVIDOR_INFO_2W, *PPROVIDOR_INFO_2W, *LPPROVIDOR_INFO_2W;

BOOL WINAPI EnumPrintersA(DWORD,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI EnumPrintersW(DWORD,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI OpenPrinterA(LPSTR,LPHANDLE,LPPRINTER_DEFAULTSA);
BOOL WINAPI OpenPrinterW(LPWSTR,LPHANDLE,LPPRINTER_DEFAULTSW);
BOOL WINAPI ResetPrinterA(HANDLE,LPPRINTER_DEFAULTSA);
BOOL WINAPI ResetPrinterW(HANDLE,LPPRINTER_DEFAULTSW);
BOOL WINAPI SetJobA(HANDLE,DWORD,DWORD,LPBYTE,DWORD);
BOOL WINAPI SetJobW(HANDLE,DWORD,DWORD,LPBYTE,DWORD);
BOOL WINAPI GetJobA(HANDLE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI GetJobW(HANDLE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI EnumJobsA(HANDLE,DWORD,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI EnumJobsW(HANDLE,DWORD,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
HANDLE WINAPI AddPrinterA(LPSTR,DWORD,LPBYTE);
HANDLE WINAPI AddPrinterW(LPWSTR,DWORD,LPBYTE);
BOOL WINAPI DeletePrinter(HANDLE);
BOOL WINAPI SetPrinterA(HANDLE,DWORD,LPBYTE,DWORD);
BOOL WINAPI SetPrinterW(HANDLE,DWORD,LPBYTE,DWORD);
BOOL WINAPI GetPrinterA(HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI GetPrinterW(HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI AddPrinterDriverA(LPSTR,DWORD,LPBYTE);
BOOL WINAPI AddPrinterDriverW(LPWSTR,DWORD,LPBYTE);
BOOL WINAPI AddPrinterDriverExA(LPSTR,DWORD,LPBYTE,DWORD);
BOOL WINAPI AddPrinterDriverExW(LPWSTR,DWORD,LPBYTE,DWORD);
BOOL WINAPI EnumPrinterDriversA(LPSTR,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI EnumPrinterDriversW(LPWSTR,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI GetPrinterDriverA(HANDLE,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI GetPrinterDriverW(HANDLE,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI GetPrinterDriverDirectoryA(LPSTR,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI GetPrinterDriverDirectoryW(LPWSTR,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI DeletePrinterDriverA(LPSTR,LPSTR,LPSTR);
BOOL WINAPI DeletePrinterDriverW(LPWSTR,LPWSTR,LPWSTR);
BOOL WINAPI DeletePrinterDriverExA(LPSTR,LPSTR,LPSTR,DWORD,DWORD);
BOOL WINAPI DeletePrinterDriverExW(LPWSTR,LPWSTR,LPWSTR,DWORD,DWORD);
BOOL WINAPI AddPrintProcessorA(LPSTR,LPSTR,LPSTR,LPSTR);
BOOL WINAPI AddPrintProcessorW(LPWSTR,LPWSTR,LPWSTR,LPWSTR);
BOOL WINAPI EnumPrintProcessorsA(LPSTR,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI EnumPrintProcessorsW(LPWSTR,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI GetPrintProcessorDirectoryA(LPSTR,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI GetPrintProcessorDirectoryW(LPWSTR,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI EnumPrintProcessorDatatypesA(LPSTR,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI EnumPrintProcessorDatatypesW(LPWSTR,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI DeletePrintProcessorA(LPSTR,LPSTR,LPSTR);
BOOL WINAPI DeletePrintProcessorW(LPWSTR,LPWSTR,LPWSTR);
DWORD WINAPI StartDocPrinterA(HANDLE,DWORD,LPBYTE);
DWORD WINAPI StartDocPrinterW(HANDLE,DWORD,LPBYTE);
BOOL WINAPI StartPagePrinter(HANDLE);
BOOL WINAPI WritePrinter(HANDLE,LPVOID,DWORD,LPDWORD);
BOOL WINAPI FlushPrinter(HANDLE,LPVOID,DWORD,LPDWORD,DWORD);
BOOL WINAPI EndPagePrinter(HANDLE);
BOOL WINAPI AbortPrinter(HANDLE);
BOOL WINAPI ReadPrinter(HANDLE,LPVOID,DWORD,LPDWORD);
BOOL WINAPI EndDocPrinter(HANDLE);
BOOL WINAPI AddJobA(HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI AddJobW(HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI ScheduleJob(HANDLE,DWORD);
BOOL WINAPI PrinterProperties(HWND,HANDLE);
LONG WINAPI DocumentPropertiesA(HWND,HANDLE,LPSTR,PDEVMODEA,PDEVMODEA,DWORD);
LONG WINAPI DocumentPropertiesW(HWND,HANDLE,LPWSTR,PDEVMODEW,PDEVMODEW,DWORD);
LONG WINAPI AdvancedDocumentPropertiesA(HWND,HANDLE,LPSTR,PDEVMODEA,PDEVMODEA);
LONG WINAPI AdvancedDocumentPropertiesW(HWND,HANDLE,LPWSTR,PDEVMODEW,PDEVMODEW);
DWORD WINAPI GetPrinterDataA(HANDLE,LPSTR,LPDWORD,LPBYTE,DWORD,LPDWORD);
DWORD WINAPI GetPrinterDataW(HANDLE,LPWSTR,LPDWORD,LPBYTE,DWORD,LPDWORD);
DWORD WINAPI GetPrinterDataExA(HANDLE,LPCSTR,LPCSTR,LPDWORD,LPBYTE,DWORD,LPDWORD);
DWORD WINAPI GetPrinterDataExW(HANDLE,LPCWSTR,LPCWSTR,LPDWORD,LPBYTE,DWORD,LPDWORD);
DWORD WINAPI EnumPrinterDataA(HANDLE,DWORD,LPSTR,DWORD,LPDWORD,LPDWORD,LPBYTE,DWORD,LPDWORD);
DWORD WINAPI EnumPrinterDataW(HANDLE,DWORD,LPWSTR,DWORD,LPDWORD,LPDWORD,LPBYTE,DWORD,LPDWORD);
DWORD WINAPI EnumPrinterDataExA(HANDLE,LPCSTR,LPBYTE,DWORD,LPDWORD,LPDWORD);
DWORD WINAPI EnumPrinterDataExW(HANDLE,LPCWSTR,LPBYTE,DWORD,LPDWORD,LPDWORD);
DWORD WINAPI EnumPrinterKeyA(HANDLE,LPCSTR,LPSTR,DWORD,LPDWORD);
DWORD WINAPI EnumPrinterKeyW(HANDLE,LPCWSTR,LPWSTR,DWORD,LPDWORD);
DWORD WINAPI SetPrinterDataA(HANDLE,LPSTR,DWORD,LPBYTE,DWORD);
DWORD WINAPI SetPrinterDataW(HANDLE,LPWSTR,DWORD,LPBYTE,DWORD);
DWORD WINAPI SetPrinterDataExA(HANDLE,LPCSTR,LPCSTR,DWORD,LPBYTE,DWORD);
DWORD WINAPI SetPrinterDataExW(HANDLE,LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD);
DWORD WINAPI DeletePrinterDataA(HANDLE,LPSTR);
DWORD WINAPI DeletePrinterDataW(HANDLE,LPWSTR);
DWORD WINAPI DeletePrinterDataExA(HANDLE,LPCSTR,LPCSTR);
DWORD WINAPI DeletePrinterDataExW(HANDLE,LPCWSTR,LPCWSTR);
DWORD WINAPI DeletePrinterKeyA(HANDLE,LPCSTR);
DWORD WINAPI DeletePrinterKeyW(HANDLE,LPCWSTR);
DWORD WINAPI WaitForPrinterChange(HANDLE,DWORD);
HANDLE WINAPI FindFirstPrinterChangeNotification(HANDLE,DWORD,DWORD,LPVOID);
BOOL WINAPI FindNextPrinterChangeNotification(HANDLE,PDWORD,LPVOID,LPVOID*);
BOOL WINAPI FreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO);
BOOL WINAPI FindClosePrinterChangeNotification(HANDLE);
DWORD WINAPI PrinterMessageBoxA(HANDLE,DWORD,HWND,LPSTR,LPSTR,DWORD);
DWORD WINAPI PrinterMessageBoxW(HANDLE,DWORD,HWND,LPWSTR,LPWSTR,DWORD);
BOOL WINAPI ClosePrinter(HANDLE);
BOOL WINAPI AddFormA(HANDLE,DWORD,LPBYTE);
BOOL WINAPI AddFormW(HANDLE,DWORD,LPBYTE);
BOOL WINAPI DeleteFormA(HANDLE,LPSTR);
BOOL WINAPI DeleteFormW(HANDLE,LPWSTR);
BOOL WINAPI GetFormA(HANDLE,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI GetFormW(HANDLE,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI SetFormA(HANDLE,LPSTR,DWORD,LPBYTE);
BOOL WINAPI SetFormW(HANDLE,LPWSTR,DWORD,LPBYTE);
BOOL WINAPI EnumFormsA(HANDLE,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI EnumFormsW(HANDLE,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI EnumMonitorsA(LPSTR,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI EnumMonitorsW(LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI AddMonitorA(LPSTR,DWORD,LPBYTE);
BOOL WINAPI AddMonitorW(LPWSTR,DWORD,LPBYTE);
BOOL WINAPI DeleteMonitorA(LPSTR,LPSTR,LPSTR);
BOOL WINAPI DeleteMonitorW(LPWSTR,LPWSTR,LPWSTR);
BOOL WINAPI EnumPortsA(LPSTR,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI EnumPortsW(LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD);
BOOL WINAPI AddPortA(LPSTR,HWND,LPSTR);
BOOL WINAPI AddPortW(LPWSTR,HWND,LPWSTR);
BOOL WINAPI ConfigurePortA(LPSTR,HWND,LPSTR);
BOOL WINAPI ConfigurePortW(LPWSTR,HWND,LPWSTR);
BOOL WINAPI DeletePortA(LPSTR,HWND,LPSTR);
BOOL WINAPI DeletePortW(LPWSTR,HWND,LPWSTR);
BOOL WINAPI XcvDataW(HANDLE,PCWSTR,PBYTE,DWORD,PBYTE,DWORD,PDWORD,PDWORD);
#define XcvData  XcvDataW
BOOL WINAPI GetDefaultPrinterA(LPSTR,LPDWORD);
BOOL WINAPI GetDefaultPrinterW(LPWSTR,LPDWORD);
BOOL WINAPI SetDefaultPrinterA(LPCSTR);
BOOL WINAPI SetDefaultPrinterW(LPCWSTR);
BOOL WINAPI SetPortA(LPSTR,LPSTR,DWORD,LPBYTE);
BOOL WINAPI SetPortW(LPWSTR,LPWSTR,DWORD,LPBYTE);
BOOL WINAPI AddPrinterConnectionA(LPSTR);
BOOL WINAPI AddPrinterConnectionW(LPWSTR);
BOOL WINAPI DeletePrinterConnectionA(LPSTR);
BOOL WINAPI DeletePrinterConnectionW(LPWSTR);
HANDLE WINAPI ConnectToPrinterDlg(HWND, DWORD);
BOOL WINAPI AddPrintProvidorA(LPSTR,DWORD,LPBYTE);
BOOL WINAPI AddPrintProvidorW(LPWSTR,DWORD,LPBYTE);
BOOL WINAPI DeletePrintProvidorA(LPSTR,LPSTR,LPSTR);
BOOL WINAPI DeletePrintProvidorW(LPWSTR,LPWSTR,LPWSTR);

#ifdef UNICODE
typedef PRINTER_INFO_1W PRINTER_INFO_1;
typedef PPRINTER_INFO_1W PPRINTER_INFO_1;
typedef LPPRINTER_INFO_1W LPPRINTER_INFO_1;
typedef PRINTER_INFO_2W PRINTER_INFO_2;
typedef PPRINTER_INFO_2W PPRINTER_INFO_2;
typedef LPPRINTER_INFO_2W LPPRINTER_INFO_2;
typedef PRINTER_INFO_4W PRINTER_INFO_4;
typedef PPRINTER_INFO_4W PPRINTER_INFO_4;
typedef LPPRINTER_INFO_4W LPPRINTER_INFO_4;
typedef PRINTER_INFO_5W PRINTER_INFO_5;
typedef PPRINTER_INFO_5W PPRINTER_INFO_5;
typedef LPPRINTER_INFO_5W LPPRINTER_INFO_5;
typedef PRINTER_INFO_7W PRINTER_INFO_7;
typedef PPRINTER_INFO_7W PPRINTER_INFO_7;
typedef LPPRINTER_INFO_7W LPPRINTER_INFO_7;
typedef PRINTER_INFO_8W PRINTER_INFO_8;
typedef PPRINTER_INFO_8W PPRINTER_INFO_8;
typedef LPPRINTER_INFO_8W LPPRINTER_INFO_8;
typedef PRINTER_INFO_9W PRINTER_INFO_9;
typedef PPRINTER_INFO_9W PPRINTER_INFO_9;
typedef LPPRINTER_INFO_9W LPPRINTER_INFO_9;
typedef JOB_INFO_1W JOB_INFO_1;
typedef PJOB_INFO_1W PJOB_INFO_1;
typedef LPJOB_INFO_1W LPJOB_INFO_1;
typedef JOB_INFO_2W JOB_INFO_2;
typedef PJOB_INFO_2W PJOB_INFO_2;
typedef LPJOB_INFO_2W LPJOB_INFO_2;
typedef ADDJOB_INFO_1W ADDJOB_INFO_1;
typedef PADDJOB_INFO_1W PADDJOB_INFO_1;
typedef LPADDJOB_INFO_1W LPADDJOB_INFO_1;
typedef DRIVER_INFO_1W DRIVER_INFO_1;
typedef PDRIVER_INFO_1W PDRIVER_INFO_1;
typedef LPDRIVER_INFO_1W LPDRIVER_INFO_1;
typedef DRIVER_INFO_2W DRIVER_INFO_2;
typedef PDRIVER_INFO_2W PDRIVER_INFO_2;
typedef LPDRIVER_INFO_2W LPDRIVER_INFO_2;
typedef DRIVER_INFO_3W DRIVER_INFO_3;
typedef PDRIVER_INFO_3W PDRIVER_INFO_3;
typedef LPDRIVER_INFO_3W LPDRIVER_INFO_3;
typedef DRIVER_INFO_4W DRIVER_INFO_4;
typedef PDRIVER_INFO_4W PDRIVER_INFO_4;
typedef LPDRIVER_INFO_4W LPDRIVER_INFO_4;
typedef DRIVER_INFO_5W DRIVER_INFO_5;
typedef PDRIVER_INFO_5W PDRIVER_INFO_5;
typedef LPDRIVER_INFO_5W LPDRIVER_INFO_5;
typedef DRIVER_INFO_6W DRIVER_INFO_6;
typedef PDRIVER_INFO_6W PDRIVER_INFO_6;
typedef LPDRIVER_INFO_6W LPDRIVER_INFO_6;
typedef DOC_INFO_1W DOC_INFO_1;
typedef PDOC_INFO_1W PDOC_INFO_1;
typedef LPDOC_INFO_1W LPDOC_INFO_1;
typedef FORM_INFO_1W FORM_INFO_1;
typedef PFORM_INFO_1W PFORM_INFO_1;
typedef LPFORM_INFO_1W LPFORM_INFO_1;
typedef DOC_INFO_2W DOC_INFO_2;
typedef PDOC_INFO_2W PDOC_INFO_2;
typedef LPDOC_INFO_2W LPDOC_INFO_2;
typedef DOC_INFO_3W DOC_INFO_3;
typedef PDOC_INFO_3W PDOC_INFO_3;
typedef LPDOC_INFO_3W LPDOC_INFO_3;
typedef PRINTPROCESSOR_INFO_1W PRINTPROCESSOR_INFO_1;
typedef PPRINTPROCESSOR_INFO_1W PPRINTPROCESSOR_INFO_1;
typedef LPPRINTPROCESSOR_INFO_1W LPPRINTPROCESSOR_INFO_1;
typedef PORT_INFO_1W PORT_INFO_1;
typedef PPORT_INFO_1W PPORT_INFO_1;
typedef LPPORT_INFO_1W LPPORT_INFO_1;
typedef PORT_INFO_2W PORT_INFO_2;
typedef PPORT_INFO_2W PPORT_INFO_2;
typedef LPPORT_INFO_2W LPPORT_INFO_2;
typedef PORT_INFO_3W PORT_INFO_3;
typedef PPORT_INFO_3W PPORT_INFO_3;
typedef LPPORT_INFO_3W LPPORT_INFO_3;
typedef MONITOR_INFO_1W MONITOR_INFO_1;
typedef PMONITOR_INFO_1W PMONITOR_INFO_1;
typedef LPMONITOR_INFO_1W LPMONITOR_INFO_1;
typedef MONITOR_INFO_2W MONITOR_INFO_2;
typedef PMONITOR_INFO_2W PMONITOR_INFO_2;
typedef LPMONITOR_INFO_2W LPMONITOR_INFO_2;
typedef DATATYPES_INFO_1W DATATYPES_INFO_1;
typedef PDATATYPES_INFO_1W PDATATYPES_INFO_1;
typedef LPDATATYPES_INFO_1W LPDATATYPES_INFO_1;
typedef PRINTER_DEFAULTSW PRINTER_DEFAULTS;
typedef PPRINTER_DEFAULTSW PPRINTER_DEFAULTS;
typedef LPPRINTER_DEFAULTSW LPPRINTER_DEFAULTS;
typedef PRINTER_ENUM_VALUESW PRINTER_ENUM_VALUES;
typedef PPRINTER_ENUM_VALUESW PPRINTER_ENUM_VALUES;
typedef LPPRINTER_ENUM_VALUESW LPPRINTER_ENUM_VALUES;
typedef PROVIDOR_INFO_1W PROVIDOR_INFO_1;
typedef PPROVIDOR_INFO_1W PPROVIDOR_INFO_1;
typedef LPPROVIDOR_INFO_1W LPPROVIDOR_INFO_1;
typedef PROVIDOR_INFO_2W PROVIDOR_INFO_2;
typedef PPROVIDOR_INFO_2W PPROVIDOR_INFO_2;
typedef LPPROVIDOR_INFO_2W LPPROVIDOR_INFO_2;
#define EnumPrinters EnumPrintersW
#define OpenPrinter OpenPrinterW
#define ResetPrinter ResetPrinterW
#define SetJob SetJobW
#define GetJob GetJobW
#define EnumJobs EnumJobsW
#define AddPrinter AddPrinterW
#define SetPrinter SetPrinterW
#define GetPrinter GetPrinterW
#define AddPrinterDriver AddPrinterDriverW
#define AddPrinterDriverEx AddPrinterDriverExW
#define EnumPrinterDrivers EnumPrinterDriversW
#define GetPrinterDriver GetPrinterDriverW
#define GetPrinterDriverDirectory GetPrinterDriverDirectoryW
#define DeletePrinterDriver DeletePrinterDriverW
#define DeletePrinterDriverEx DeletePrinterDriverExW
#define AddPrintProcessor AddPrintProcessorW
#define EnumPrintProcessors EnumPrintProcessorsW
#define GetPrintProcessorDirectory GetPrintProcessorDirectoryW
#define EnumPrintProcessorDatatypes EnumPrintProcessorDatatypesW
#define DeletePrintProcessor DeletePrintProcessorW
#define StartDocPrinter StartDocPrinterW
#define AddJob AddJobW
#define DocumentProperties DocumentPropertiesW
#define AdvancedDocumentProperties AdvancedDocumentPropertiesW
#define GetPrinterData GetPrinterDataW
#define GetPrinterDataEx GetPrinterDataExW
#define EnumPrinterData EnumPrinterDataW
#define EnumPrinterDataEx EnumPrinterDataExW
#define EnumPrinterKey EnumPrinterKeyW
#define SetPrinterData SetPrinterDataW
#define SetPrinterDataEx SetPrinterDataExW
#define DeletePrinterData DeletePrinterDataW
#define DeletePrinterDataEx DeletePrinterDataExW
#define DeletePrinterKey DeletePrinterKeyW
#define PrinterMessageBox PrinterMessageBoxW
#define AddForm AddFormW
#define DeleteForm DeleteFormW
#define GetForm GetFormW
#define SetForm SetFormW
#define EnumForms EnumFormsW
#define EnumMonitors EnumMonitorsW
#define AddMonitor AddMonitorW
#define DeleteMonitor DeleteMonitorW
#define EnumPorts EnumPortsW
#define AddPort AddPortW
#define ConfigurePort ConfigurePortW
#define DeletePort DeletePortW
#define GetDefaultPrinter GetDefaultPrinterW
#define SetDefaultPrinter SetDefaultPrinterW
#define SetPort SetPortW
#define AddPrinterConnection AddPrinterConnectionW
#define DeletePrinterConnection DeletePrinterConnectionW
#define AddPrintProvidor AddPrintProvidorW
#define DeletePrintProvidor DeletePrintProvidorW
#else
typedef PRINTER_INFO_1A PRINTER_INFO_1;
typedef PPRINTER_INFO_1A PPRINTER_INFO_1;
typedef LPPRINTER_INFO_1A LPPRINTER_INFO_1;
typedef PRINTER_INFO_2A PRINTER_INFO_2;
typedef PPRINTER_INFO_2A PPRINTER_INFO_2;
typedef LPPRINTER_INFO_2A LPPRINTER_INFO_2;
typedef PRINTER_INFO_4A PRINTER_INFO_4;
typedef PPRINTER_INFO_4A PPRINTER_INFO_4;
typedef LPPRINTER_INFO_4A LPPRINTER_INFO_4;
typedef PRINTER_INFO_5A PRINTER_INFO_5;
typedef PPRINTER_INFO_5A PPRINTER_INFO_5;
typedef LPPRINTER_INFO_5A LPPRINTER_INFO_5;
typedef PRINTER_INFO_7W PRINTER_INFO_7;
typedef PPRINTER_INFO_7W PPRINTER_INFO_7;
typedef LPPRINTER_INFO_7W LPPRINTER_INFO_7;
typedef PRINTER_INFO_8A PRINTER_INFO_8;
typedef PPRINTER_INFO_8A PPRINTER_INFO_8;
typedef LPPRINTER_INFO_8A LPPRINTER_INFO_8;
typedef PRINTER_INFO_9A PRINTER_INFO_9;
typedef PPRINTER_INFO_9A PPRINTER_INFO_9;
typedef LPPRINTER_INFO_9A LPPRINTER_INFO_9;
typedef JOB_INFO_1A JOB_INFO_1;
typedef PJOB_INFO_1A PJOB_INFO_1;
typedef LPJOB_INFO_1A LPJOB_INFO_1;
typedef JOB_INFO_2A JOB_INFO_2;
typedef PJOB_INFO_2A PJOB_INFO_2;
typedef LPJOB_INFO_2A LPJOB_INFO_2;
typedef ADDJOB_INFO_1A ADDJOB_INFO_1;
typedef PADDJOB_INFO_1A PADDJOB_INFO_1;
typedef LPADDJOB_INFO_1A LPADDJOB_INFO_1;
typedef DRIVER_INFO_1A DRIVER_INFO_1;
typedef PDRIVER_INFO_1A PDRIVER_INFO_1;
typedef LPDRIVER_INFO_1A LPDRIVER_INFO_1;
typedef DRIVER_INFO_2A DRIVER_INFO_2;
typedef PDRIVER_INFO_2A PDRIVER_INFO_2;
typedef LPDRIVER_INFO_2A LPDRIVER_INFO_2;
typedef DRIVER_INFO_3A DRIVER_INFO_3;
typedef PDRIVER_INFO_3A PDRIVER_INFO_3;
typedef LPDRIVER_INFO_3A LPDRIVER_INFO_3;
typedef DRIVER_INFO_4A DRIVER_INFO_4;
typedef PDRIVER_INFO_4A PDRIVER_INFO_4;
typedef LPDRIVER_INFO_4A LPDRIVER_INFO_4;
typedef DRIVER_INFO_5A DRIVER_INFO_5;
typedef PDRIVER_INFO_5A PDRIVER_INFO_5;
typedef LPDRIVER_INFO_5A LPDRIVER_INFO_5;
typedef DRIVER_INFO_6A DRIVER_INFO_6;
typedef PDRIVER_INFO_6A PDRIVER_INFO_6;
typedef LPDRIVER_INFO_6A LPDRIVER_INFO_6;
typedef DOC_INFO_1A DOC_INFO_1;
typedef PDOC_INFO_1A PDOC_INFO_1;
typedef LPDOC_INFO_1A LPDOC_INFO_1;
typedef FORM_INFO_1A FORM_INFO_1;
typedef PFORM_INFO_1A PFORM_INFO_1;
typedef LPFORM_INFO_1A LPFORM_INFO_1;
typedef DOC_INFO_2A DOC_INFO_2;
typedef PDOC_INFO_2A PDOC_INFO_2;
typedef LPDOC_INFO_2A LPDOC_INFO_2;
typedef DOC_INFO_3A DOC_INFO_3;
typedef PDOC_INFO_3A PDOC_INFO_3;
typedef LPDOC_INFO_3A LPDOC_INFO_3;
typedef PRINTPROCESSOR_INFO_1A PRINTPROCESSOR_INFO_1;
typedef PPRINTPROCESSOR_INFO_1A PPRINTPROCESSOR_INFO_1;
typedef LPPRINTPROCESSOR_INFO_1A LPPRINTPROCESSOR_INFO_1;
typedef PORT_INFO_1A PORT_INFO_1;
typedef PPORT_INFO_1A PPORT_INFO_1;
typedef LPPORT_INFO_1A LPPORT_INFO_1;
typedef PORT_INFO_2A PORT_INFO_2;
typedef PPORT_INFO_2A PPORT_INFO_2;
typedef LPPORT_INFO_2A LPPORT_INFO_2;
typedef PORT_INFO_3A PORT_INFO_3;
typedef PPORT_INFO_3A PPORT_INFO_3;
typedef LPPORT_INFO_3A LPPORT_INFO_3;
typedef MONITOR_INFO_1A MONITOR_INFO_1;
typedef PMONITOR_INFO_1A PMONITOR_INFO_1;
typedef LPMONITOR_INFO_1A LPMONITOR_INFO_1;
typedef MONITOR_INFO_2A MONITOR_INFO_2;
typedef PMONITOR_INFO_2A PMONITOR_INFO_2;
typedef LPMONITOR_INFO_2A LPMONITOR_INFO_2;
typedef DATATYPES_INFO_1A DATATYPES_INFO_1;
typedef PDATATYPES_INFO_1A PDATATYPES_INFO_1;
typedef LPDATATYPES_INFO_1A LPDATATYPES_INFO_1;
typedef PRINTER_DEFAULTSA PRINTER_DEFAULTS;
typedef PPRINTER_DEFAULTSA PPRINTER_DEFAULTS;
typedef LPPRINTER_DEFAULTSA LPPRINTER_DEFAULTS;
typedef PRINTER_ENUM_VALUESA PRINTER_ENUM_VALUES;
typedef PPRINTER_ENUM_VALUESA PPRINTER_ENUM_VALUES;
typedef LPPRINTER_ENUM_VALUESA LPPRINTER_ENUM_VALUES;
typedef PROVIDOR_INFO_1A PROVIDOR_INFO_1;
typedef PPROVIDOR_INFO_1A PPROVIDOR_INFO_1;
typedef LPPROVIDOR_INFO_1A LPPROVIDOR_INFO_1;
typedef PROVIDOR_INFO_2A PROVIDOR_INFO_2;
typedef PPROVIDOR_INFO_2A PPROVIDOR_INFO_2;
typedef LPPROVIDOR_INFO_2A LPPROVIDOR_INFO_2;
#define EnumPrinters EnumPrintersA
#define OpenPrinter OpenPrinterA
#define ResetPrinter ResetPrinterA
#define SetJob SetJobA
#define GetJob GetJobA
#define EnumJobs EnumJobsA
#define AddPrinter AddPrinterA
#define SetPrinter SetPrinterA
#define GetPrinter GetPrinterA
#define AddPrinterDriver AddPrinterDriverA
#define AddPrinterDriverEx AddPrinterDriverExA
#define EnumPrinterDrivers EnumPrinterDriversA
#define GetPrinterDriver GetPrinterDriverA
#define GetPrinterDriverDirectory GetPrinterDriverDirectoryA
#define DeletePrinterDriver DeletePrinterDriverA
#define DeletePrinterDriverEx DeletePrinterDriverExA
#define AddPrintProcessor AddPrintProcessorA
#define EnumPrintProcessors EnumPrintProcessorsA
#define GetPrintProcessorDirectory GetPrintProcessorDirectoryA
#define EnumPrintProcessorDatatypes EnumPrintProcessorDatatypesA
#define DeletePrintProcessor DeletePrintProcessorA
#define StartDocPrinter StartDocPrinterA
#define AddJob AddJobA
#define DocumentProperties DocumentPropertiesA
#define AdvancedDocumentProperties AdvancedDocumentPropertiesA
#define GetPrinterData GetPrinterDataA
#define GetPrinterDataEx GetPrinterDataExA
#define EnumPrinterData EnumPrinterDataA
#define EnumPrinterDataEx EnumPrinterDataExA
#define EnumPrinterKey EnumPrinterKeyA
#define SetPrinterData SetPrinterDataA
#define SetPrinterDataEx SetPrinterDataExA
#define DeletePrinterData DeletePrinterDataA
#define DeletePrinterDataEx DeletePrinterDataExA
#define DeletePrinterKey DeletePrinterKeyA
#define PrinterMessageBox PrinterMessageBoxA
#define AddForm AddFormA
#define DeleteForm DeleteFormA
#define GetForm GetFormA
#define SetForm SetFormA
#define EnumForms EnumFormsA
#define EnumMonitors EnumMonitorsA
#define AddMonitor AddMonitorA
#define DeleteMonitor DeleteMonitorA
#define EnumPorts EnumPortsA
#define AddPort AddPortA
#define ConfigurePort ConfigurePortA
#define DeletePort DeletePortA
#define GetDefaultPrinter GetDefaultPrinterA
#define SetDefaultPrinter SetDefaultPrinterA
#define SetPort SetPortA
#define AddPrinterConnection AddPrinterConnectionA
#define DeletePrinterConnection DeletePrinterConnectionA
#define AddPrintProvidor AddPrintProvidorA
#define DeletePrintProvidor DeletePrintProvidorA
#endif /* UNICODE */

#ifdef __cplusplus
}
#endif

#endif /* _WINSPOOL_H */
