Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _WINSPOOL_
      7 #define _WINSPOOL_
      8 
      9 #include <_mingw_unicode.h>
     10 
     11 #ifdef _WINUSER_
     12 #include <prsht.h>
     13 #endif
     14 
     15 #ifdef __cplusplus
     16 extern "C" {
     17 #endif
     18 
     19   typedef struct _PRINTER_INFO_1A {
     20     DWORD Flags;
     21     LPSTR pDescription;
     22     LPSTR pName;
     23     LPSTR pComment;
     24   } PRINTER_INFO_1A,*PPRINTER_INFO_1A,*LPPRINTER_INFO_1A;
     25 
     26   typedef struct _PRINTER_INFO_1W {
     27     DWORD Flags;
     28     LPWSTR pDescription;
     29     LPWSTR pName;
     30     LPWSTR pComment;
     31   } PRINTER_INFO_1W,*PPRINTER_INFO_1W,*LPPRINTER_INFO_1W;
     32 
     33   __MINGW_TYPEDEF_AW(PRINTER_INFO_1)
     34   __MINGW_TYPEDEF_AW(PPRINTER_INFO_1)
     35   __MINGW_TYPEDEF_AW(LPPRINTER_INFO_1)
     36 
     37   typedef struct _PRINTER_INFO_2A {
     38     LPSTR pServerName;
     39     LPSTR pPrinterName;
     40     LPSTR pShareName;
     41     LPSTR pPortName;
     42     LPSTR pDriverName;
     43     LPSTR pComment;
     44     LPSTR pLocation;
     45     LPDEVMODEA pDevMode;
     46     LPSTR pSepFile;
     47     LPSTR pPrintProcessor;
     48     LPSTR pDatatype;
     49     LPSTR pParameters;
     50     PSECURITY_DESCRIPTOR pSecurityDescriptor;
     51     DWORD Attributes;
     52     DWORD Priority;
     53     DWORD DefaultPriority;
     54     DWORD StartTime;
     55     DWORD UntilTime;
     56     DWORD Status;
     57     DWORD cJobs;
     58     DWORD AveragePPM;
     59   } PRINTER_INFO_2A,*PPRINTER_INFO_2A,*LPPRINTER_INFO_2A;
     60 
     61   typedef struct _PRINTER_INFO_2W {
     62     LPWSTR pServerName;
     63     LPWSTR pPrinterName;
     64     LPWSTR pShareName;
     65     LPWSTR pPortName;
     66     LPWSTR pDriverName;
     67     LPWSTR pComment;
     68     LPWSTR pLocation;
     69     LPDEVMODEW pDevMode;
     70     LPWSTR pSepFile;
     71     LPWSTR pPrintProcessor;
     72     LPWSTR pDatatype;
     73     LPWSTR pParameters;
     74     PSECURITY_DESCRIPTOR pSecurityDescriptor;
     75     DWORD Attributes;
     76     DWORD Priority;
     77     DWORD DefaultPriority;
     78     DWORD StartTime;
     79     DWORD UntilTime;
     80     DWORD Status;
     81     DWORD cJobs;
     82     DWORD AveragePPM;
     83   } PRINTER_INFO_2W,*PPRINTER_INFO_2W,*LPPRINTER_INFO_2W;
     84 
     85   __MINGW_TYPEDEF_AW(PRINTER_INFO_2)
     86   __MINGW_TYPEDEF_AW(PPRINTER_INFO_2)
     87   __MINGW_TYPEDEF_AW(LPPRINTER_INFO_2)
     88 
     89   typedef struct _PRINTER_INFO_3 {
     90     PSECURITY_DESCRIPTOR pSecurityDescriptor;
     91   } PRINTER_INFO_3,*PPRINTER_INFO_3,*LPPRINTER_INFO_3;
     92 
     93   typedef struct _PRINTER_INFO_4A {
     94     LPSTR pPrinterName;
     95     LPSTR pServerName;
     96     DWORD Attributes;
     97   } PRINTER_INFO_4A,*PPRINTER_INFO_4A,*LPPRINTER_INFO_4A;
     98 
     99   typedef struct _PRINTER_INFO_4W {
    100     LPWSTR pPrinterName;
    101     LPWSTR pServerName;
    102     DWORD Attributes;
    103   } PRINTER_INFO_4W,*PPRINTER_INFO_4W,*LPPRINTER_INFO_4W;
    104 
    105   __MINGW_TYPEDEF_AW(PRINTER_INFO_4)
    106   __MINGW_TYPEDEF_AW(PPRINTER_INFO_4)
    107   __MINGW_TYPEDEF_AW(LPPRINTER_INFO_4)
    108 
    109   typedef struct _PRINTER_INFO_5A {
    110     LPSTR pPrinterName;
    111     LPSTR pPortName;
    112     DWORD Attributes;
    113     DWORD DeviceNotSelectedTimeout;
    114     DWORD TransmissionRetryTimeout;
    115   } PRINTER_INFO_5A,*PPRINTER_INFO_5A,*LPPRINTER_INFO_5A;
    116 
    117   typedef struct _PRINTER_INFO_5W {
    118     LPWSTR pPrinterName;
    119     LPWSTR pPortName;
    120     DWORD Attributes;
    121     DWORD DeviceNotSelectedTimeout;
    122     DWORD TransmissionRetryTimeout;
    123   } PRINTER_INFO_5W,*PPRINTER_INFO_5W,*LPPRINTER_INFO_5W;
    124 
    125   __MINGW_TYPEDEF_AW(PRINTER_INFO_5)
    126   __MINGW_TYPEDEF_AW(PPRINTER_INFO_5)
    127   __MINGW_TYPEDEF_AW(LPPRINTER_INFO_5)
    128 
    129   typedef struct _PRINTER_INFO_6 {
    130     DWORD dwStatus;
    131   } PRINTER_INFO_6,*PPRINTER_INFO_6,*LPPRINTER_INFO_6;
    132 
    133   typedef struct _PRINTER_INFO_7A {
    134     LPSTR pszObjectGUID;
    135     DWORD dwAction;
    136   } PRINTER_INFO_7A,*PPRINTER_INFO_7A,*LPPRINTER_INFO_7A;
    137 
    138   typedef struct _PRINTER_INFO_7W {
    139     LPWSTR pszObjectGUID;
    140     DWORD dwAction;
    141   } PRINTER_INFO_7W,*PPRINTER_INFO_7W,*LPPRINTER_INFO_7W;
    142 
    143   __MINGW_TYPEDEF_AW(PRINTER_INFO_7)
    144   __MINGW_TYPEDEF_AW(PPRINTER_INFO_7)
    145   __MINGW_TYPEDEF_AW(LPPRINTER_INFO_7)
    146 
    147 #define DSPRINT_PUBLISH 0x00000001
    148 #define DSPRINT_UPDATE 0x00000002
    149 #define DSPRINT_UNPUBLISH 0x00000004
    150 #define DSPRINT_REPUBLISH 0x00000008
    151 #define DSPRINT_PENDING 0x80000000
    152 
    153   typedef struct _PRINTER_INFO_8A {
    154     LPDEVMODEA pDevMode;
    155   } PRINTER_INFO_8A,*PPRINTER_INFO_8A,*LPPRINTER_INFO_8A;
    156 
    157   typedef struct _PRINTER_INFO_8W {
    158     LPDEVMODEW pDevMode;
    159   } PRINTER_INFO_8W,*PPRINTER_INFO_8W,*LPPRINTER_INFO_8W;
    160 
    161   __MINGW_TYPEDEF_AW(PRINTER_INFO_8)
    162   __MINGW_TYPEDEF_AW(PPRINTER_INFO_8)
    163   __MINGW_TYPEDEF_AW(LPPRINTER_INFO_8)
    164 
    165   typedef struct _PRINTER_INFO_9A {
    166     LPDEVMODEA pDevMode;
    167   } PRINTER_INFO_9A,*PPRINTER_INFO_9A,*LPPRINTER_INFO_9A;
    168 
    169   typedef struct _PRINTER_INFO_9W {
    170     LPDEVMODEW pDevMode;
    171   } PRINTER_INFO_9W,*PPRINTER_INFO_9W,*LPPRINTER_INFO_9W;
    172 
    173   __MINGW_TYPEDEF_AW(PRINTER_INFO_9)
    174   __MINGW_TYPEDEF_AW(PPRINTER_INFO_9)
    175   __MINGW_TYPEDEF_AW(LPPRINTER_INFO_9)
    176 
    177 #define PRINTER_CONTROL_PAUSE 1
    178 #define PRINTER_CONTROL_RESUME 2
    179 #define PRINTER_CONTROL_PURGE 3
    180 #define PRINTER_CONTROL_SET_STATUS 4
    181 
    182 #define PRINTER_STATUS_PAUSED 0x00000001
    183 #define PRINTER_STATUS_ERROR 0x00000002
    184 #define PRINTER_STATUS_PENDING_DELETION 0x00000004
    185 #define PRINTER_STATUS_PAPER_JAM 0x00000008
    186 #define PRINTER_STATUS_PAPER_OUT 0x00000010
    187 #define PRINTER_STATUS_MANUAL_FEED 0x00000020
    188 #define PRINTER_STATUS_PAPER_PROBLEM 0x00000040
    189 #define PRINTER_STATUS_OFFLINE 0x00000080
    190 #define PRINTER_STATUS_IO_ACTIVE 0x00000100
    191 #define PRINTER_STATUS_BUSY 0x00000200
    192 #define PRINTER_STATUS_PRINTING 0x00000400
    193 #define PRINTER_STATUS_OUTPUT_BIN_FULL 0x00000800
    194 #define PRINTER_STATUS_NOT_AVAILABLE 0x00001000
    195 #define PRINTER_STATUS_WAITING 0x00002000
    196 #define PRINTER_STATUS_PROCESSING 0x00004000
    197 #define PRINTER_STATUS_INITIALIZING 0x00008000
    198 #define PRINTER_STATUS_WARMING_UP 0x00010000
    199 #define PRINTER_STATUS_TONER_LOW 0x00020000
    200 #define PRINTER_STATUS_NO_TONER 0x00040000
    201 #define PRINTER_STATUS_PAGE_PUNT 0x00080000
    202 #define PRINTER_STATUS_USER_INTERVENTION 0x00100000
    203 #define PRINTER_STATUS_OUT_OF_MEMORY 0x00200000
    204 #define PRINTER_STATUS_DOOR_OPEN 0x00400000
    205 #define PRINTER_STATUS_SERVER_UNKNOWN 0x00800000
    206 #define PRINTER_STATUS_POWER_SAVE 0x01000000
    207 
    208 #define PRINTER_ATTRIBUTE_QUEUED 0x00000001
    209 #define PRINTER_ATTRIBUTE_DIRECT 0x00000002
    210 #define PRINTER_ATTRIBUTE_DEFAULT 0x00000004
    211 #define PRINTER_ATTRIBUTE_SHARED 0x00000008
    212 #define PRINTER_ATTRIBUTE_NETWORK 0x00000010
    213 #define PRINTER_ATTRIBUTE_HIDDEN 0x00000020
    214 #define PRINTER_ATTRIBUTE_LOCAL 0x00000040
    215 
    216 #define PRINTER_ATTRIBUTE_ENABLE_DEVQ 0x00000080
    217 #define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS 0x00000100
    218 #define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x00000200
    219 
    220 #define PRINTER_ATTRIBUTE_WORK_OFFLINE 0x00000400
    221 #define PRINTER_ATTRIBUTE_ENABLE_BIDI 0x00000800
    222 #define PRINTER_ATTRIBUTE_RAW_ONLY 0x00001000
    223 #define PRINTER_ATTRIBUTE_PUBLISHED 0x00002000
    224 #define PRINTER_ATTRIBUTE_FAX 0x00004000
    225 #define PRINTER_ATTRIBUTE_TS 0x00008000
    226 
    227 #define NO_PRIORITY 0
    228 #define MAX_PRIORITY 99
    229 #define MIN_PRIORITY 1
    230 #define DEF_PRIORITY 1
    231 
    232   typedef struct _JOB_INFO_1A {
    233     DWORD JobId;
    234     LPSTR pPrinterName;
    235     LPSTR pMachineName;
    236     LPSTR pUserName;
    237     LPSTR pDocument;
    238     LPSTR pDatatype;
    239     LPSTR pStatus;
    240     DWORD Status;
    241     DWORD Priority;
    242     DWORD Position;
    243     DWORD TotalPages;
    244     DWORD PagesPrinted;
    245     SYSTEMTIME Submitted;
    246   } JOB_INFO_1A,*PJOB_INFO_1A,*LPJOB_INFO_1A;
    247 
    248   typedef struct _JOB_INFO_1W {
    249     DWORD JobId;
    250     LPWSTR pPrinterName;
    251     LPWSTR pMachineName;
    252     LPWSTR pUserName;
    253     LPWSTR pDocument;
    254     LPWSTR pDatatype;
    255     LPWSTR pStatus;
    256     DWORD Status;
    257     DWORD Priority;
    258     DWORD Position;
    259     DWORD TotalPages;
    260     DWORD PagesPrinted;
    261     SYSTEMTIME Submitted;
    262   } JOB_INFO_1W,*PJOB_INFO_1W,*LPJOB_INFO_1W;
    263 
    264   __MINGW_TYPEDEF_AW(JOB_INFO_1)
    265   __MINGW_TYPEDEF_AW(PJOB_INFO_1)
    266   __MINGW_TYPEDEF_AW(LPJOB_INFO_1)
    267 
    268   typedef struct _JOB_INFO_2A {
    269     DWORD JobId;
    270     LPSTR pPrinterName;
    271     LPSTR pMachineName;
    272     LPSTR pUserName;
    273     LPSTR pDocument;
    274     LPSTR pNotifyName;
    275     LPSTR pDatatype;
    276     LPSTR pPrintProcessor;
    277     LPSTR pParameters;
    278     LPSTR pDriverName;
    279     LPDEVMODEA pDevMode;
    280     LPSTR pStatus;
    281     PSECURITY_DESCRIPTOR pSecurityDescriptor;
    282     DWORD Status;
    283     DWORD Priority;
    284     DWORD Position;
    285     DWORD StartTime;
    286     DWORD UntilTime;
    287     DWORD TotalPages;
    288     DWORD Size;
    289     SYSTEMTIME Submitted;
    290     DWORD Time;
    291     DWORD PagesPrinted;
    292   } JOB_INFO_2A,*PJOB_INFO_2A,*LPJOB_INFO_2A;
    293 
    294   typedef struct _JOB_INFO_2W {
    295     DWORD JobId;
    296     LPWSTR pPrinterName;
    297     LPWSTR pMachineName;
    298     LPWSTR pUserName;
    299     LPWSTR pDocument;
    300     LPWSTR pNotifyName;
    301     LPWSTR pDatatype;
    302     LPWSTR pPrintProcessor;
    303     LPWSTR pParameters;
    304     LPWSTR pDriverName;
    305     LPDEVMODEW pDevMode;
    306     LPWSTR pStatus;
    307     PSECURITY_DESCRIPTOR pSecurityDescriptor;
    308     DWORD Status;
    309     DWORD Priority;
    310     DWORD Position;
    311     DWORD StartTime;
    312     DWORD UntilTime;
    313     DWORD TotalPages;
    314     DWORD Size;
    315     SYSTEMTIME Submitted;
    316     DWORD Time;
    317     DWORD PagesPrinted;
    318   } JOB_INFO_2W,*PJOB_INFO_2W,*LPJOB_INFO_2W;
    319 
    320   __MINGW_TYPEDEF_AW(JOB_INFO_2)
    321   __MINGW_TYPEDEF_AW(PJOB_INFO_2)
    322   __MINGW_TYPEDEF_AW(LPJOB_INFO_2)
    323 
    324   typedef struct _JOB_INFO_3 {
    325     DWORD JobId;
    326     DWORD NextJobId;
    327     DWORD Reserved;
    328   } JOB_INFO_3,*PJOB_INFO_3,*LPJOB_INFO_3;
    329 
    330 #define JOB_CONTROL_PAUSE 1
    331 #define JOB_CONTROL_RESUME 2
    332 #define JOB_CONTROL_CANCEL 3
    333 #define JOB_CONTROL_RESTART 4
    334 #define JOB_CONTROL_DELETE 5
    335 #define JOB_CONTROL_SENT_TO_PRINTER 6
    336 #define JOB_CONTROL_LAST_PAGE_EJECTED 7
    337 
    338 #define JOB_STATUS_PAUSED 0x00000001
    339 #define JOB_STATUS_ERROR 0x00000002
    340 #define JOB_STATUS_DELETING 0x00000004
    341 #define JOB_STATUS_SPOOLING 0x00000008
    342 #define JOB_STATUS_PRINTING 0x00000010
    343 #define JOB_STATUS_OFFLINE 0x00000020
    344 #define JOB_STATUS_PAPEROUT 0x00000040
    345 #define JOB_STATUS_PRINTED 0x00000080
    346 #define JOB_STATUS_DELETED 0x00000100
    347 #define JOB_STATUS_BLOCKED_DEVQ 0x00000200
    348 #define JOB_STATUS_USER_INTERVENTION 0x00000400
    349 #define JOB_STATUS_RESTART 0x00000800
    350 #define JOB_STATUS_COMPLETE 0x00001000
    351 
    352 #define JOB_POSITION_UNSPECIFIED 0
    353 
    354   typedef struct _ADDJOB_INFO_1A {
    355     LPSTR Path;
    356     DWORD JobId;
    357   } ADDJOB_INFO_1A,*PADDJOB_INFO_1A,*LPADDJOB_INFO_1A;
    358 
    359   typedef struct _ADDJOB_INFO_1W {
    360     LPWSTR Path;
    361     DWORD JobId;
    362   } ADDJOB_INFO_1W,*PADDJOB_INFO_1W,*LPADDJOB_INFO_1W;
    363 
    364   __MINGW_TYPEDEF_AW(ADDJOB_INFO_1)
    365   __MINGW_TYPEDEF_AW(PADDJOB_INFO_1)
    366   __MINGW_TYPEDEF_AW(LPADDJOB_INFO_1)
    367 
    368   typedef struct _DRIVER_INFO_1A {
    369     LPSTR pName;
    370   } DRIVER_INFO_1A,*PDRIVER_INFO_1A,*LPDRIVER_INFO_1A;
    371 
    372   typedef struct _DRIVER_INFO_1W {
    373     LPWSTR pName;
    374   } DRIVER_INFO_1W,*PDRIVER_INFO_1W,*LPDRIVER_INFO_1W;
    375 
    376   __MINGW_TYPEDEF_AW(DRIVER_INFO_1)
    377   __MINGW_TYPEDEF_AW(PDRIVER_INFO_1)
    378   __MINGW_TYPEDEF_AW(LPDRIVER_INFO_1)
    379 
    380   typedef struct _DRIVER_INFO_2A {
    381     DWORD cVersion;
    382     LPSTR pName;
    383     LPSTR pEnvironment;
    384     LPSTR pDriverPath;
    385     LPSTR pDataFile;
    386     LPSTR pConfigFile;
    387   } DRIVER_INFO_2A,*PDRIVER_INFO_2A,*LPDRIVER_INFO_2A;
    388 
    389   typedef struct _DRIVER_INFO_2W {
    390     DWORD cVersion;
    391     LPWSTR pName;
    392     LPWSTR pEnvironment;
    393     LPWSTR pDriverPath;
    394     LPWSTR pDataFile;
    395     LPWSTR pConfigFile;
    396   } DRIVER_INFO_2W,*PDRIVER_INFO_2W,*LPDRIVER_INFO_2W;
    397 
    398   __MINGW_TYPEDEF_AW(DRIVER_INFO_2)
    399   __MINGW_TYPEDEF_AW(PDRIVER_INFO_2)
    400   __MINGW_TYPEDEF_AW(LPDRIVER_INFO_2)
    401 
    402   typedef struct _DRIVER_INFO_3A {
    403     DWORD cVersion;
    404     LPSTR pName;
    405     LPSTR pEnvironment;
    406     LPSTR pDriverPath;
    407     LPSTR pDataFile;
    408     LPSTR pConfigFile;
    409     LPSTR pHelpFile;
    410     LPSTR pDependentFiles;
    411     LPSTR pMonitorName;
    412     LPSTR pDefaultDataType;
    413   } DRIVER_INFO_3A,*PDRIVER_INFO_3A,*LPDRIVER_INFO_3A;
    414 
    415   typedef struct _DRIVER_INFO_3W {
    416     DWORD cVersion;
    417     LPWSTR pName;
    418     LPWSTR pEnvironment;
    419     LPWSTR pDriverPath;
    420     LPWSTR pDataFile;
    421     LPWSTR pConfigFile;
    422     LPWSTR pHelpFile;
    423     LPWSTR pDependentFiles;
    424     LPWSTR pMonitorName;
    425     LPWSTR pDefaultDataType;
    426   } DRIVER_INFO_3W,*PDRIVER_INFO_3W,*LPDRIVER_INFO_3W;
    427 
    428   __MINGW_TYPEDEF_AW(DRIVER_INFO_3)
    429   __MINGW_TYPEDEF_AW(PDRIVER_INFO_3)
    430   __MINGW_TYPEDEF_AW(LPDRIVER_INFO_3)
    431 
    432   typedef struct _DRIVER_INFO_4A {
    433     DWORD cVersion;
    434     LPSTR pName;
    435     LPSTR pEnvironment;
    436     LPSTR pDriverPath;
    437     LPSTR pDataFile;
    438     LPSTR pConfigFile;
    439     LPSTR pHelpFile;
    440     LPSTR pDependentFiles;
    441     LPSTR pMonitorName;
    442     LPSTR pDefaultDataType;
    443     LPSTR pszzPreviousNames;
    444   } DRIVER_INFO_4A,*PDRIVER_INFO_4A,*LPDRIVER_INFO_4A;
    445 
    446   typedef struct _DRIVER_INFO_4W {
    447     DWORD cVersion;
    448     LPWSTR pName;
    449     LPWSTR pEnvironment;
    450     LPWSTR pDriverPath;
    451     LPWSTR pDataFile;
    452     LPWSTR pConfigFile;
    453     LPWSTR pHelpFile;
    454     LPWSTR pDependentFiles;
    455     LPWSTR pMonitorName;
    456     LPWSTR pDefaultDataType;
    457     LPWSTR pszzPreviousNames;
    458   } DRIVER_INFO_4W,*PDRIVER_INFO_4W,*LPDRIVER_INFO_4W;
    459 
    460   __MINGW_TYPEDEF_AW(DRIVER_INFO_4)
    461   __MINGW_TYPEDEF_AW(PDRIVER_INFO_4)
    462   __MINGW_TYPEDEF_AW(LPDRIVER_INFO_4)
    463 
    464   typedef struct _DRIVER_INFO_5A {
    465     DWORD cVersion;
    466     LPSTR pName;
    467     LPSTR pEnvironment;
    468     LPSTR pDriverPath;
    469     LPSTR pDataFile;
    470     LPSTR pConfigFile;
    471     DWORD dwDriverAttributes;
    472     DWORD dwConfigVersion;
    473     DWORD dwDriverVersion;
    474   } DRIVER_INFO_5A,*PDRIVER_INFO_5A,*LPDRIVER_INFO_5A;
    475 
    476   typedef struct _DRIVER_INFO_5W {
    477     DWORD cVersion;
    478     LPWSTR pName;
    479     LPWSTR pEnvironment;
    480     LPWSTR pDriverPath;
    481     LPWSTR pDataFile;
    482     LPWSTR pConfigFile;
    483     DWORD dwDriverAttributes;
    484     DWORD dwConfigVersion;
    485     DWORD dwDriverVersion;
    486   } DRIVER_INFO_5W,*PDRIVER_INFO_5W,*LPDRIVER_INFO_5W;
    487 
    488   __MINGW_TYPEDEF_AW(DRIVER_INFO_5)
    489   __MINGW_TYPEDEF_AW(PDRIVER_INFO_5)
    490   __MINGW_TYPEDEF_AW(LPDRIVER_INFO_5)
    491 
    492   typedef struct _DRIVER_INFO_6A {
    493     DWORD cVersion;
    494     LPSTR pName;
    495     LPSTR pEnvironment;
    496     LPSTR pDriverPath;
    497     LPSTR pDataFile;
    498     LPSTR pConfigFile;
    499     LPSTR pHelpFile;
    500     LPSTR pDependentFiles;
    501     LPSTR pMonitorName;
    502     LPSTR pDefaultDataType;
    503     LPSTR pszzPreviousNames;
    504     FILETIME ftDriverDate;
    505     DWORDLONG dwlDriverVersion;
    506     LPSTR pszMfgName;
    507     LPSTR pszOEMUrl;
    508     LPSTR pszHardwareID;
    509     LPSTR pszProvider;
    510   } DRIVER_INFO_6A,*PDRIVER_INFO_6A,*LPDRIVER_INFO_6A;
    511 
    512   typedef struct _DRIVER_INFO_6W {
    513     DWORD cVersion;
    514     LPWSTR pName;
    515     LPWSTR pEnvironment;
    516     LPWSTR pDriverPath;
    517     LPWSTR pDataFile;
    518     LPWSTR pConfigFile;
    519     LPWSTR pHelpFile;
    520     LPWSTR pDependentFiles;
    521     LPWSTR pMonitorName;
    522     LPWSTR pDefaultDataType;
    523     LPWSTR pszzPreviousNames;
    524     FILETIME ftDriverDate;
    525     DWORDLONG dwlDriverVersion;
    526     LPWSTR pszMfgName;
    527     LPWSTR pszOEMUrl;
    528     LPWSTR pszHardwareID;
    529     LPWSTR pszProvider;
    530   } DRIVER_INFO_6W,*PDRIVER_INFO_6W,*LPDRIVER_INFO_6W;
    531 
    532   __MINGW_TYPEDEF_AW(DRIVER_INFO_6)
    533   __MINGW_TYPEDEF_AW(PDRIVER_INFO_6)
    534   __MINGW_TYPEDEF_AW(LPDRIVER_INFO_6)
    535 
    536 #define DRIVER_KERNELMODE 0x00000001
    537 #define DRIVER_USERMODE 0x00000002
    538 
    539 #define DPD_DELETE_UNUSED_FILES 0x00000001
    540 #define DPD_DELETE_SPECIFIC_VERSION 0x00000002
    541 #define DPD_DELETE_ALL_FILES 0x00000004
    542 
    543 #define APD_STRICT_UPGRADE 0x00000001
    544 #define APD_STRICT_DOWNGRADE 0x00000002
    545 #define APD_COPY_ALL_FILES 0x00000004
    546 #define APD_COPY_NEW_FILES 0x00000008
    547 #define APD_COPY_FROM_DIRECTORY 0x00000010
    548 
    549   typedef struct _DOC_INFO_1A {
    550     LPSTR pDocName;
    551     LPSTR pOutputFile;
    552     LPSTR pDatatype;
    553   } DOC_INFO_1A,*PDOC_INFO_1A,*LPDOC_INFO_1A;
    554 
    555   typedef struct _DOC_INFO_1W {
    556     LPWSTR pDocName;
    557     LPWSTR pOutputFile;
    558     LPWSTR pDatatype;
    559   } DOC_INFO_1W,*PDOC_INFO_1W,*LPDOC_INFO_1W;
    560 
    561   __MINGW_TYPEDEF_AW(DOC_INFO_1)
    562   __MINGW_TYPEDEF_AW(PDOC_INFO_1)
    563   __MINGW_TYPEDEF_AW(LPDOC_INFO_1)
    564 
    565   typedef struct _FORM_INFO_1A {
    566     DWORD Flags;
    567     LPSTR pName;
    568     SIZEL Size;
    569     RECTL ImageableArea;
    570   } FORM_INFO_1A,*PFORM_INFO_1A,*LPFORM_INFO_1A;
    571 
    572   typedef struct _FORM_INFO_1W {
    573     DWORD Flags;
    574     LPWSTR pName;
    575     SIZEL Size;
    576     RECTL ImageableArea;
    577   } FORM_INFO_1W,*PFORM_INFO_1W,*LPFORM_INFO_1W;
    578 
    579   __MINGW_TYPEDEF_AW(FORM_INFO_1)
    580   __MINGW_TYPEDEF_AW(PFORM_INFO_1)
    581   __MINGW_TYPEDEF_AW(LPFORM_INFO_1)
    582 
    583   typedef struct _DOC_INFO_2A {
    584     LPSTR pDocName;
    585     LPSTR pOutputFile;
    586     LPSTR pDatatype;
    587     DWORD dwMode;
    588     DWORD JobId;
    589   } DOC_INFO_2A,*PDOC_INFO_2A,*LPDOC_INFO_2A;
    590 
    591   typedef struct _DOC_INFO_2W {
    592     LPWSTR pDocName;
    593     LPWSTR pOutputFile;
    594     LPWSTR pDatatype;
    595     DWORD dwMode;
    596     DWORD JobId;
    597   } DOC_INFO_2W,*PDOC_INFO_2W,*LPDOC_INFO_2W;
    598 
    599   __MINGW_TYPEDEF_AW(DOC_INFO_2)
    600   __MINGW_TYPEDEF_AW(PDOC_INFO_2)
    601   __MINGW_TYPEDEF_AW(LPDOC_INFO_2)
    602 
    603 #define DI_CHANNEL 1
    604 #define DI_READ_SPOOL_JOB 3
    605 
    606   typedef struct _DOC_INFO_3A {
    607     LPSTR pDocName;
    608     LPSTR pOutputFile;
    609     LPSTR pDatatype;
    610     DWORD dwFlags;
    611   } DOC_INFO_3A,*PDOC_INFO_3A,*LPDOC_INFO_3A;
    612 
    613   typedef struct _DOC_INFO_3W {
    614     LPWSTR pDocName;
    615     LPWSTR pOutputFile;
    616     LPWSTR pDatatype;
    617     DWORD dwFlags;
    618   } DOC_INFO_3W,*PDOC_INFO_3W,*LPDOC_INFO_3W;
    619 
    620   __MINGW_TYPEDEF_AW(DOC_INFO_3)
    621   __MINGW_TYPEDEF_AW(PDOC_INFO_3)
    622   __MINGW_TYPEDEF_AW(LPDOC_INFO_3)
    623 
    624 #define DI_MEMORYMAP_WRITE 0x00000001
    625 
    626 #define FORM_USER 0x00000000
    627 #define FORM_BUILTIN 0x00000001
    628 #define FORM_PRINTER 0x00000002
    629 
    630   typedef struct _PRINTPROCESSOR_INFO_1A {
    631     LPSTR pName;
    632   } PRINTPROCESSOR_INFO_1A,*PPRINTPROCESSOR_INFO_1A,*LPPRINTPROCESSOR_INFO_1A;
    633 
    634   typedef struct _PRINTPROCESSOR_INFO_1W {
    635     LPWSTR pName;
    636   } PRINTPROCESSOR_INFO_1W,*PPRINTPROCESSOR_INFO_1W,*LPPRINTPROCESSOR_INFO_1W;
    637 
    638   __MINGW_TYPEDEF_AW(PRINTPROCESSOR_INFO_1)
    639   __MINGW_TYPEDEF_AW(PPRINTPROCESSOR_INFO_1)
    640   __MINGW_TYPEDEF_AW(LPPRINTPROCESSOR_INFO_1)
    641 
    642   typedef struct _PRINTPROCESSOR_CAPS_1 {
    643     DWORD dwLevel;
    644     DWORD dwNupOptions;
    645     DWORD dwPageOrderFlags;
    646     DWORD dwNumberOfCopies;
    647   } PRINTPROCESSOR_CAPS_1,*PPRINTPROCESSOR_CAPS_1;
    648 
    649 #define NORMAL_PRINT 0x00000000
    650 #define REVERSE_PRINT 0x00000001
    651 
    652   typedef struct _PORT_INFO_1A {
    653     LPSTR pName;
    654   } PORT_INFO_1A,*PPORT_INFO_1A,*LPPORT_INFO_1A;
    655   typedef struct _PORT_INFO_1W {
    656     LPWSTR pName;
    657   } PORT_INFO_1W,*PPORT_INFO_1W,*LPPORT_INFO_1W;
    658 
    659   __MINGW_TYPEDEF_AW(PORT_INFO_1)
    660   __MINGW_TYPEDEF_AW(PPORT_INFO_1)
    661   __MINGW_TYPEDEF_AW(LPPORT_INFO_1)
    662 
    663   typedef struct _PORT_INFO_2A {
    664     LPSTR pPortName;
    665     LPSTR pMonitorName;
    666     LPSTR pDescription;
    667     DWORD fPortType;
    668     DWORD Reserved;
    669   } PORT_INFO_2A,*PPORT_INFO_2A,*LPPORT_INFO_2A;
    670 
    671   typedef struct _PORT_INFO_2W {
    672     LPWSTR pPortName;
    673     LPWSTR pMonitorName;
    674     LPWSTR pDescription;
    675     DWORD fPortType;
    676     DWORD Reserved;
    677   } PORT_INFO_2W,*PPORT_INFO_2W,*LPPORT_INFO_2W;
    678 
    679   __MINGW_TYPEDEF_AW(PORT_INFO_2)
    680   __MINGW_TYPEDEF_AW(PPORT_INFO_2)
    681   __MINGW_TYPEDEF_AW(LPPORT_INFO_2)
    682 
    683 #define PORT_TYPE_WRITE 0x0001
    684 #define PORT_TYPE_READ 0x0002
    685 #define PORT_TYPE_REDIRECTED 0x0004
    686 #define PORT_TYPE_NET_ATTACHED 0x0008
    687 
    688   typedef struct _PORT_INFO_3A {
    689     DWORD dwStatus;
    690     LPSTR pszStatus;
    691     DWORD dwSeverity;
    692   } PORT_INFO_3A,*PPORT_INFO_3A,*LPPORT_INFO_3A;
    693 
    694   typedef struct _PORT_INFO_3W {
    695     DWORD dwStatus;
    696     LPWSTR pszStatus;
    697     DWORD dwSeverity;
    698   } PORT_INFO_3W,*PPORT_INFO_3W,*LPPORT_INFO_3W;
    699 
    700   __MINGW_TYPEDEF_AW(PORT_INFO_3)
    701   __MINGW_TYPEDEF_AW(PPORT_INFO_3)
    702   __MINGW_TYPEDEF_AW(LPPORT_INFO_3)
    703 
    704 #define PORT_STATUS_TYPE_ERROR 1
    705 #define PORT_STATUS_TYPE_WARNING 2
    706 #define PORT_STATUS_TYPE_INFO 3
    707 
    708 #define PORT_STATUS_OFFLINE 1
    709 #define PORT_STATUS_PAPER_JAM 2
    710 #define PORT_STATUS_PAPER_OUT 3
    711 #define PORT_STATUS_OUTPUT_BIN_FULL 4
    712 #define PORT_STATUS_PAPER_PROBLEM 5
    713 #define PORT_STATUS_NO_TONER 6
    714 #define PORT_STATUS_DOOR_OPEN 7
    715 #define PORT_STATUS_USER_INTERVENTION 8
    716 #define PORT_STATUS_OUT_OF_MEMORY 9
    717 #define PORT_STATUS_TONER_LOW 10
    718 #define PORT_STATUS_WARMING_UP 11
    719 #define PORT_STATUS_POWER_SAVE 12
    720 
    721   typedef struct _MONITOR_INFO_1A{
    722     LPSTR pName;
    723   } MONITOR_INFO_1A,*PMONITOR_INFO_1A,*LPMONITOR_INFO_1A;
    724 
    725   typedef struct _MONITOR_INFO_1W{
    726     LPWSTR pName;
    727   } MONITOR_INFO_1W,*PMONITOR_INFO_1W,*LPMONITOR_INFO_1W;
    728 
    729   __MINGW_TYPEDEF_AW(MONITOR_INFO_1)
    730   __MINGW_TYPEDEF_AW(PMONITOR_INFO_1)
    731   __MINGW_TYPEDEF_AW(LPMONITOR_INFO_1)
    732 
    733   typedef struct _MONITOR_INFO_2A {
    734     LPSTR pName;
    735     LPSTR pEnvironment;
    736     LPSTR pDLLName;
    737   } MONITOR_INFO_2A,*PMONITOR_INFO_2A,*LPMONITOR_INFO_2A;
    738 
    739   typedef struct _MONITOR_INFO_2W {
    740     LPWSTR pName;
    741     LPWSTR pEnvironment;
    742     LPWSTR pDLLName;
    743   } MONITOR_INFO_2W,*PMONITOR_INFO_2W,*LPMONITOR_INFO_2W;
    744 
    745   __MINGW_TYPEDEF_AW(MONITOR_INFO_2)
    746   __MINGW_TYPEDEF_AW(PMONITOR_INFO_2)
    747   __MINGW_TYPEDEF_AW(LPMONITOR_INFO_2)
    748 
    749   typedef struct _DATATYPES_INFO_1A {
    750     LPSTR pName;
    751   } DATATYPES_INFO_1A,*PDATATYPES_INFO_1A,*LPDATATYPES_INFO_1A;
    752 
    753   typedef struct _DATATYPES_INFO_1W {
    754     LPWSTR pName;
    755   } DATATYPES_INFO_1W,*PDATATYPES_INFO_1W,*LPDATATYPES_INFO_1W;
    756 
    757   __MINGW_TYPEDEF_AW(DATATYPES_INFO_1)
    758   __MINGW_TYPEDEF_AW(PDATATYPES_INFO_1)
    759   __MINGW_TYPEDEF_AW(LPDATATYPES_INFO_1)
    760 
    761   typedef struct _PRINTER_DEFAULTSA {
    762     LPSTR pDatatype;
    763     LPDEVMODEA pDevMode;
    764     ACCESS_MASK DesiredAccess;
    765   } PRINTER_DEFAULTSA,*PPRINTER_DEFAULTSA,*LPPRINTER_DEFAULTSA;
    766 
    767   typedef struct _PRINTER_DEFAULTSW {
    768     LPWSTR pDatatype;
    769     LPDEVMODEW pDevMode;
    770     ACCESS_MASK DesiredAccess;
    771   } PRINTER_DEFAULTSW,*PPRINTER_DEFAULTSW,*LPPRINTER_DEFAULTSW;
    772 
    773   __MINGW_TYPEDEF_AW(PRINTER_DEFAULTS)
    774   __MINGW_TYPEDEF_AW(PPRINTER_DEFAULTS)
    775   __MINGW_TYPEDEF_AW(LPPRINTER_DEFAULTS)
    776 
    777   typedef struct _PRINTER_ENUM_VALUESA {
    778     LPSTR pValueName;
    779     DWORD cbValueName;
    780     DWORD dwType;
    781     LPBYTE pData;
    782     DWORD cbData;
    783   } PRINTER_ENUM_VALUESA,*PPRINTER_ENUM_VALUESA,*LPPRINTER_ENUM_VALUESA;
    784 
    785   typedef struct _PRINTER_ENUM_VALUESW {
    786     LPWSTR pValueName;
    787     DWORD cbValueName;
    788     DWORD dwType;
    789     LPBYTE pData;
    790     DWORD cbData;
    791   } PRINTER_ENUM_VALUESW,*PPRINTER_ENUM_VALUESW,*LPPRINTER_ENUM_VALUESW;
    792 
    793   __MINGW_TYPEDEF_AW(PRINTER_ENUM_VALUES)
    794   __MINGW_TYPEDEF_AW(PPRINTER_ENUM_VALUES)
    795   __MINGW_TYPEDEF_AW(LPPRINTER_ENUM_VALUES)
    796 
    797 #define EnumPrinters __MINGW_NAME_AW(EnumPrinters)
    798 
    799   WINBOOL WINAPI EnumPrintersA(DWORD Flags,LPSTR Name,DWORD Level,LPBYTE pPrinterEnum,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
    800   WINBOOL WINAPI EnumPrintersW(DWORD Flags,LPWSTR Name,DWORD Level,LPBYTE pPrinterEnum,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
    801 
    802 #define PRINTER_ENUM_DEFAULT 0x00000001
    803 #define PRINTER_ENUM_LOCAL 0x00000002
    804 #define PRINTER_ENUM_CONNECTIONS 0x00000004
    805 #define PRINTER_ENUM_FAVORITE 0x00000004
    806 #define PRINTER_ENUM_NAME 0x00000008
    807 #define PRINTER_ENUM_REMOTE 0x00000010
    808 #define PRINTER_ENUM_SHARED 0x00000020
    809 #define PRINTER_ENUM_NETWORK 0x00000040
    810 
    811 #define PRINTER_ENUM_EXPAND 0x00004000
    812 #define PRINTER_ENUM_CONTAINER 0x00008000
    813 
    814 #define PRINTER_ENUM_ICONMASK 0x00ff0000
    815 #define PRINTER_ENUM_ICON1 0x00010000
    816 #define PRINTER_ENUM_ICON2 0x00020000
    817 #define PRINTER_ENUM_ICON3 0x00040000
    818 #define PRINTER_ENUM_ICON4 0x00080000
    819 #define PRINTER_ENUM_ICON5 0x00100000
    820 #define PRINTER_ENUM_ICON6 0x00200000
    821 #define PRINTER_ENUM_ICON7 0x00400000
    822 #define PRINTER_ENUM_ICON8 0x00800000
    823 #define PRINTER_ENUM_HIDE 0x01000000
    824 
    825 #define SPOOL_FILE_PERSISTENT 0x00000001
    826 #define SPOOL_FILE_TEMPORARY 0x00000002
    827 
    828 #define OpenPrinter __MINGW_NAME_AW(OpenPrinter)
    829 #define ResetPrinter __MINGW_NAME_AW(ResetPrinter)
    830 #define SetJob __MINGW_NAME_AW(SetJob)
    831 #define GetJob __MINGW_NAME_AW(GetJob)
    832 #define EnumJobs __MINGW_NAME_AW(EnumJobs)
    833 #define AddPrinter __MINGW_NAME_AW(AddPrinter)
    834 #define SetPrinter __MINGW_NAME_AW(SetPrinter)
    835 #define GetPrinter __MINGW_NAME_AW(GetPrinter)
    836 #define AddPrinterDriver __MINGW_NAME_AW(AddPrinterDriver)
    837 #define AddPrinterDriverEx __MINGW_NAME_AW(AddPrinterDriverEx)
    838 #define EnumPrinterDrivers __MINGW_NAME_AW(EnumPrinterDrivers)
    839 #define GetPrinterDriver __MINGW_NAME_AW(GetPrinterDriver)
    840 #define GetPrinterDriverDirectory __MINGW_NAME_AW(GetPrinterDriverDirectory)
    841 #define DeletePrinterDriver __MINGW_NAME_AW(DeletePrinterDriver)
    842 #define DeletePrinterDriverEx __MINGW_NAME_AW(DeletePrinterDriverEx)
    843 #define AddPrintProcessor __MINGW_NAME_AW(AddPrintProcessor)
    844 #define EnumPrintProcessors __MINGW_NAME_AW(EnumPrintProcessors)
    845 #define GetPrintProcessorDirectory __MINGW_NAME_AW(GetPrintProcessorDirectory)
    846 #define EnumPrintProcessorDatatypes __MINGW_NAME_AW(EnumPrintProcessorDatatypes)
    847 #define DeletePrintProcessor __MINGW_NAME_AW(DeletePrintProcessor)
    848 #define StartDocPrinter __MINGW_NAME_AW(StartDocPrinter)
    849 #define AddJob __MINGW_NAME_AW(AddJob)
    850 #define DocumentProperties __MINGW_NAME_AW(DocumentProperties)
    851 #define AdvancedDocumentProperties __MINGW_NAME_AW(AdvancedDocumentProperties)
    852 #define GetPrinterData __MINGW_NAME_AW(GetPrinterData)
    853 #define GetPrinterDataEx __MINGW_NAME_AW(GetPrinterDataEx)
    854 #define EnumPrinterData __MINGW_NAME_AW(EnumPrinterData)
    855 #define EnumPrinterDataEx __MINGW_NAME_AW(EnumPrinterDataEx)
    856 #define EnumPrinterKey __MINGW_NAME_AW(EnumPrinterKey)
    857 #define SetPrinterData __MINGW_NAME_AW(SetPrinterData)
    858 #define SetPrinterDataEx __MINGW_NAME_AW(SetPrinterDataEx)
    859 #define DeletePrinterData __MINGW_NAME_AW(DeletePrinterData)
    860 #define DeletePrinterDataEx __MINGW_NAME_AW(DeletePrinterDataEx)
    861 #define DeletePrinterKey __MINGW_NAME_AW(DeletePrinterKey)
    862 
    863   WINBOOL WINAPI OpenPrinterA(LPSTR pPrinterName,LPHANDLE phPrinter,LPPRINTER_DEFAULTSA pDefault);
    864   WINBOOL WINAPI OpenPrinterW(LPWSTR pPrinterName,LPHANDLE phPrinter,LPPRINTER_DEFAULTSW pDefault);
    865   WINBOOL WINAPI ResetPrinterA(HANDLE hPrinter,LPPRINTER_DEFAULTSA pDefault);
    866   WINBOOL WINAPI ResetPrinterW(HANDLE hPrinter,LPPRINTER_DEFAULTSW pDefault);
    867   WINBOOL WINAPI SetJobA(HANDLE hPrinter,DWORD JobId,DWORD Level,LPBYTE pJob,DWORD Command);
    868   WINBOOL WINAPI SetJobW(HANDLE hPrinter,DWORD JobId,DWORD Level,LPBYTE pJob,DWORD Command);
    869   WINBOOL WINAPI GetJobA(HANDLE hPrinter,DWORD JobId,DWORD Level,LPBYTE pJob,DWORD cbBuf,LPDWORD pcbNeeded);
    870   WINBOOL WINAPI GetJobW(HANDLE hPrinter,DWORD JobId,DWORD Level,LPBYTE pJob,DWORD cbBuf,LPDWORD pcbNeeded);
    871   WINBOOL WINAPI EnumJobsA(HANDLE hPrinter,DWORD FirstJob,DWORD NoJobs,DWORD Level,LPBYTE pJob,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
    872   WINBOOL WINAPI EnumJobsW(HANDLE hPrinter,DWORD FirstJob,DWORD NoJobs,DWORD Level,LPBYTE pJob,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
    873   HANDLE WINAPI AddPrinterA(LPSTR pName,DWORD Level,LPBYTE pPrinter);
    874   HANDLE WINAPI AddPrinterW(LPWSTR pName,DWORD Level,LPBYTE pPrinter);
    875   WINBOOL WINAPI DeletePrinter(HANDLE hPrinter);
    876   WINBOOL WINAPI SetPrinterA(HANDLE hPrinter,DWORD Level,LPBYTE pPrinter,DWORD Command);
    877   WINBOOL WINAPI SetPrinterW(HANDLE hPrinter,DWORD Level,LPBYTE pPrinter,DWORD Command);
    878   WINBOOL WINAPI GetPrinterA(HANDLE hPrinter,DWORD Level,LPBYTE pPrinter,DWORD cbBuf,LPDWORD pcbNeeded);
    879   WINBOOL WINAPI GetPrinterW(HANDLE hPrinter,DWORD Level,LPBYTE pPrinter,DWORD cbBuf,LPDWORD pcbNeeded);
    880   WINBOOL WINAPI AddPrinterDriverA(LPSTR pName,DWORD Level,LPBYTE pDriverInfo);
    881   WINBOOL WINAPI AddPrinterDriverW(LPWSTR pName,DWORD Level,LPBYTE pDriverInfo);
    882   WINBOOL WINAPI AddPrinterDriverExA(LPSTR pName,DWORD Level,LPBYTE pDriverInfo,DWORD dwFileCopyFlags);
    883   WINBOOL WINAPI AddPrinterDriverExW(LPWSTR pName,DWORD Level,LPBYTE pDriverInfo,DWORD dwFileCopyFlags);
    884   WINBOOL WINAPI EnumPrinterDriversA(LPSTR pName,LPSTR pEnvironment,DWORD Level,LPBYTE pDriverInfo,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
    885   WINBOOL WINAPI EnumPrinterDriversW(LPWSTR pName,LPWSTR pEnvironment,DWORD Level,LPBYTE pDriverInfo,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
    886   WINBOOL WINAPI GetPrinterDriverA(HANDLE hPrinter,LPSTR pEnvironment,DWORD Level,LPBYTE pDriverInfo,DWORD cbBuf,LPDWORD pcbNeeded);
    887   WINBOOL WINAPI GetPrinterDriverW(HANDLE hPrinter,LPWSTR pEnvironment,DWORD Level,LPBYTE pDriverInfo,DWORD cbBuf,LPDWORD pcbNeeded);
    888   WINBOOL WINAPI GetPrinterDriverDirectoryA(LPSTR pName,LPSTR pEnvironment,DWORD Level,LPBYTE pDriverDirectory,DWORD cbBuf,LPDWORD pcbNeeded);
    889   WINBOOL WINAPI GetPrinterDriverDirectoryW(LPWSTR pName,LPWSTR pEnvironment,DWORD Level,LPBYTE pDriverDirectory,DWORD cbBuf,LPDWORD pcbNeeded);
    890   WINBOOL WINAPI DeletePrinterDriverA(LPSTR pName,LPSTR pEnvironment,LPSTR pDriverName);
    891   WINBOOL WINAPI DeletePrinterDriverW(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pDriverName);
    892   WINBOOL WINAPI DeletePrinterDriverExA(LPSTR pName,LPSTR pEnvironment,LPSTR pDriverName,DWORD dwDeleteFlag,DWORD dwVersionFlag);
    893   WINBOOL WINAPI DeletePrinterDriverExW(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pDriverName,DWORD dwDeleteFlag,DWORD dwVersionFlag);
    894   WINBOOL WINAPI AddPrintProcessorA(LPSTR pName,LPSTR pEnvironment,LPSTR pPathName,LPSTR pPrintProcessorName);
    895   WINBOOL WINAPI AddPrintProcessorW(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pPathName,LPWSTR pPrintProcessorName);
    896   WINBOOL WINAPI EnumPrintProcessorsA(LPSTR pName,LPSTR pEnvironment,DWORD Level,LPBYTE pPrintProcessorInfo,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
    897   WINBOOL WINAPI EnumPrintProcessorsW(LPWSTR pName,LPWSTR pEnvironment,DWORD Level,LPBYTE pPrintProcessorInfo,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
    898   WINBOOL WINAPI GetPrintProcessorDirectoryA(LPSTR pName,LPSTR pEnvironment,DWORD Level,LPBYTE pPrintProcessorInfo,DWORD cbBuf,LPDWORD pcbNeeded);
    899   WINBOOL WINAPI GetPrintProcessorDirectoryW(LPWSTR pName,LPWSTR pEnvironment,DWORD Level,LPBYTE pPrintProcessorInfo,DWORD cbBuf,LPDWORD pcbNeeded);
    900   WINBOOL WINAPI EnumPrintProcessorDatatypesA(LPSTR pName,LPSTR pPrintProcessorName,DWORD Level,LPBYTE pDatatypes,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
    901   WINBOOL WINAPI EnumPrintProcessorDatatypesW(LPWSTR pName,LPWSTR pPrintProcessorName,DWORD Level,LPBYTE pDatatypes,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
    902   WINBOOL WINAPI DeletePrintProcessorA(LPSTR pName,LPSTR pEnvironment,LPSTR pPrintProcessorName);
    903   WINBOOL WINAPI DeletePrintProcessorW(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pPrintProcessorName);
    904   DWORD WINAPI StartDocPrinterA(HANDLE hPrinter,DWORD Level,LPBYTE pDocInfo);
    905   DWORD WINAPI StartDocPrinterW(HANDLE hPrinter,DWORD Level,LPBYTE pDocInfo);
    906   WINBOOL WINAPI StartPagePrinter(HANDLE hPrinter);
    907   WINBOOL WINAPI WritePrinter(HANDLE hPrinter,LPVOID pBuf,DWORD cbBuf,LPDWORD pcWritten);
    908   WINBOOL WINAPI FlushPrinter(HANDLE hPrinter,LPVOID pBuf,DWORD cbBuf,LPDWORD pcWritten,DWORD cSleep);
    909   WINBOOL WINAPI EndPagePrinter(HANDLE hPrinter);
    910   WINBOOL WINAPI AbortPrinter(HANDLE hPrinter);
    911   WINBOOL WINAPI ReadPrinter(HANDLE hPrinter,LPVOID pBuf,DWORD cbBuf,LPDWORD pNoBytesRead);
    912   WINBOOL WINAPI EndDocPrinter(HANDLE hPrinter);
    913   WINBOOL WINAPI AddJobA(HANDLE hPrinter,DWORD Level,LPBYTE pData,DWORD cbBuf,LPDWORD pcbNeeded);
    914   WINBOOL WINAPI AddJobW(HANDLE hPrinter,DWORD Level,LPBYTE pData,DWORD cbBuf,LPDWORD pcbNeeded);
    915   WINBOOL WINAPI ScheduleJob(HANDLE hPrinter,DWORD JobId);
    916   WINBOOL WINAPI PrinterProperties(HWND hWnd,HANDLE hPrinter);
    917   LONG WINAPI DocumentPropertiesA(HWND hWnd,HANDLE hPrinter,LPSTR pDeviceName,PDEVMODEA pDevModeOutput,PDEVMODEA pDevModeInput,DWORD fMode);
    918   LONG WINAPI DocumentPropertiesW(HWND hWnd,HANDLE hPrinter,LPWSTR pDeviceName,PDEVMODEW pDevModeOutput,PDEVMODEW pDevModeInput,DWORD fMode);
    919   LONG WINAPI AdvancedDocumentPropertiesA(HWND hWnd,HANDLE hPrinter,LPSTR pDeviceName,PDEVMODEA pDevModeOutput,PDEVMODEA pDevModeInput);
    920   LONG WINAPI AdvancedDocumentPropertiesW(HWND hWnd,HANDLE hPrinter,LPWSTR pDeviceName,PDEVMODEW pDevModeOutput,PDEVMODEW pDevModeInput);
    921   LONG ExtDeviceMode(HWND hWnd,HANDLE hInst,LPDEVMODEA pDevModeOutput,LPSTR pDeviceName,LPSTR pPort,LPDEVMODEA pDevModeInput,LPSTR pProfile,DWORD fMode);
    922   DWORD WINAPI GetPrinterDataA(HANDLE hPrinter,LPSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
    923   DWORD WINAPI GetPrinterDataW(HANDLE hPrinter,LPWSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
    924   DWORD WINAPI GetPrinterDataExA(HANDLE hPrinter,LPCSTR pKeyName,LPCSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
    925   DWORD WINAPI GetPrinterDataExW(HANDLE hPrinter,LPCWSTR pKeyName,LPCWSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
    926   DWORD WINAPI EnumPrinterDataA(HANDLE hPrinter,DWORD dwIndex,LPSTR pValueName,DWORD cbValueName,LPDWORD pcbValueName,LPDWORD pType,LPBYTE pData,DWORD cbData,LPDWORD pcbData);
    927   DWORD WINAPI EnumPrinterDataW(HANDLE hPrinter,DWORD dwIndex,LPWSTR pValueName,DWORD cbValueName,LPDWORD pcbValueName,LPDWORD pType,LPBYTE pData,DWORD cbData,LPDWORD pcbData);
    928   DWORD WINAPI EnumPrinterDataExA(HANDLE hPrinter,LPCSTR pKeyName,LPBYTE pEnumValues,DWORD cbEnumValues,LPDWORD pcbEnumValues,LPDWORD pnEnumValues);
    929   DWORD WINAPI EnumPrinterDataExW(HANDLE hPrinter,LPCWSTR pKeyName,LPBYTE pEnumValues,DWORD cbEnumValues,LPDWORD pcbEnumValues,LPDWORD pnEnumValues);
    930   DWORD WINAPI EnumPrinterKeyA(HANDLE hPrinter,LPCSTR pKeyName,LPSTR pSubkey,DWORD cbSubkey,LPDWORD pcbSubkey);
    931   DWORD WINAPI EnumPrinterKeyW(HANDLE hPrinter,LPCWSTR pKeyName,LPWSTR pSubkey,DWORD cbSubkey,LPDWORD pcbSubkey);
    932   DWORD WINAPI SetPrinterDataA(HANDLE hPrinter,LPSTR pValueName,DWORD Type,LPBYTE pData,DWORD cbData);
    933   DWORD WINAPI SetPrinterDataW(HANDLE hPrinter,LPWSTR pValueName,DWORD Type,LPBYTE pData,DWORD cbData);
    934   DWORD WINAPI SetPrinterDataExA(HANDLE hPrinter,LPCSTR pKeyName,LPCSTR pValueName,DWORD Type,LPBYTE pData,DWORD cbData);
    935   DWORD WINAPI SetPrinterDataExW(HANDLE hPrinter,LPCWSTR pKeyName,LPCWSTR pValueName,DWORD Type,LPBYTE pData,DWORD cbData);
    936   DWORD WINAPI DeletePrinterDataA(HANDLE hPrinter,LPSTR pValueName);
    937   DWORD WINAPI DeletePrinterDataW(HANDLE hPrinter,LPWSTR pValueName);
    938   DWORD WINAPI DeletePrinterDataExA(HANDLE hPrinter,LPCSTR pKeyName,LPCSTR pValueName);
    939   DWORD WINAPI DeletePrinterDataExW(HANDLE hPrinter,LPCWSTR pKeyName,LPCWSTR pValueName);
    940   DWORD WINAPI DeletePrinterKeyA(HANDLE hPrinter,LPCSTR pKeyName);
    941   DWORD WINAPI DeletePrinterKeyW(HANDLE hPrinter,LPCWSTR pKeyName);
    942 
    943 #define PRINTER_NOTIFY_TYPE 0x00
    944 #define JOB_NOTIFY_TYPE 0x01
    945 
    946 #define PRINTER_NOTIFY_FIELD_SERVER_NAME 0x00
    947 #define PRINTER_NOTIFY_FIELD_PRINTER_NAME 0x01
    948 #define PRINTER_NOTIFY_FIELD_SHARE_NAME 0x02
    949 #define PRINTER_NOTIFY_FIELD_PORT_NAME 0x03
    950 #define PRINTER_NOTIFY_FIELD_DRIVER_NAME 0x04
    951 #define PRINTER_NOTIFY_FIELD_COMMENT 0x05
    952 #define PRINTER_NOTIFY_FIELD_LOCATION 0x06
    953 #define PRINTER_NOTIFY_FIELD_DEVMODE 0x07
    954 #define PRINTER_NOTIFY_FIELD_SEPFILE 0x08
    955 #define PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR 0x09
    956 #define PRINTER_NOTIFY_FIELD_PARAMETERS 0x0A
    957 #define PRINTER_NOTIFY_FIELD_DATATYPE 0x0B
    958 #define PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR 0x0C
    959 #define PRINTER_NOTIFY_FIELD_ATTRIBUTES 0x0D
    960 #define PRINTER_NOTIFY_FIELD_PRIORITY 0x0E
    961 #define PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY 0x0F
    962 #define PRINTER_NOTIFY_FIELD_START_TIME 0x10
    963 #define PRINTER_NOTIFY_FIELD_UNTIL_TIME 0x11
    964 #define PRINTER_NOTIFY_FIELD_STATUS 0x12
    965 #define PRINTER_NOTIFY_FIELD_STATUS_STRING 0x13
    966 #define PRINTER_NOTIFY_FIELD_CJOBS 0x14
    967 #define PRINTER_NOTIFY_FIELD_AVERAGE_PPM 0x15
    968 #define PRINTER_NOTIFY_FIELD_TOTAL_PAGES 0x16
    969 #define PRINTER_NOTIFY_FIELD_PAGES_PRINTED 0x17
    970 #define PRINTER_NOTIFY_FIELD_TOTAL_BYTES 0x18
    971 #define PRINTER_NOTIFY_FIELD_BYTES_PRINTED 0x19
    972 #define PRINTER_NOTIFY_FIELD_OBJECT_GUID 0x1A
    973 
    974 #define JOB_NOTIFY_FIELD_PRINTER_NAME 0x00
    975 #define JOB_NOTIFY_FIELD_MACHINE_NAME 0x01
    976 #define JOB_NOTIFY_FIELD_PORT_NAME 0x02
    977 #define JOB_NOTIFY_FIELD_USER_NAME 0x03
    978 #define JOB_NOTIFY_FIELD_NOTIFY_NAME 0x04
    979 #define JOB_NOTIFY_FIELD_DATATYPE 0x05
    980 #define JOB_NOTIFY_FIELD_PRINT_PROCESSOR 0x06
    981 #define JOB_NOTIFY_FIELD_PARAMETERS 0x07
    982 #define JOB_NOTIFY_FIELD_DRIVER_NAME 0x08
    983 #define JOB_NOTIFY_FIELD_DEVMODE 0x09
    984 #define JOB_NOTIFY_FIELD_STATUS 0x0A
    985 #define JOB_NOTIFY_FIELD_STATUS_STRING 0x0B
    986 #define JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR 0x0C
    987 #define JOB_NOTIFY_FIELD_DOCUMENT 0x0D
    988 #define JOB_NOTIFY_FIELD_PRIORITY 0x0E
    989 #define JOB_NOTIFY_FIELD_POSITION 0x0F
    990 #define JOB_NOTIFY_FIELD_SUBMITTED 0x10
    991 #define JOB_NOTIFY_FIELD_START_TIME 0x11
    992 #define JOB_NOTIFY_FIELD_UNTIL_TIME 0x12
    993 #define JOB_NOTIFY_FIELD_TIME 0x13
    994 #define JOB_NOTIFY_FIELD_TOTAL_PAGES 0x14
    995 #define JOB_NOTIFY_FIELD_PAGES_PRINTED 0x15
    996 #define JOB_NOTIFY_FIELD_TOTAL_BYTES 0x16
    997 #define JOB_NOTIFY_FIELD_BYTES_PRINTED 0x17
    998 
    999   typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE {
   1000     WORD Type;
   1001     WORD Reserved0;
   1002     DWORD Reserved1;
   1003     DWORD Reserved2;
   1004     DWORD Count;
   1005     PWORD pFields;
   1006   } PRINTER_NOTIFY_OPTIONS_TYPE,*PPRINTER_NOTIFY_OPTIONS_TYPE,*LPPRINTER_NOTIFY_OPTIONS_TYPE;
   1007 
   1008 #define PRINTER_NOTIFY_OPTIONS_REFRESH 0x01
   1009 
   1010   typedef struct _PRINTER_NOTIFY_OPTIONS {
   1011     DWORD Version;
   1012     DWORD Flags;
   1013     DWORD Count;
   1014     PPRINTER_NOTIFY_OPTIONS_TYPE pTypes;
   1015   } PRINTER_NOTIFY_OPTIONS,*PPRINTER_NOTIFY_OPTIONS,*LPPRINTER_NOTIFY_OPTIONS;
   1016 
   1017 #define PRINTER_NOTIFY_INFO_DISCARDED 0x01
   1018 
   1019   typedef struct _PRINTER_NOTIFY_INFO_DATA {
   1020     WORD Type;
   1021     WORD Field;
   1022     DWORD Reserved;
   1023     DWORD Id;
   1024     union {
   1025       DWORD adwData[2];
   1026       struct {
   1027 	DWORD cbBuf;
   1028 	LPVOID pBuf;
   1029       } Data;
   1030     } NotifyData;
   1031   } PRINTER_NOTIFY_INFO_DATA,*PPRINTER_NOTIFY_INFO_DATA,*LPPRINTER_NOTIFY_INFO_DATA;
   1032 
   1033   typedef struct _PRINTER_NOTIFY_INFO {
   1034     DWORD Version;
   1035     DWORD Flags;
   1036     DWORD Count;
   1037     PRINTER_NOTIFY_INFO_DATA aData[1];
   1038   } PRINTER_NOTIFY_INFO,*PPRINTER_NOTIFY_INFO,*LPPRINTER_NOTIFY_INFO;
   1039 
   1040   typedef struct _BINARY_CONTAINER{
   1041     DWORD cbBuf;
   1042     LPBYTE pData;
   1043   } BINARY_CONTAINER,*PBINARY_CONTAINER;
   1044 
   1045   typedef struct _BIDI_DATA{
   1046     DWORD dwBidiType;
   1047     union {
   1048       WINBOOL bData;
   1049       LONG iData;
   1050       LPWSTR sData;
   1051       FLOAT fData;
   1052       BINARY_CONTAINER biData;
   1053     } u;
   1054   } BIDI_DATA,*PBIDI_DATA,*LPBIDI_DATA;
   1055 
   1056   typedef struct _BIDI_REQUEST_DATA{
   1057     DWORD dwReqNumber;
   1058     LPWSTR pSchema;
   1059     BIDI_DATA data;
   1060   } BIDI_REQUEST_DATA ,*PBIDI_REQUEST_DATA ,*LPBIDI_REQUEST_DATA;
   1061 
   1062   typedef struct _BIDI_REQUEST_CONTAINER{
   1063     DWORD Version;
   1064     DWORD Flags;
   1065     DWORD Count;
   1066     BIDI_REQUEST_DATA aData[1 ];
   1067   }BIDI_REQUEST_CONTAINER,*PBIDI_REQUEST_CONTAINER,*LPBIDI_REQUEST_CONTAINER;
   1068 
   1069   typedef struct _BIDI_RESPONSE_DATA{
   1070     DWORD dwResult;
   1071     DWORD dwReqNumber;
   1072     LPWSTR pSchema;
   1073     BIDI_DATA data;
   1074   } BIDI_RESPONSE_DATA,*PBIDI_RESPONSE_DATA,*LPBIDI_RESPONSE_DATA;
   1075 
   1076   typedef struct _BIDI_RESPONSE_CONTAINER{
   1077     DWORD Version;
   1078     DWORD Flags;
   1079     DWORD Count;
   1080     BIDI_RESPONSE_DATA aData[1 ];
   1081   } BIDI_RESPONSE_CONTAINER,*PBIDI_RESPONSE_CONTAINER,*LPBIDI_RESPONSE_CONTAINER;
   1082 
   1083 #define BIDI_ACTION_ENUM_SCHEMA L"EnumSchema"
   1084 #define BIDI_ACTION_GET L"Get"
   1085 #define BIDI_ACTION_SET L"Set"
   1086 #define BIDI_ACTION_GET_ALL L"GetAll"
   1087 
   1088   typedef enum {
   1089     BIDI_NULL = 0,BIDI_INT = 1,BIDI_FLOAT = 2,BIDI_BOOL = 3,BIDI_STRING = 4,BIDI_TEXT = 5,BIDI_ENUM = 6,BIDI_BLOB = 7
   1090   } BIDI_TYPE;
   1091 
   1092 #define BIDI_ACCESS_ADMINISTRATOR 0x1
   1093 #define BIDI_ACCESS_USER 0x2
   1094 
   1095 #define ERROR_BIDI_STATUS_OK 0
   1096 #define ERROR_BIDI_NOT_SUPPORTED ERROR_NOT_SUPPORTED
   1097 
   1098 #define ERROR_BIDI_ERROR_BASE 13000
   1099 #define ERROR_BIDI_STATUS_WARNING (ERROR_BIDI_ERROR_BASE + 1)
   1100 #define ERROR_BIDI_SCHEMA_READ_ONLY (ERROR_BIDI_ERROR_BASE + 2)
   1101 #define ERROR_BIDI_SERVER_OFFLINE (ERROR_BIDI_ERROR_BASE + 3)
   1102 #define ERROR_BIDI_DEVICE_OFFLINE (ERROR_BIDI_ERROR_BASE + 4)
   1103 #define ERROR_BIDI_SCHEMA_NOT_SUPPORTED (ERROR_BIDI_ERROR_BASE + 5)
   1104 
   1105   DWORD WINAPI WaitForPrinterChange(HANDLE hPrinter,DWORD Flags);
   1106   HANDLE WINAPI FindFirstPrinterChangeNotification(HANDLE hPrinter,DWORD fdwFlags,DWORD fdwOptions,LPVOID pPrinterNotifyOptions);
   1107   WINBOOL WINAPI FindNextPrinterChangeNotification(HANDLE hChange,PDWORD pdwChange,LPVOID pPrinterNotifyOptions,LPVOID *ppPrinterNotifyInfo);
   1108   WINBOOL WINAPI FreePrinterNotifyInfo (PPRINTER_NOTIFY_INFO pPrinterNotifyInfo);
   1109   WINBOOL WINAPI FindClosePrinterChangeNotification(HANDLE hChange);
   1110 
   1111 #define PRINTER_CHANGE_ADD_PRINTER 0x00000001
   1112 #define PRINTER_CHANGE_SET_PRINTER 0x00000002
   1113 #define PRINTER_CHANGE_DELETE_PRINTER 0x00000004
   1114 #define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER 0x00000008
   1115 #define PRINTER_CHANGE_PRINTER 0x000000FF
   1116 #define PRINTER_CHANGE_ADD_JOB 0x00000100
   1117 #define PRINTER_CHANGE_SET_JOB 0x00000200
   1118 #define PRINTER_CHANGE_DELETE_JOB 0x00000400
   1119 #define PRINTER_CHANGE_WRITE_JOB 0x00000800
   1120 #define PRINTER_CHANGE_JOB 0x0000FF00
   1121 #define PRINTER_CHANGE_ADD_FORM 0x00010000
   1122 #define PRINTER_CHANGE_SET_FORM 0x00020000
   1123 #define PRINTER_CHANGE_DELETE_FORM 0x00040000
   1124 #define PRINTER_CHANGE_FORM 0x00070000
   1125 #define PRINTER_CHANGE_ADD_PORT 0x00100000
   1126 #define PRINTER_CHANGE_CONFIGURE_PORT 0x00200000
   1127 #define PRINTER_CHANGE_DELETE_PORT 0x00400000
   1128 #define PRINTER_CHANGE_PORT 0x00700000
   1129 #define PRINTER_CHANGE_ADD_PRINT_PROCESSOR 0x01000000
   1130 #define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR 0x04000000
   1131 #define PRINTER_CHANGE_PRINT_PROCESSOR 0x07000000
   1132 #define PRINTER_CHANGE_ADD_PRINTER_DRIVER 0x10000000
   1133 #define PRINTER_CHANGE_SET_PRINTER_DRIVER 0x20000000
   1134 #define PRINTER_CHANGE_DELETE_PRINTER_DRIVER 0x40000000
   1135 #define PRINTER_CHANGE_PRINTER_DRIVER 0x70000000
   1136 #define PRINTER_CHANGE_TIMEOUT 0x80000000
   1137 #define PRINTER_CHANGE_ALL 0x7777FFFF
   1138 
   1139 #define PrinterMessageBox __MINGW_NAME_AW(PrinterMessageBox)
   1140 #define AddForm __MINGW_NAME_AW(AddForm)
   1141 #define DeleteForm __MINGW_NAME_AW(DeleteForm)
   1142 #define GetForm __MINGW_NAME_AW(GetForm)
   1143 #define SetForm __MINGW_NAME_AW(SetForm)
   1144 #define EnumForms __MINGW_NAME_AW(EnumForms)
   1145 #define EnumMonitors __MINGW_NAME_AW(EnumMonitors)
   1146 #define AddMonitor __MINGW_NAME_AW(AddMonitor)
   1147 #define DeleteMonitor __MINGW_NAME_AW(DeleteMonitor)
   1148 #define EnumPorts __MINGW_NAME_AW(EnumPorts)
   1149 #define AddPort __MINGW_NAME_AW(AddPort)
   1150 #define ConfigurePort __MINGW_NAME_AW(ConfigurePort)
   1151 #define DeletePort __MINGW_NAME_AW(DeletePort)
   1152 #define GetDefaultPrinter __MINGW_NAME_AW(GetDefaultPrinter)
   1153 #define SetDefaultPrinter __MINGW_NAME_AW(SetDefaultPrinter)
   1154 #define SetPort __MINGW_NAME_AW(SetPort)
   1155 #define AddPrinterConnection __MINGW_NAME_AW(AddPrinterConnection)
   1156 #define DeletePrinterConnection __MINGW_NAME_AW(DeletePrinterConnection)
   1157 
   1158   DWORD WINAPI PrinterMessageBoxA(HANDLE hPrinter,DWORD Error,HWND hWnd,LPSTR pText,LPSTR pCaption,DWORD dwType);
   1159   DWORD WINAPI PrinterMessageBoxW(HANDLE hPrinter,DWORD Error,HWND hWnd,LPWSTR pText,LPWSTR pCaption,DWORD dwType);
   1160 
   1161 #define PRINTER_ERROR_INFORMATION 0x80000000
   1162 #define PRINTER_ERROR_WARNING 0x40000000
   1163 #define PRINTER_ERROR_SEVERE 0x20000000
   1164 
   1165 #define PRINTER_ERROR_OUTOFPAPER 0x00000001
   1166 #define PRINTER_ERROR_JAM 0x00000002
   1167 #define PRINTER_ERROR_OUTOFTONER 0x00000004
   1168 
   1169   WINBOOL WINAPI ClosePrinter(HANDLE hPrinter);
   1170   WINBOOL WINAPI AddFormA(HANDLE hPrinter,DWORD Level,LPBYTE pForm);
   1171   WINBOOL WINAPI AddFormW(HANDLE hPrinter,DWORD Level,LPBYTE pForm);
   1172   WINBOOL WINAPI DeleteFormA(HANDLE hPrinter,LPSTR pFormName);
   1173   WINBOOL WINAPI DeleteFormW(HANDLE hPrinter,LPWSTR pFormName);
   1174   WINBOOL WINAPI GetFormA(HANDLE hPrinter,LPSTR pFormName,DWORD Level,LPBYTE pForm,DWORD cbBuf,LPDWORD pcbNeeded);
   1175   WINBOOL WINAPI GetFormW(HANDLE hPrinter,LPWSTR pFormName,DWORD Level,LPBYTE pForm,DWORD cbBuf,LPDWORD pcbNeeded);
   1176   WINBOOL WINAPI SetFormA(HANDLE hPrinter,LPSTR pFormName,DWORD Level,LPBYTE pForm);
   1177   WINBOOL WINAPI SetFormW(HANDLE hPrinter,LPWSTR pFormName,DWORD Level,LPBYTE pForm);
   1178   WINBOOL WINAPI EnumFormsA(HANDLE hPrinter,DWORD Level,LPBYTE pForm,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
   1179   WINBOOL WINAPI EnumFormsW(HANDLE hPrinter,DWORD Level,LPBYTE pForm,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
   1180   WINBOOL WINAPI EnumMonitorsA(LPSTR pName,DWORD Level,LPBYTE pMonitor,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
   1181   WINBOOL WINAPI EnumMonitorsW(LPWSTR pName,DWORD Level,LPBYTE pMonitor,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
   1182   WINBOOL WINAPI AddMonitorA(LPSTR pName,DWORD Level,LPBYTE pMonitorInfo);
   1183   WINBOOL WINAPI AddMonitorW(LPWSTR pName,DWORD Level,LPBYTE pMonitorInfo);
   1184   WINBOOL WINAPI DeleteMonitorA(LPSTR pName,LPSTR pEnvironment,LPSTR pMonitorName);
   1185   WINBOOL WINAPI DeleteMonitorW(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pMonitorName);
   1186   WINBOOL WINAPI EnumPortsA(LPSTR pName,DWORD Level,LPBYTE pPorts,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
   1187   WINBOOL WINAPI EnumPortsW(LPWSTR pName,DWORD Level,LPBYTE pPorts,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
   1188   WINBOOL WINAPI AddPortA(LPSTR pName,HWND hWnd,LPSTR pMonitorName);
   1189   WINBOOL WINAPI AddPortW(LPWSTR pName,HWND hWnd,LPWSTR pMonitorName);
   1190   WINBOOL WINAPI ConfigurePortA(LPSTR pName,HWND hWnd,LPSTR pPortName);
   1191   WINBOOL WINAPI ConfigurePortW(LPWSTR pName,HWND hWnd,LPWSTR pPortName);
   1192   WINBOOL WINAPI DeletePortA(LPSTR pName,HWND hWnd,LPSTR pPortName);
   1193   WINBOOL WINAPI DeletePortW(LPWSTR pName,HWND hWnd,LPWSTR pPortName);
   1194   WINBOOL WINAPI XcvDataW(HANDLE hXcv,PCWSTR pszDataName,PBYTE pInputData,DWORD cbInputData,PBYTE pOutputData,DWORD cbOutputData,PDWORD pcbOutputNeeded,PDWORD pdwStatus);
   1195 
   1196 #define XcvData XcvDataW
   1197 
   1198   WINBOOL WINAPI GetDefaultPrinterA(LPSTR pszBuffer,LPDWORD pcchBuffer);
   1199   WINBOOL WINAPI GetDefaultPrinterW(LPWSTR pszBuffer,LPDWORD pcchBuffer);
   1200   WINBOOL WINAPI SetDefaultPrinterA(LPCSTR pszPrinter);
   1201   WINBOOL WINAPI SetDefaultPrinterW(LPCWSTR pszPrinter);
   1202   WINBOOL WINAPI SetPortA(LPSTR pName,LPSTR pPortName,DWORD dwLevel,LPBYTE pPortInfo);
   1203   WINBOOL WINAPI SetPortW(LPWSTR pName,LPWSTR pPortName,DWORD dwLevel,LPBYTE pPortInfo);
   1204   WINBOOL WINAPI AddPrinterConnectionA(LPSTR pName);
   1205   WINBOOL WINAPI AddPrinterConnectionW(LPWSTR pName);
   1206   WINBOOL WINAPI DeletePrinterConnectionA(LPSTR pName);
   1207   WINBOOL WINAPI DeletePrinterConnectionW(LPWSTR pName);
   1208   HANDLE WINAPI ConnectToPrinterDlg(HWND hwnd,DWORD Flags);
   1209 
   1210   typedef struct _PROVIDOR_INFO_1A{
   1211     LPSTR pName;
   1212     LPSTR pEnvironment;
   1213     LPSTR pDLLName;
   1214   } PROVIDOR_INFO_1A,*PPROVIDOR_INFO_1A,*LPPROVIDOR_INFO_1A;
   1215 
   1216   typedef struct _PROVIDOR_INFO_1W{
   1217     LPWSTR pName;
   1218     LPWSTR pEnvironment;
   1219     LPWSTR pDLLName;
   1220   } PROVIDOR_INFO_1W,*PPROVIDOR_INFO_1W,*LPPROVIDOR_INFO_1W;
   1221 
   1222   __MINGW_TYPEDEF_AW(PROVIDOR_INFO_1)
   1223   __MINGW_TYPEDEF_AW(PPROVIDOR_INFO_1)
   1224   __MINGW_TYPEDEF_AW(LPPROVIDOR_INFO_1)
   1225 
   1226   typedef struct _PROVIDOR_INFO_2A{
   1227     LPSTR pOrder;
   1228   } PROVIDOR_INFO_2A,*PPROVIDOR_INFO_2A,*LPPROVIDOR_INFO_2A;
   1229 
   1230   typedef struct _PROVIDOR_INFO_2W{
   1231     LPWSTR pOrder;
   1232   } PROVIDOR_INFO_2W,*PPROVIDOR_INFO_2W,*LPPROVIDOR_INFO_2W;
   1233 
   1234   __MINGW_TYPEDEF_AW(PROVIDOR_INFO_2)
   1235   __MINGW_TYPEDEF_AW(PPROVIDOR_INFO_2)
   1236   __MINGW_TYPEDEF_AW(LPPROVIDOR_INFO_2)
   1237 
   1238 #define AddPrintProvidor __MINGW_NAME_AW(AddPrintProvidor)
   1239 #define DeletePrintProvidor __MINGW_NAME_AW(DeletePrintProvidor)
   1240 #define IsValidDevmode __MINGW_NAME_AW(IsValidDevmode)
   1241 
   1242   WINBOOL WINAPI AddPrintProvidorA(LPSTR pName,DWORD level,LPBYTE pProvidorInfo);
   1243   WINBOOL WINAPI AddPrintProvidorW(LPWSTR pName,DWORD level,LPBYTE pProvidorInfo);
   1244   WINBOOL WINAPI DeletePrintProvidorA(LPSTR pName,LPSTR pEnvironment,LPSTR pPrintProvidorName);
   1245   WINBOOL WINAPI DeletePrintProvidorW(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pPrintProvidorName);
   1246   WINBOOL WINAPI IsValidDevmodeA (PDEVMODEA pDevmode,size_t DevmodeSize);
   1247   WINBOOL WINAPI IsValidDevmodeW (PDEVMODEW pDevmode,size_t DevmodeSize);
   1248 
   1249 #define SPLREG_DEFAULT_SPOOL_DIRECTORY TEXT("DefaultSpoolDirectory")
   1250 #define SPLREG_PORT_THREAD_PRIORITY_DEFAULT TEXT("PortThreadPriorityDefault")
   1251 #define SPLREG_PORT_THREAD_PRIORITY TEXT("PortThreadPriority")
   1252 #define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT TEXT("SchedulerThreadPriorityDefault")
   1253 #define SPLREG_SCHEDULER_THREAD_PRIORITY TEXT("SchedulerThreadPriority")
   1254 #define SPLREG_BEEP_ENABLED TEXT("BeepEnabled")
   1255 #define SPLREG_NET_POPUP TEXT("NetPopup")
   1256 #define SPLREG_RETRY_POPUP TEXT("RetryPopup")
   1257 #define SPLREG_NET_POPUP_TO_COMPUTER TEXT("NetPopupToComputer")
   1258 #define SPLREG_EVENT_LOG TEXT("EventLog")
   1259 #define SPLREG_MAJOR_VERSION TEXT("MajorVersion")
   1260 #define SPLREG_MINOR_VERSION TEXT("MinorVersion")
   1261 #define SPLREG_ARCHITECTURE TEXT("Architecture")
   1262 #define SPLREG_OS_VERSION TEXT("OSVersion")
   1263 #define SPLREG_OS_VERSIONEX TEXT("OSVersionEx")
   1264 #define SPLREG_DS_PRESENT TEXT("DsPresent")
   1265 #define SPLREG_DS_PRESENT_FOR_USER TEXT("DsPresentForUser")
   1266 #define SPLREG_REMOTE_FAX TEXT("RemoteFax")
   1267 #define SPLREG_RESTART_JOB_ON_POOL_ERROR TEXT("RestartJobOnPoolError")
   1268 #define SPLREG_RESTART_JOB_ON_POOL_ENABLED TEXT("RestartJobOnPoolEnabled")
   1269 #define SPLREG_DNS_MACHINE_NAME TEXT("DNSMachineName")
   1270 #define SPLREG_ALLOW_USER_MANAGEFORMS TEXT("AllowUserManageForms")
   1271 #define SPLREG_WEBSHAREMGMT TEXT("WebShareMgmt")
   1272 
   1273 #define SERVER_ACCESS_ADMINISTER 0x00000001
   1274 #define SERVER_ACCESS_ENUMERATE 0x00000002
   1275 
   1276 #define PRINTER_ACCESS_ADMINISTER 0x00000004
   1277 #define PRINTER_ACCESS_USE 0x00000008
   1278 
   1279 #define JOB_ACCESS_ADMINISTER 0x00000010
   1280 #define JOB_ACCESS_READ 0x00000020
   1281 
   1282 #define SERVER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE)
   1283 #define SERVER_READ (STANDARD_RIGHTS_READ | SERVER_ACCESS_ENUMERATE)
   1284 #define SERVER_WRITE (STANDARD_RIGHTS_WRITE | SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE)
   1285 #define SERVER_EXECUTE (STANDARD_RIGHTS_EXECUTE | SERVER_ACCESS_ENUMERATE)
   1286 #define PRINTER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE)
   1287 #define PRINTER_READ (STANDARD_RIGHTS_READ | PRINTER_ACCESS_USE)
   1288 #define PRINTER_WRITE (STANDARD_RIGHTS_WRITE | PRINTER_ACCESS_USE)
   1289 #define PRINTER_EXECUTE (STANDARD_RIGHTS_EXECUTE | PRINTER_ACCESS_USE)
   1290 #define JOB_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | JOB_ACCESS_ADMINISTER | JOB_ACCESS_READ)
   1291 #define JOB_READ (STANDARD_RIGHTS_READ | JOB_ACCESS_READ)
   1292 #define JOB_WRITE (STANDARD_RIGHTS_WRITE | JOB_ACCESS_ADMINISTER)
   1293 #define JOB_EXECUTE (STANDARD_RIGHTS_EXECUTE | JOB_ACCESS_ADMINISTER)
   1294 
   1295 #define SPLDS_SPOOLER_KEY TEXT("DsSpooler")
   1296 #define SPLDS_DRIVER_KEY TEXT("DsDriver")
   1297 #define SPLDS_USER_KEY TEXT("DsUser")
   1298 
   1299 #define SPLDS_ASSET_NUMBER TEXT("assetNumber")
   1300 #define SPLDS_BYTES_PER_MINUTE TEXT("bytesPerMinute")
   1301 #define SPLDS_DESCRIPTION TEXT("description")
   1302 #define SPLDS_DRIVER_NAME TEXT("driverName")
   1303 #define SPLDS_DRIVER_VERSION TEXT("driverVersion")
   1304 #define SPLDS_LOCATION TEXT("location")
   1305 #define SPLDS_PORT_NAME TEXT("portName")
   1306 #define SPLDS_PRINT_ATTRIBUTES TEXT("printAttributes")
   1307 #define SPLDS_PRINT_BIN_NAMES TEXT("printBinNames")
   1308 #define SPLDS_PRINT_COLLATE TEXT("printCollate")
   1309 #define SPLDS_PRINT_COLOR TEXT("printColor")
   1310 #define SPLDS_PRINT_DUPLEX_SUPPORTED TEXT("printDuplexSupported")
   1311 #define SPLDS_PRINT_END_TIME TEXT("printEndTime")
   1312 #define SPLDS_PRINTER_CLASS TEXT("printQueue")
   1313 #define SPLDS_PRINTER_NAME TEXT("printerName")
   1314 #define SPLDS_PRINT_KEEP_PRINTED_JOBS TEXT("printKeepPrintedJobs")
   1315 #define SPLDS_PRINT_LANGUAGE TEXT("printLanguage")
   1316 #define SPLDS_PRINT_MAC_ADDRESS TEXT("printMACAddress")
   1317 #define SPLDS_PRINT_MAX_X_EXTENT TEXT("printMaxXExtent")
   1318 #define SPLDS_PRINT_MAX_Y_EXTENT TEXT("printMaxYExtent")
   1319 #define SPLDS_PRINT_MAX_RESOLUTION_SUPPORTED TEXT("printMaxResolutionSupported")
   1320 #define SPLDS_PRINT_MEDIA_READY TEXT("printMediaReady")
   1321 #define SPLDS_PRINT_MEDIA_SUPPORTED TEXT("printMediaSupported")
   1322 #define SPLDS_PRINT_MEMORY TEXT("printMemory")
   1323 #define SPLDS_PRINT_MIN_X_EXTENT TEXT("printMinXExtent")
   1324 #define SPLDS_PRINT_MIN_Y_EXTENT TEXT("printMinYExtent")
   1325 #define SPLDS_PRINT_NETWORK_ADDRESS TEXT("printNetworkAddress")
   1326 #define SPLDS_PRINT_NOTIFY TEXT("printNotify")
   1327 #define SPLDS_PRINT_NUMBER_UP TEXT("printNumberUp")
   1328 #define SPLDS_PRINT_ORIENTATIONS_SUPPORTED TEXT("printOrientationsSupported")
   1329 #define SPLDS_PRINT_OWNER TEXT("printOwner")
   1330 #define SPLDS_PRINT_PAGES_PER_MINUTE TEXT("printPagesPerMinute")
   1331 #define SPLDS_PRINT_RATE TEXT("printRate")
   1332 #define SPLDS_PRINT_RATE_UNIT TEXT("printRateUnit")
   1333 #define SPLDS_PRINT_SEPARATOR_FILE TEXT("printSeparatorFile")
   1334 #define SPLDS_PRINT_SHARE_NAME TEXT("printShareName")
   1335 #define SPLDS_PRINT_SPOOLING TEXT("printSpooling")
   1336 #define SPLDS_PRINT_STAPLING_SUPPORTED TEXT("printStaplingSupported")
   1337 #define SPLDS_PRINT_START_TIME TEXT("printStartTime")
   1338 #define SPLDS_PRINT_STATUS TEXT("printStatus")
   1339 #define SPLDS_PRIORITY TEXT("priority")
   1340 #define SPLDS_SERVER_NAME TEXT("serverName")
   1341 #define SPLDS_SHORT_SERVER_NAME TEXT("shortServerName")
   1342 #define SPLDS_UNC_NAME TEXT("uNCName")
   1343 #define SPLDS_URL TEXT("url")
   1344 #define SPLDS_FLAGS TEXT("flags")
   1345 #define SPLDS_VERSION_NUMBER TEXT("versionNumber")
   1346 
   1347 #define SPLDS_PRINTER_NAME_ALIASES TEXT("printerNameAliases")
   1348 #define SPLDS_PRINTER_LOCATIONS TEXT("printerLocations")
   1349 #define SPLDS_PRINTER_MODEL TEXT("printerModel")
   1350 
   1351 #if (_WIN32_WINNT >= 0x0600)
   1352 #define AddPrinterConnection2 __MINGW_NAME_AW(AddPrinterConnection2)
   1353 #define DeletePrinterDriverPackage __MINGW_NAME_AW(DeletePrinterDriverPackage)
   1354 #define DocumentEvent __MINGW_NAME_AW(DocumentEvent)
   1355 
   1356 #define PRINTER_CONNECTION_MISMATCH 0x00000020
   1357 #define PRINTER_CONNECTION_NO_UI    0x00000040
   1358 
   1359 typedef enum tagPRINTER_OPTION_FLAGS {
   1360   PRINTER_OPTION_NO_CACHE,
   1361   PRINTER_OPTION_CACHE,
   1362   PRINTER_OPTION_CLIENT_CHANGE
   1363 } PRINTER_OPTION_FLAGS;
   1364 
   1365 typedef enum tagEPrintXPSJobOperation {
   1366   kJobProduction,
   1367   kJobConsumption
   1368 } EPrintXPSJobOperation;
   1369 
   1370 typedef enum tagEPrintXPSJobProgress {
   1371   kAddingDocumentSequence,
   1372   kDocumentSequenceAdded,
   1373   kAddingFixedDocument,
   1374   kFixedDocumentAdded,
   1375   kAddingFixedPage,
   1376   kFixedPageAdded,
   1377   kResourceAdded,
   1378   kFontAdded,
   1379   kImageAdded,
   1380   kXpsDocumentCommitted
   1381 } EPrintXPSJobProgress;
   1382 
   1383 typedef struct _PRINTER_CONNECTION_INFO_1 {
   1384   DWORD  dwFlags;
   1385   LPTSTR pszDriverName;
   1386 } PRINTER_CONNECTION_INFO_1, *PPRINTER_CONNECTION_INFO_1;
   1387 
   1388   WINBOOL AddPrinterConnection2W(HWND hWnd,LPCWSTR pszName,DWORD dwLevel,PVOID pConnectionInfo);
   1389   WINBOOL AddPrinterConnection2A(HWND hWnd,LPCSTR pszName,DWORD dwLevel,PVOID pConnectionInfo); /*Not supported and returns ERROR_NOT_SUPPORTED.*/
   1390 
   1391 HRESULT WINAPI DeletePrinterDriverPackageA(
   1392   LPCSTR pszServer,
   1393   LPCSTR pszInfPath,
   1394   LPCSTR pszEnvironment
   1395 );
   1396 
   1397 HRESULT WINAPI DeletePrinterDriverPackageW(
   1398   LPCWSTR pszServer,
   1399   LPCWSTR pszInfPath,
   1400   LPCWSTR pszEnvironment
   1401 );
   1402 
   1403 HRESULT DocumentEventA(
   1404   HANDLE hPrinter,
   1405   HDC hdc,
   1406   INT iEsc,
   1407   ULONG cbIn,
   1408   PVOID pvIn,
   1409   ULONG cbOut,
   1410   PVOID pvOut
   1411 );
   1412 
   1413 HRESULT DocumentEventW(
   1414   HANDLE hPrinter,
   1415   HDC hdc,
   1416   INT iEsc,
   1417   ULONG cbIn,
   1418   PVOID pvIn,
   1419   ULONG cbOut,
   1420   PVOID pvOut
   1421 );
   1422 
   1423 typedef struct _DRIVER_INFO_8W {
   1424   DWORD     cVersion;
   1425   LPWSTR    pName;
   1426   LPWSTR    pEnvironment;
   1427   LPWSTR    pDriverPath;
   1428   LPWSTR    pDataFile;
   1429   LPWSTR    pConfigFile;
   1430   LPWSTR    pHelpFile;
   1431   LPWSTR    pDependentFiles;
   1432   LPWSTR    pMonitorName;
   1433   LPWSTR    pDefaultDataType;
   1434   LPWSTR    pszzPreviousNames;
   1435   FILETIME  ftDriverDate;
   1436   DWORDLONG dwlDriverVersion;
   1437   LPWSTR    pszMfgName;
   1438   LPWSTR    pszOEMUrl;
   1439   LPWSTR    pszHardwareID;
   1440   LPWSTR    pszProvider;
   1441   LPWSTR    pszPrintProcessor;
   1442   LPWSTR    pszVendorSetup;
   1443   LPWSTR    pszzColorProfiles;
   1444   LPWSTR    pszInfPath;
   1445   DWORD     dwPrinterDriverAttributes;
   1446   LPWSTR    pszzCoreDriverDependencies;
   1447   FILETIME  ftMinInboxDriverVerDate;
   1448   DWORDLONG dwlMinInboxDriverVerVersion;
   1449 } DRIVER_INFO_8W, *PDRIVER_INFO_8W, *LPDRIVER_INFO_8W;
   1450 
   1451 typedef struct _DRIVER_INFO_8A {
   1452   DWORD     cVersion;
   1453   LPSTR    pName;
   1454   LPSTR    pEnvironment;
   1455   LPSTR    pDriverPath;
   1456   LPSTR    pDataFile;
   1457   LPSTR    pConfigFile;
   1458   LPSTR    pHelpFile;
   1459   LPSTR    pDependentFiles;
   1460   LPSTR    pMonitorName;
   1461   LPSTR    pDefaultDataType;
   1462   LPSTR    pszzPreviousNames;
   1463   FILETIME  ftDriverDate;
   1464   DWORDLONG dwlDriverVersion;
   1465   LPSTR    pszMfgName;
   1466   LPSTR    pszOEMUrl;
   1467   LPSTR    pszHardwareID;
   1468   LPSTR    pszProvider;
   1469   LPSTR    pszPrintProcessor;
   1470   LPSTR    pszVendorSetup;
   1471   LPSTR    pszzColorProfiles;
   1472   LPSTR    pszInfPath;
   1473   DWORD     dwPrinterDriverAttributes;
   1474   LPSTR    pszzCoreDriverDependencies;
   1475   FILETIME  ftMinInboxDriverVerDate;
   1476   DWORDLONG dwlMinInboxDriverVerVersion;
   1477 } DRIVER_INFO_8A, *PDRIVER_INFO_8A, *LPDRIVER_INFO_8A;
   1478 
   1479 typedef struct _FORM_INFO_2A {
   1480   DWORD   Flags;
   1481   LPSTR   pName;
   1482   SIZEL   Size;
   1483   RECTL   ImageableArea;
   1484   LPCSTR  pKeyword;
   1485   DWORD   StringType;
   1486   LPCSTR  pMuiDll;
   1487   DWORD   dwResourceId;
   1488   LPCSTR  pDisplayName;
   1489   LANGID  wLangId;
   1490 } FORM_INFO_2A, *PFORM_INFO_2A;
   1491 
   1492 typedef struct _FORM_INFO_2W {
   1493   DWORD   Flags;
   1494   LPWSTR  pName;
   1495   SIZEL   Size;
   1496   RECTL   ImageableArea;
   1497   LPCSTR  pKeyword;
   1498   DWORD   StringType;
   1499   LPCWSTR pMuiDll;
   1500   DWORD   dwResourceId;
   1501   LPCWSTR pDisplayName;
   1502   LANGID  wLangId;
   1503 } FORM_INFO_2W, *PFORM_INFO_2W;
   1504 
   1505 __MINGW_TYPEDEF_AW(DRIVER_INFO_8)
   1506 __MINGW_TYPEDEF_AW(PDRIVER_INFO_8)
   1507 __MINGW_TYPEDEF_AW(LPDRIVER_INFO_8)
   1508 __MINGW_TYPEDEF_AW(FORM_INFO_2)
   1509 __MINGW_TYPEDEF_AW(PFORM_INFO_2)
   1510 
   1511 typedef struct _PRINTPROCESSOR_CAPS_2 {
   1512   DWORD dwLevel;
   1513   DWORD dwNupOptions;
   1514   DWORD dwPageOrderFlags;
   1515   DWORD dwNumberOfCopies;
   1516   DWORD dwNupDirectionCaps;
   1517   DWORD dwNupBorderCaps;
   1518   DWORD dwBookletHandlingCaps;
   1519   DWORD dwDuplexHandlingCaps;
   1520   DWORD dwScalingCaps;
   1521 } PRINTPROCESSOR_CAPS_2, *PPRINTPROCESSOR_CAPS_2;
   1522 
   1523 HRESULT ReportJobProcessingProgress(
   1524   HANDLE printerHandle,
   1525   ULONG jobId,
   1526   EPrintXPSJobOperation jobOperation,
   1527   EPrintXPSJobProgress jobProgress
   1528 );
   1529 
   1530 typedef struct _CORE_PRINTER_DRIVERA {
   1531   GUID      CoreDriverGUID;
   1532   FILETIME  ftDriverDate;
   1533   DWORDLONG dwlDriverVersion;
   1534   CHAR      szPackageID[MAX_PATH];
   1535 } CORE_PRINTER_DRIVERA, *PCORE_PRINTER_DRIVERA;
   1536 
   1537 typedef struct _CORE_PRINTER_DRIVERW {
   1538   GUID      CoreDriverGUID;
   1539   FILETIME  ftDriverDate;
   1540   DWORDLONG dwlDriverVersion;
   1541   WCHAR     szPackageID[MAX_PATH];
   1542 } CORE_PRINTER_DRIVERW, *PCORE_PRINTER_DRIVERW;
   1543 
   1544 typedef struct _PRINTER_OPTIONS {
   1545   UINT  cbSize;
   1546   DWORD dwFlags;
   1547 } PRINTER_OPTIONS, *PPRINTER_OPTIONS;
   1548 
   1549 __MINGW_TYPEDEF_AW(CORE_PRINTER_DRIVER)
   1550 __MINGW_TYPEDEF_AW(PCORE_PRINTER_DRIVER)
   1551 #define GetCorePrinterDrivers __MINGW_NAME_AW(GetCorePrinterDrivers)
   1552 #define GetPrinterDriver2 __MINGW_NAME_AW(GetPrinterDriver2)
   1553 #define GetPrinterDriverPackagePath __MINGW_NAME_AW(GetPrinterDriverPackagePath)
   1554 #define GetSpoolFileHandle __MINGW_NAME_AW(GetSpoolFileHandle)
   1555 
   1556 HRESULT WINAPI GetCorePrinterDriversA(
   1557   LPCSTR pszServer,
   1558   LPCSTR pszEnvironment,
   1559   LPCSTR pszzCoreDriverDependencies,
   1560   DWORD cCorePrinterDrivers,
   1561   PCORE_PRINTER_DRIVERA pCorePrinterDrivers
   1562 );
   1563 
   1564 HRESULT WINAPI GetCorePrinterDriversW(
   1565   LPCWSTR pszServer,
   1566   LPCWSTR pszEnvironment,
   1567   LPCWSTR pszzCoreDriverDependencies,
   1568   DWORD cCorePrinterDrivers,
   1569   PCORE_PRINTER_DRIVERW pCorePrinterDrivers
   1570 );
   1571 
   1572 /*Unsupported*/
   1573 WINBOOL WINAPI GetPrinterDriver2A(
   1574   HWND hWnd,
   1575   HANDLE hPrinter,
   1576   LPSTR pEnvironment,
   1577   DWORD Level,
   1578   LPBYTE pDriverInfo,
   1579   DWORD cbBuf,
   1580   LPDWORD pcbNeeded
   1581 );
   1582 
   1583 WINBOOL WINAPI GetPrinterDriver2W(
   1584   HWND hWnd,
   1585   HANDLE hPrinter,
   1586   LPWSTR pEnvironment,
   1587   DWORD Level,
   1588   LPBYTE pDriverInfo,
   1589   DWORD cbBuf,
   1590   LPDWORD pcbNeeded
   1591 );
   1592 
   1593 HRESULT WINAPI GetPrinterDriverPackagePathA(
   1594   LPCSTR pszServer,
   1595   LPCSTR pszEnvironment,
   1596   LPCSTR pszLanguage,
   1597   LPCSTR pszPackageID,
   1598   LPSTR  pszDriverPackageCab,
   1599   DWORD  cchDriverPackageCab,
   1600   LPDWORD pcchRequiredSize
   1601 );
   1602 
   1603 HRESULT WINAPI GetPrinterDriverPackagePathW(
   1604   LPCWSTR pszServer,
   1605   LPCWSTR pszEnvironment,
   1606   LPCWSTR pszLanguage,
   1607   LPCWSTR pszPackageID,
   1608   LPWSTR  pszDriverPackageCab,
   1609   DWORD   cchDriverPackageCab,
   1610   LPDWORD pcchRequiredSize
   1611 );
   1612 
   1613 HANDLE WINAPI GetSpoolFileHandleA(
   1614   HANDLE hPrinter
   1615 );
   1616 
   1617 HANDLE WINAPI GetSpoolFileHandleW(
   1618   HANDLE hPrinter
   1619 );
   1620 
   1621 HANDLE WINAPI CommitSpoolData(
   1622   HANDLE hPrinter,
   1623   HANDLE hSpoolFile,
   1624   DWORD cbCommit
   1625 );
   1626 
   1627 WINBOOL WINAPI CloseSpoolFileHandle(
   1628   HANDLE hPrinter,
   1629   HANDLE hSpoolFile
   1630 );
   1631 
   1632 WINBOOL WINAPI OpenPrinter2A(
   1633   LPCSTR pPrinterName,
   1634   LPHANDLE phPrinter,
   1635   LPPRINTER_DEFAULTS pDefault,
   1636   PPRINTER_OPTIONS pOptions
   1637 );
   1638 
   1639 WINBOOL WINAPI OpenPrinter2W(
   1640   LPCWSTR pPrinterName,
   1641   LPHANDLE phPrinter,
   1642   LPPRINTER_DEFAULTS pDefault,
   1643   PPRINTER_OPTIONS pOptions
   1644 );
   1645 
   1646 #define OpenPrinter2 __MINGW_NAME_AW(OpenPrinter2)
   1647 
   1648 HRESULT WINAPI UploadPrinterDriverPackageA(
   1649   LPCSTR pszServer,
   1650   LPCSTR pszInfPath,
   1651   LPCSTR pszEnvironment,
   1652   DWORD dwFlags,
   1653   HWND hwnd,
   1654   LPSTR pszDestInfPath,
   1655   PULONG pcchDestInfPath
   1656 );
   1657 
   1658 HRESULT WINAPI UploadPrinterDriverPackageW(
   1659   LPCWSTR pszServer,
   1660   LPCWSTR pszInfPath,
   1661   LPCWSTR pszEnvironment,
   1662   DWORD dwFlags,
   1663   HWND hwnd,
   1664   LPWSTR pszDestInfPath,
   1665   PULONG pcchDestInfPath
   1666 );
   1667 
   1668 #define UploadPrinterDriverPackage __MINGW_NAME_AW(UploadPrinterDriverPackage)
   1669 
   1670 #endif /*(_WIN32_WINNT >= 0x0600)*/
   1671 
   1672 #ifdef __cplusplus
   1673 }
   1674 #endif
   1675 #endif
   1676