master
   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
  16extern "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
1359typedef enum tagPRINTER_OPTION_FLAGS {
1360  PRINTER_OPTION_NO_CACHE,
1361  PRINTER_OPTION_CACHE,
1362  PRINTER_OPTION_CLIENT_CHANGE 
1363} PRINTER_OPTION_FLAGS;
1364
1365typedef enum tagEPrintXPSJobOperation {
1366  kJobProduction,
1367  kJobConsumption 
1368} EPrintXPSJobOperation;
1369
1370typedef 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
1383typedef 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
1391HRESULT WINAPI DeletePrinterDriverPackageA(
1392  LPCSTR pszServer,
1393  LPCSTR pszInfPath,
1394  LPCSTR pszEnvironment
1395);
1396
1397HRESULT WINAPI DeletePrinterDriverPackageW(
1398  LPCWSTR pszServer,
1399  LPCWSTR pszInfPath,
1400  LPCWSTR pszEnvironment
1401);
1402
1403HRESULT DocumentEventA(
1404  HANDLE hPrinter,
1405  HDC hdc,
1406  INT iEsc,
1407  ULONG cbIn,
1408  PVOID pvIn,
1409  ULONG cbOut,
1410  PVOID pvOut
1411);
1412
1413HRESULT DocumentEventW(
1414  HANDLE hPrinter,
1415  HDC hdc,
1416  INT iEsc,
1417  ULONG cbIn,
1418  PVOID pvIn,
1419  ULONG cbOut,
1420  PVOID pvOut
1421);
1422
1423typedef 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
1451typedef 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
1479typedef 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
1492typedef 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
1511typedef 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
1523HRESULT ReportJobProcessingProgress(
1524  HANDLE printerHandle,
1525  ULONG jobId,
1526  EPrintXPSJobOperation jobOperation,
1527  EPrintXPSJobProgress jobProgress
1528);
1529
1530typedef 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
1537typedef 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
1544typedef 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
1556HRESULT WINAPI GetCorePrinterDriversA(
1557  LPCSTR pszServer,
1558  LPCSTR pszEnvironment,
1559  LPCSTR pszzCoreDriverDependencies,
1560  DWORD cCorePrinterDrivers,
1561  PCORE_PRINTER_DRIVERA pCorePrinterDrivers
1562);
1563
1564HRESULT WINAPI GetCorePrinterDriversW(
1565  LPCWSTR pszServer,
1566  LPCWSTR pszEnvironment,
1567  LPCWSTR pszzCoreDriverDependencies,
1568  DWORD cCorePrinterDrivers,
1569  PCORE_PRINTER_DRIVERW pCorePrinterDrivers
1570);
1571
1572/*Unsupported*/
1573WINBOOL 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
1583WINBOOL 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
1593HRESULT 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
1603HRESULT 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
1613HANDLE WINAPI GetSpoolFileHandleA(
1614  HANDLE hPrinter
1615);
1616
1617HANDLE WINAPI GetSpoolFileHandleW(
1618  HANDLE hPrinter
1619);
1620
1621HANDLE WINAPI CommitSpoolData(
1622  HANDLE hPrinter,
1623  HANDLE hSpoolFile,
1624  DWORD cbCommit
1625);
1626
1627WINBOOL WINAPI CloseSpoolFileHandle(
1628  HANDLE hPrinter,
1629  HANDLE hSpoolFile
1630);
1631
1632WINBOOL WINAPI OpenPrinter2A(
1633  LPCSTR pPrinterName,
1634  LPHANDLE phPrinter,
1635  LPPRINTER_DEFAULTS pDefault,
1636  PPRINTER_OPTIONS pOptions
1637);
1638
1639WINBOOL 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
1648HRESULT 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
1658HRESULT 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