xref: /reactos/sdk/include/psdk/winspool.h (revision 1734f297)
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 typedef struct _DRIVER_INFO_8W {
537   DWORD     cVersion;
538   LPWSTR    pName;
539   LPWSTR    pEnvironment;
540   LPWSTR    pDriverPath;
541   LPWSTR    pDataFile;
542   LPWSTR    pConfigFile;
543   LPWSTR    pHelpFile;
544   LPWSTR    pDependentFiles;
545   LPWSTR    pMonitorName;
546   LPWSTR    pDefaultDataType;
547   LPWSTR    pszzPreviousNames;
548   FILETIME  ftDriverDate;
549   DWORDLONG dwlDriverVersion;
550   LPWSTR    pszMfgName;
551   LPWSTR    pszOEMUrl;
552   LPWSTR    pszHardwareID;
553   LPWSTR    pszProvider;
554   LPWSTR    pszPrintProcessor;
555   LPWSTR    pszVendorSetup;
556   LPWSTR    pszzColorProfiles;
557   LPWSTR    pszInfPath;
558   DWORD     dwPrinterDriverAttributes;
559   LPWSTR    pszzCoreDriverDependencies;
560   FILETIME  ftMinInboxDriverVerDate;
561   DWORDLONG dwlMinInboxDriverVerVersion;
562 } DRIVER_INFO_8W, *PDRIVER_INFO_8W, *LPDRIVER_INFO_8W;
563 
564 typedef struct _DRIVER_INFO_8A {
565   DWORD     cVersion;
566   LPSTR     pName;
567   LPSTR     pEnvironment;
568   LPSTR     pDriverPath;
569   LPSTR     pDataFile;
570   LPSTR     pConfigFile;
571   LPSTR     pHelpFile;
572   LPSTR     pDependentFiles;
573   LPSTR     pMonitorName;
574   LPSTR     pDefaultDataType;
575   LPSTR     pszzPreviousNames;
576   FILETIME  ftDriverDate;
577   DWORDLONG dwlDriverVersion;
578   LPSTR     pszMfgName;
579   LPSTR     pszOEMUrl;
580   LPSTR     pszHardwareID;
581   LPSTR     pszProvider;
582   LPSTR     pszPrintProcessor;
583   LPSTR     pszVendorSetup;
584   LPSTR     pszzColorProfiles;
585   LPSTR     pszInfPath;
586   DWORD     dwPrinterDriverAttributes;
587   LPSTR     pszzCoreDriverDependencies;
588   FILETIME  ftMinInboxDriverVerDate;
589   DWORDLONG dwlMinInboxDriverVerVersion;
590 } DRIVER_INFO_8A, *PDRIVER_INFO_8A, *LPDRIVER_INFO_8A;
591 
592 __MINGW_TYPEDEF_AW(DRIVER_INFO_8)
593 __MINGW_TYPEDEF_AW(PDRIVER_INFO_8)
594 __MINGW_TYPEDEF_AW(LPDRIVER_INFO_8)
595 
596 #define DRIVER_KERNELMODE 0x00000001
597 #define DRIVER_USERMODE 0x00000002
598 
599 #define DPD_DELETE_UNUSED_FILES 0x00000001
600 #define DPD_DELETE_SPECIFIC_VERSION 0x00000002
601 #define DPD_DELETE_ALL_FILES 0x00000004
602 
603 #define APD_STRICT_UPGRADE 0x00000001
604 #define APD_STRICT_DOWNGRADE 0x00000002
605 #define APD_COPY_ALL_FILES 0x00000004
606 #define APD_COPY_NEW_FILES 0x00000008
607 #define APD_COPY_FROM_DIRECTORY 0x00000010
608 
609 typedef struct _DOC_INFO_1A {
610     LPSTR pDocName;
611     LPSTR pOutputFile;
612     LPSTR pDatatype;
613 } DOC_INFO_1A,*PDOC_INFO_1A,*LPDOC_INFO_1A;
614 
615 typedef struct _DOC_INFO_1W {
616     LPWSTR pDocName;
617     LPWSTR pOutputFile;
618     LPWSTR pDatatype;
619 } DOC_INFO_1W,*PDOC_INFO_1W,*LPDOC_INFO_1W;
620 
621 __MINGW_TYPEDEF_AW(DOC_INFO_1)
622 __MINGW_TYPEDEF_AW(PDOC_INFO_1)
623 __MINGW_TYPEDEF_AW(LPDOC_INFO_1)
624 
625 typedef struct _FORM_INFO_1A {
626     DWORD Flags;
627     LPSTR pName;
628     SIZEL Size;
629     RECTL ImageableArea;
630 } FORM_INFO_1A,*PFORM_INFO_1A,*LPFORM_INFO_1A;
631 
632 typedef struct _FORM_INFO_1W {
633     DWORD Flags;
634     LPWSTR pName;
635     SIZEL Size;
636     RECTL ImageableArea;
637 } FORM_INFO_1W,*PFORM_INFO_1W,*LPFORM_INFO_1W;
638 
639 __MINGW_TYPEDEF_AW(FORM_INFO_1)
640 __MINGW_TYPEDEF_AW(PFORM_INFO_1)
641 __MINGW_TYPEDEF_AW(LPFORM_INFO_1)
642 
643 typedef struct _FORM_INFO_2A {
644   DWORD   Flags;
645   LPSTR   pName;
646   SIZEL   Size;
647   RECTL   ImageableArea;
648   LPCSTR  pKeyword;
649   DWORD   StringType;
650   LPCSTR  pMuiDll;
651   DWORD   dwResourceId;
652   LPCSTR  pDisplayName;
653   LANGID  wLangId;
654 } FORM_INFO_2A, *PFORM_INFO_2A;
655 
656 typedef struct _FORM_INFO_2W {
657   DWORD   Flags;
658   LPWSTR  pName;
659   SIZEL   Size;
660   RECTL   ImageableArea;
661   LPCSTR  pKeyword;
662   DWORD   StringType;
663   LPCWSTR pMuiDll;
664   DWORD   dwResourceId;
665   LPCWSTR pDisplayName;
666   LANGID  wLangId;
667 } FORM_INFO_2W, *PFORM_INFO_2W;
668 
669 __MINGW_TYPEDEF_AW(FORM_INFO_2)
670 __MINGW_TYPEDEF_AW(PFORM_INFO_2)
671 
672 #define  STRING_NONE     0x00000001
673 #define  STRING_MUIDLL   0x00000002
674 #define  STRING_LANGPAIR 0x00000004
675 
676 typedef struct _DOC_INFO_2A {
677     LPSTR pDocName;
678     LPSTR pOutputFile;
679     LPSTR pDatatype;
680     DWORD dwMode;
681     DWORD JobId;
682 } DOC_INFO_2A,*PDOC_INFO_2A,*LPDOC_INFO_2A;
683 
684 typedef struct _DOC_INFO_2W {
685     LPWSTR pDocName;
686     LPWSTR pOutputFile;
687     LPWSTR pDatatype;
688     DWORD dwMode;
689     DWORD JobId;
690 } DOC_INFO_2W,*PDOC_INFO_2W,*LPDOC_INFO_2W;
691 
692 __MINGW_TYPEDEF_AW(DOC_INFO_2)
693 __MINGW_TYPEDEF_AW(PDOC_INFO_2)
694 __MINGW_TYPEDEF_AW(LPDOC_INFO_2)
695 
696 #define DI_CHANNEL 1
697 #define DI_READ_SPOOL_JOB 3
698 
699 typedef struct _DOC_INFO_3A {
700     LPSTR pDocName;
701     LPSTR pOutputFile;
702     LPSTR pDatatype;
703     DWORD dwFlags;
704 } DOC_INFO_3A,*PDOC_INFO_3A,*LPDOC_INFO_3A;
705 
706 typedef struct _DOC_INFO_3W {
707     LPWSTR pDocName;
708     LPWSTR pOutputFile;
709     LPWSTR pDatatype;
710     DWORD dwFlags;
711 } DOC_INFO_3W,*PDOC_INFO_3W,*LPDOC_INFO_3W;
712 
713 __MINGW_TYPEDEF_AW(DOC_INFO_3)
714 __MINGW_TYPEDEF_AW(PDOC_INFO_3)
715 __MINGW_TYPEDEF_AW(LPDOC_INFO_3)
716 
717 #define DI_MEMORYMAP_WRITE 0x00000001
718 
719 #define FORM_USER 0x00000000
720 #define FORM_BUILTIN 0x00000001
721 #define FORM_PRINTER 0x00000002
722 
723 typedef struct _PRINTPROCESSOR_INFO_1A {
724     LPSTR pName;
725 } PRINTPROCESSOR_INFO_1A,*PPRINTPROCESSOR_INFO_1A,*LPPRINTPROCESSOR_INFO_1A;
726 
727 typedef struct _PRINTPROCESSOR_INFO_1W {
728     LPWSTR pName;
729 } PRINTPROCESSOR_INFO_1W,*PPRINTPROCESSOR_INFO_1W,*LPPRINTPROCESSOR_INFO_1W;
730 
731 __MINGW_TYPEDEF_AW(PRINTPROCESSOR_INFO_1)
732 __MINGW_TYPEDEF_AW(PPRINTPROCESSOR_INFO_1)
733 __MINGW_TYPEDEF_AW(LPPRINTPROCESSOR_INFO_1)
734 
735 typedef struct _PRINTPROCESSOR_CAPS_1 {
736     DWORD dwLevel;
737     DWORD dwNupOptions;
738     DWORD dwPageOrderFlags;
739     DWORD dwNumberOfCopies;
740 } PRINTPROCESSOR_CAPS_1,*PPRINTPROCESSOR_CAPS_1;
741 
742 #define NORMAL_PRINT 0x00000000
743 #define REVERSE_PRINT 0x00000001
744 
745 typedef struct _PORT_INFO_1A {
746     LPSTR pName;
747 } PORT_INFO_1A,*PPORT_INFO_1A,*LPPORT_INFO_1A;
748 typedef struct _PORT_INFO_1W {
749     LPWSTR pName;
750 } PORT_INFO_1W,*PPORT_INFO_1W,*LPPORT_INFO_1W;
751 
752 __MINGW_TYPEDEF_AW(PORT_INFO_1)
753 __MINGW_TYPEDEF_AW(PPORT_INFO_1)
754 __MINGW_TYPEDEF_AW(LPPORT_INFO_1)
755 
756 typedef struct _PORT_INFO_2A {
757     LPSTR pPortName;
758     LPSTR pMonitorName;
759     LPSTR pDescription;
760     DWORD fPortType;
761     DWORD Reserved;
762 } PORT_INFO_2A,*PPORT_INFO_2A,*LPPORT_INFO_2A;
763 
764 typedef struct _PORT_INFO_2W {
765     LPWSTR pPortName;
766     LPWSTR pMonitorName;
767     LPWSTR pDescription;
768     DWORD fPortType;
769     DWORD Reserved;
770 } PORT_INFO_2W,*PPORT_INFO_2W,*LPPORT_INFO_2W;
771 
772 __MINGW_TYPEDEF_AW(PORT_INFO_2)
773 __MINGW_TYPEDEF_AW(PPORT_INFO_2)
774 __MINGW_TYPEDEF_AW(LPPORT_INFO_2)
775 
776 #define PORT_TYPE_WRITE 0x0001
777 #define PORT_TYPE_READ 0x0002
778 #define PORT_TYPE_REDIRECTED 0x0004
779 #define PORT_TYPE_NET_ATTACHED 0x0008
780 
781 typedef struct _PORT_INFO_3A {
782     DWORD dwStatus;
783     LPSTR pszStatus;
784     DWORD dwSeverity;
785 } PORT_INFO_3A,*PPORT_INFO_3A,*LPPORT_INFO_3A;
786 
787 typedef struct _PORT_INFO_3W {
788     DWORD dwStatus;
789     LPWSTR pszStatus;
790     DWORD dwSeverity;
791 } PORT_INFO_3W,*PPORT_INFO_3W,*LPPORT_INFO_3W;
792 
793 __MINGW_TYPEDEF_AW(PORT_INFO_3)
794 __MINGW_TYPEDEF_AW(PPORT_INFO_3)
795 __MINGW_TYPEDEF_AW(LPPORT_INFO_3)
796 
797 #define PORT_STATUS_TYPE_ERROR 1
798 #define PORT_STATUS_TYPE_WARNING 2
799 #define PORT_STATUS_TYPE_INFO 3
800 
801 #define PORT_STATUS_OFFLINE 1
802 #define PORT_STATUS_PAPER_JAM 2
803 #define PORT_STATUS_PAPER_OUT 3
804 #define PORT_STATUS_OUTPUT_BIN_FULL 4
805 #define PORT_STATUS_PAPER_PROBLEM 5
806 #define PORT_STATUS_NO_TONER 6
807 #define PORT_STATUS_DOOR_OPEN 7
808 #define PORT_STATUS_USER_INTERVENTION 8
809 #define PORT_STATUS_OUT_OF_MEMORY 9
810 #define PORT_STATUS_TONER_LOW 10
811 #define PORT_STATUS_WARMING_UP 11
812 #define PORT_STATUS_POWER_SAVE 12
813 
814 typedef struct _MONITOR_INFO_1A{
815     LPSTR pName;
816 } MONITOR_INFO_1A,*PMONITOR_INFO_1A,*LPMONITOR_INFO_1A;
817 
818 typedef struct _MONITOR_INFO_1W{
819     LPWSTR pName;
820 } MONITOR_INFO_1W,*PMONITOR_INFO_1W,*LPMONITOR_INFO_1W;
821 
822 __MINGW_TYPEDEF_AW(MONITOR_INFO_1)
823 __MINGW_TYPEDEF_AW(PMONITOR_INFO_1)
824 __MINGW_TYPEDEF_AW(LPMONITOR_INFO_1)
825 
826 typedef struct _MONITOR_INFO_2A {
827     LPSTR pName;
828     LPSTR pEnvironment;
829     LPSTR pDLLName;
830 } MONITOR_INFO_2A,*PMONITOR_INFO_2A,*LPMONITOR_INFO_2A;
831 
832 typedef struct _MONITOR_INFO_2W {
833     LPWSTR pName;
834     LPWSTR pEnvironment;
835     LPWSTR pDLLName;
836 } MONITOR_INFO_2W,*PMONITOR_INFO_2W,*LPMONITOR_INFO_2W;
837 
838 __MINGW_TYPEDEF_AW(MONITOR_INFO_2)
839 __MINGW_TYPEDEF_AW(PMONITOR_INFO_2)
840 __MINGW_TYPEDEF_AW(LPMONITOR_INFO_2)
841 
842 typedef struct _DATATYPES_INFO_1A {
843     LPSTR pName;
844 } DATATYPES_INFO_1A,*PDATATYPES_INFO_1A,*LPDATATYPES_INFO_1A;
845 
846 typedef struct _DATATYPES_INFO_1W {
847     LPWSTR pName;
848 } DATATYPES_INFO_1W,*PDATATYPES_INFO_1W,*LPDATATYPES_INFO_1W;
849 
850 __MINGW_TYPEDEF_AW(DATATYPES_INFO_1)
851 __MINGW_TYPEDEF_AW(PDATATYPES_INFO_1)
852 __MINGW_TYPEDEF_AW(LPDATATYPES_INFO_1)
853 
854 typedef struct _PRINTER_DEFAULTSA {
855     LPSTR pDatatype;
856     LPDEVMODEA pDevMode;
857     ACCESS_MASK DesiredAccess;
858 } PRINTER_DEFAULTSA,*PPRINTER_DEFAULTSA,*LPPRINTER_DEFAULTSA;
859 
860 typedef struct _PRINTER_DEFAULTSW {
861     LPWSTR pDatatype;
862     LPDEVMODEW pDevMode;
863     ACCESS_MASK DesiredAccess;
864 } PRINTER_DEFAULTSW,*PPRINTER_DEFAULTSW,*LPPRINTER_DEFAULTSW;
865 
866 __MINGW_TYPEDEF_AW(PRINTER_DEFAULTS)
867 __MINGW_TYPEDEF_AW(PPRINTER_DEFAULTS)
868 __MINGW_TYPEDEF_AW(LPPRINTER_DEFAULTS)
869 
870 typedef struct _PRINTER_ENUM_VALUESA {
871     LPSTR pValueName;
872     DWORD cbValueName;
873     DWORD dwType;
874     LPBYTE pData;
875     DWORD cbData;
876 } PRINTER_ENUM_VALUESA,*PPRINTER_ENUM_VALUESA,*LPPRINTER_ENUM_VALUESA;
877 
878 typedef struct _PRINTER_ENUM_VALUESW {
879     LPWSTR pValueName;
880     DWORD cbValueName;
881     DWORD dwType;
882     LPBYTE pData;
883     DWORD cbData;
884 } PRINTER_ENUM_VALUESW,*PPRINTER_ENUM_VALUESW,*LPPRINTER_ENUM_VALUESW;
885 
886 __MINGW_TYPEDEF_AW(PRINTER_ENUM_VALUES)
887 __MINGW_TYPEDEF_AW(PPRINTER_ENUM_VALUES)
888 __MINGW_TYPEDEF_AW(LPPRINTER_ENUM_VALUES)
889 
890 #define EnumPrinters __MINGW_NAME_AW(EnumPrinters)
891 
892 WINBOOL WINAPI EnumPrintersA(DWORD Flags,LPSTR Name,DWORD Level,LPBYTE pPrinterEnum,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
893 WINBOOL WINAPI EnumPrintersW(DWORD Flags,LPWSTR Name,DWORD Level,LPBYTE pPrinterEnum,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
894 
895 #define PRINTER_ENUM_DEFAULT 0x00000001
896 #define PRINTER_ENUM_LOCAL 0x00000002
897 #define PRINTER_ENUM_CONNECTIONS 0x00000004
898 #define PRINTER_ENUM_FAVORITE 0x00000004
899 #define PRINTER_ENUM_NAME 0x00000008
900 #define PRINTER_ENUM_REMOTE 0x00000010
901 #define PRINTER_ENUM_SHARED 0x00000020
902 #define PRINTER_ENUM_NETWORK 0x00000040
903 
904 #define PRINTER_ENUM_EXPAND 0x00004000
905 #define PRINTER_ENUM_CONTAINER 0x00008000
906 
907 #define PRINTER_ENUM_ICONMASK 0x00ff0000
908 #define PRINTER_ENUM_ICON1 0x00010000
909 #define PRINTER_ENUM_ICON2 0x00020000
910 #define PRINTER_ENUM_ICON3 0x00040000
911 #define PRINTER_ENUM_ICON4 0x00080000
912 #define PRINTER_ENUM_ICON5 0x00100000
913 #define PRINTER_ENUM_ICON6 0x00200000
914 #define PRINTER_ENUM_ICON7 0x00400000
915 #define PRINTER_ENUM_ICON8 0x00800000
916 #define PRINTER_ENUM_HIDE 0x01000000
917 
918 #define SPOOL_FILE_PERSISTENT 0x00000001
919 #define SPOOL_FILE_TEMPORARY 0x00000002
920 
921 #define OpenPrinter __MINGW_NAME_AW(OpenPrinter)
922 #define ResetPrinter __MINGW_NAME_AW(ResetPrinter)
923 #define SetJob __MINGW_NAME_AW(SetJob)
924 #define GetJob __MINGW_NAME_AW(GetJob)
925 #define EnumJobs __MINGW_NAME_AW(EnumJobs)
926 #define AddPrinter __MINGW_NAME_AW(AddPrinter)
927 #define SetPrinter __MINGW_NAME_AW(SetPrinter)
928 #define GetPrinter __MINGW_NAME_AW(GetPrinter)
929 #define AddPrinterDriver __MINGW_NAME_AW(AddPrinterDriver)
930 #define AddPrinterDriverEx __MINGW_NAME_AW(AddPrinterDriverEx)
931 #define EnumPrinterDrivers __MINGW_NAME_AW(EnumPrinterDrivers)
932 #define GetPrinterDriver __MINGW_NAME_AW(GetPrinterDriver)
933 #define GetPrinterDriverDirectory __MINGW_NAME_AW(GetPrinterDriverDirectory)
934 #define DeletePrinterDriver __MINGW_NAME_AW(DeletePrinterDriver)
935 #define DeletePrinterDriverEx __MINGW_NAME_AW(DeletePrinterDriverEx)
936 #define AddPrintProcessor __MINGW_NAME_AW(AddPrintProcessor)
937 #define EnumPrintProcessors __MINGW_NAME_AW(EnumPrintProcessors)
938 #define GetPrintProcessorDirectory __MINGW_NAME_AW(GetPrintProcessorDirectory)
939 #define EnumPrintProcessorDatatypes __MINGW_NAME_AW(EnumPrintProcessorDatatypes)
940 #define DeletePrintProcessor __MINGW_NAME_AW(DeletePrintProcessor)
941 #define StartDocPrinter __MINGW_NAME_AW(StartDocPrinter)
942 #define AddJob __MINGW_NAME_AW(AddJob)
943 #define DocumentProperties __MINGW_NAME_AW(DocumentProperties)
944 #define AdvancedDocumentProperties __MINGW_NAME_AW(AdvancedDocumentProperties)
945 #define GetPrinterData __MINGW_NAME_AW(GetPrinterData)
946 #define GetPrinterDataEx __MINGW_NAME_AW(GetPrinterDataEx)
947 #define EnumPrinterData __MINGW_NAME_AW(EnumPrinterData)
948 #define EnumPrinterDataEx __MINGW_NAME_AW(EnumPrinterDataEx)
949 #define EnumPrinterKey __MINGW_NAME_AW(EnumPrinterKey)
950 #define SetPrinterData __MINGW_NAME_AW(SetPrinterData)
951 #define SetPrinterDataEx __MINGW_NAME_AW(SetPrinterDataEx)
952 #define DeletePrinterData __MINGW_NAME_AW(DeletePrinterData)
953 #define DeletePrinterDataEx __MINGW_NAME_AW(DeletePrinterDataEx)
954 #define DeletePrinterKey __MINGW_NAME_AW(DeletePrinterKey)
955 
956   WINBOOL WINAPI OpenPrinterA(LPSTR pPrinterName,LPHANDLE phPrinter,LPPRINTER_DEFAULTSA pDefault);
957   WINBOOL WINAPI OpenPrinterW(LPWSTR pPrinterName,LPHANDLE phPrinter,LPPRINTER_DEFAULTSW pDefault);
958   WINBOOL WINAPI ResetPrinterA(HANDLE hPrinter,LPPRINTER_DEFAULTSA pDefault);
959   WINBOOL WINAPI ResetPrinterW(HANDLE hPrinter,LPPRINTER_DEFAULTSW pDefault);
960   WINBOOL WINAPI SetJobA(HANDLE hPrinter,DWORD JobId,DWORD Level,LPBYTE pJob,DWORD Command);
961   WINBOOL WINAPI SetJobW(HANDLE hPrinter,DWORD JobId,DWORD Level,LPBYTE pJob,DWORD Command);
962   WINBOOL WINAPI GetJobA(HANDLE hPrinter,DWORD JobId,DWORD Level,LPBYTE pJob,DWORD cbBuf,LPDWORD pcbNeeded);
963   WINBOOL WINAPI GetJobW(HANDLE hPrinter,DWORD JobId,DWORD Level,LPBYTE pJob,DWORD cbBuf,LPDWORD pcbNeeded);
964   WINBOOL WINAPI EnumJobsA(HANDLE hPrinter,DWORD FirstJob,DWORD NoJobs,DWORD Level,LPBYTE pJob,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
965   WINBOOL WINAPI EnumJobsW(HANDLE hPrinter,DWORD FirstJob,DWORD NoJobs,DWORD Level,LPBYTE pJob,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
966   HANDLE WINAPI AddPrinterA(LPSTR pName,DWORD Level,LPBYTE pPrinter);
967   HANDLE WINAPI AddPrinterW(LPWSTR pName,DWORD Level,LPBYTE pPrinter);
968   WINBOOL WINAPI DeletePrinter(HANDLE hPrinter);
969   WINBOOL WINAPI SetPrinterA(HANDLE hPrinter,DWORD Level,LPBYTE pPrinter,DWORD Command);
970   WINBOOL WINAPI SetPrinterW(HANDLE hPrinter,DWORD Level,LPBYTE pPrinter,DWORD Command);
971   WINBOOL WINAPI GetPrinterA(HANDLE hPrinter,DWORD Level,LPBYTE pPrinter,DWORD cbBuf,LPDWORD pcbNeeded);
972   WINBOOL WINAPI GetPrinterW(HANDLE hPrinter,DWORD Level,LPBYTE pPrinter,DWORD cbBuf,LPDWORD pcbNeeded);
973   WINBOOL WINAPI AddPrinterDriverA(LPSTR pName,DWORD Level,LPBYTE pDriverInfo);
974   WINBOOL WINAPI AddPrinterDriverW(LPWSTR pName,DWORD Level,LPBYTE pDriverInfo);
975   WINBOOL WINAPI AddPrinterDriverExA(LPSTR pName,DWORD Level,LPBYTE pDriverInfo,DWORD dwFileCopyFlags);
976   WINBOOL WINAPI AddPrinterDriverExW(LPWSTR pName,DWORD Level,LPBYTE pDriverInfo,DWORD dwFileCopyFlags);
977   WINBOOL WINAPI EnumPrinterDriversA(LPSTR pName,LPSTR pEnvironment,DWORD Level,LPBYTE pDriverInfo,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
978   WINBOOL WINAPI EnumPrinterDriversW(LPWSTR pName,LPWSTR pEnvironment,DWORD Level,LPBYTE pDriverInfo,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
979   WINBOOL WINAPI GetPrinterDriverA(HANDLE hPrinter,LPSTR pEnvironment,DWORD Level,LPBYTE pDriverInfo,DWORD cbBuf,LPDWORD pcbNeeded);
980   WINBOOL WINAPI GetPrinterDriverW(HANDLE hPrinter,LPWSTR pEnvironment,DWORD Level,LPBYTE pDriverInfo,DWORD cbBuf,LPDWORD pcbNeeded);
981   WINBOOL WINAPI GetPrinterDriverDirectoryA(LPSTR pName,LPSTR pEnvironment,DWORD Level,LPBYTE pDriverDirectory,DWORD cbBuf,LPDWORD pcbNeeded);
982   WINBOOL WINAPI GetPrinterDriverDirectoryW(LPWSTR pName,LPWSTR pEnvironment,DWORD Level,LPBYTE pDriverDirectory,DWORD cbBuf,LPDWORD pcbNeeded);
983   WINBOOL WINAPI DeletePrinterDriverA(LPSTR pName,LPSTR pEnvironment,LPSTR pDriverName);
984   WINBOOL WINAPI DeletePrinterDriverW(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pDriverName);
985   WINBOOL WINAPI DeletePrinterDriverExA(LPSTR pName,LPSTR pEnvironment,LPSTR pDriverName,DWORD dwDeleteFlag,DWORD dwVersionFlag);
986   WINBOOL WINAPI DeletePrinterDriverExW(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pDriverName,DWORD dwDeleteFlag,DWORD dwVersionFlag);
987   WINBOOL WINAPI AddPrintProcessorA(LPSTR pName,LPSTR pEnvironment,LPSTR pPathName,LPSTR pPrintProcessorName);
988   WINBOOL WINAPI AddPrintProcessorW(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pPathName,LPWSTR pPrintProcessorName);
989   WINBOOL WINAPI EnumPrintProcessorsA(LPSTR pName,LPSTR pEnvironment,DWORD Level,LPBYTE pPrintProcessorInfo,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
990   WINBOOL WINAPI EnumPrintProcessorsW(LPWSTR pName,LPWSTR pEnvironment,DWORD Level,LPBYTE pPrintProcessorInfo,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
991   WINBOOL WINAPI GetPrintProcessorDirectoryA(LPSTR pName,LPSTR pEnvironment,DWORD Level,LPBYTE pPrintProcessorInfo,DWORD cbBuf,LPDWORD pcbNeeded);
992   WINBOOL WINAPI GetPrintProcessorDirectoryW(LPWSTR pName,LPWSTR pEnvironment,DWORD Level,LPBYTE pPrintProcessorInfo,DWORD cbBuf,LPDWORD pcbNeeded);
993   WINBOOL WINAPI EnumPrintProcessorDatatypesA(LPSTR pName,LPSTR pPrintProcessorName,DWORD Level,LPBYTE pDatatypes,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
994   WINBOOL WINAPI EnumPrintProcessorDatatypesW(LPWSTR pName,LPWSTR pPrintProcessorName,DWORD Level,LPBYTE pDatatypes,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
995   WINBOOL WINAPI DeletePrintProcessorA(LPSTR pName,LPSTR pEnvironment,LPSTR pPrintProcessorName);
996   WINBOOL WINAPI DeletePrintProcessorW(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pPrintProcessorName);
997   DWORD WINAPI StartDocPrinterA(HANDLE hPrinter,DWORD Level,LPBYTE pDocInfo);
998   DWORD WINAPI StartDocPrinterW(HANDLE hPrinter,DWORD Level,LPBYTE pDocInfo);
999   WINBOOL WINAPI StartPagePrinter(HANDLE hPrinter);
1000   WINBOOL WINAPI WritePrinter(HANDLE hPrinter,LPVOID pBuf,DWORD cbBuf,LPDWORD pcWritten);
1001   WINBOOL WINAPI FlushPrinter(HANDLE hPrinter,LPVOID pBuf,DWORD cbBuf,LPDWORD pcWritten,DWORD cSleep);
1002   WINBOOL WINAPI EndPagePrinter(HANDLE hPrinter);
1003   WINBOOL WINAPI AbortPrinter(HANDLE hPrinter);
1004   WINBOOL WINAPI ReadPrinter(HANDLE hPrinter,LPVOID pBuf,DWORD cbBuf,LPDWORD pNoBytesRead);
1005   WINBOOL WINAPI EndDocPrinter(HANDLE hPrinter);
1006   WINBOOL WINAPI AddJobA(HANDLE hPrinter,DWORD Level,LPBYTE pData,DWORD cbBuf,LPDWORD pcbNeeded);
1007   WINBOOL WINAPI AddJobW(HANDLE hPrinter,DWORD Level,LPBYTE pData,DWORD cbBuf,LPDWORD pcbNeeded);
1008   WINBOOL WINAPI ScheduleJob(HANDLE hPrinter,DWORD JobId);
1009   WINBOOL WINAPI PrinterProperties(HWND hWnd,HANDLE hPrinter);
1010   LONG WINAPI DocumentPropertiesA(HWND hWnd,HANDLE hPrinter,LPSTR pDeviceName,PDEVMODEA pDevModeOutput,PDEVMODEA pDevModeInput,DWORD fMode);
1011   LONG WINAPI DocumentPropertiesW(HWND hWnd,HANDLE hPrinter,LPWSTR pDeviceName,PDEVMODEW pDevModeOutput,PDEVMODEW pDevModeInput,DWORD fMode);
1012   LONG WINAPI AdvancedDocumentPropertiesA(HWND hWnd,HANDLE hPrinter,LPSTR pDeviceName,PDEVMODEA pDevModeOutput,PDEVMODEA pDevModeInput);
1013   LONG WINAPI AdvancedDocumentPropertiesW(HWND hWnd,HANDLE hPrinter,LPWSTR pDeviceName,PDEVMODEW pDevModeOutput,PDEVMODEW pDevModeInput);
1014   LONG ExtDeviceMode(HWND hWnd,HANDLE hInst,LPDEVMODEA pDevModeOutput,LPSTR pDeviceName,LPSTR pPort,LPDEVMODEA pDevModeInput,LPSTR pProfile,DWORD fMode);
1015   DWORD WINAPI GetPrinterDataA(HANDLE hPrinter,LPSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
1016   DWORD WINAPI GetPrinterDataW(HANDLE hPrinter,LPWSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
1017   DWORD WINAPI GetPrinterDataExA(HANDLE hPrinter,LPCSTR pKeyName,LPCSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
1018   DWORD WINAPI GetPrinterDataExW(HANDLE hPrinter,LPCWSTR pKeyName,LPCWSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded);
1019   DWORD WINAPI EnumPrinterDataA(HANDLE hPrinter,DWORD dwIndex,LPSTR pValueName,DWORD cbValueName,LPDWORD pcbValueName,LPDWORD pType,LPBYTE pData,DWORD cbData,LPDWORD pcbData);
1020   DWORD WINAPI EnumPrinterDataW(HANDLE hPrinter,DWORD dwIndex,LPWSTR pValueName,DWORD cbValueName,LPDWORD pcbValueName,LPDWORD pType,LPBYTE pData,DWORD cbData,LPDWORD pcbData);
1021   DWORD WINAPI EnumPrinterDataExA(HANDLE hPrinter,LPCSTR pKeyName,LPBYTE pEnumValues,DWORD cbEnumValues,LPDWORD pcbEnumValues,LPDWORD pnEnumValues);
1022   DWORD WINAPI EnumPrinterDataExW(HANDLE hPrinter,LPCWSTR pKeyName,LPBYTE pEnumValues,DWORD cbEnumValues,LPDWORD pcbEnumValues,LPDWORD pnEnumValues);
1023   DWORD WINAPI EnumPrinterKeyA(HANDLE hPrinter,LPCSTR pKeyName,LPSTR pSubkey,DWORD cbSubkey,LPDWORD pcbSubkey);
1024   DWORD WINAPI EnumPrinterKeyW(HANDLE hPrinter,LPCWSTR pKeyName,LPWSTR pSubkey,DWORD cbSubkey,LPDWORD pcbSubkey);
1025   DWORD WINAPI SetPrinterDataA(HANDLE hPrinter,LPSTR pValueName,DWORD Type,LPBYTE pData,DWORD cbData);
1026   DWORD WINAPI SetPrinterDataW(HANDLE hPrinter,LPWSTR pValueName,DWORD Type,LPBYTE pData,DWORD cbData);
1027   DWORD WINAPI SetPrinterDataExA(HANDLE hPrinter,LPCSTR pKeyName,LPCSTR pValueName,DWORD Type,LPBYTE pData,DWORD cbData);
1028   DWORD WINAPI SetPrinterDataExW(HANDLE hPrinter,LPCWSTR pKeyName,LPCWSTR pValueName,DWORD Type,LPBYTE pData,DWORD cbData);
1029   DWORD WINAPI DeletePrinterDataA(HANDLE hPrinter,LPSTR pValueName);
1030   DWORD WINAPI DeletePrinterDataW(HANDLE hPrinter,LPWSTR pValueName);
1031   DWORD WINAPI DeletePrinterDataExA(HANDLE hPrinter,LPCSTR pKeyName,LPCSTR pValueName);
1032   DWORD WINAPI DeletePrinterDataExW(HANDLE hPrinter,LPCWSTR pKeyName,LPCWSTR pValueName);
1033   DWORD WINAPI DeletePrinterKeyA(HANDLE hPrinter,LPCSTR pKeyName);
1034   DWORD WINAPI DeletePrinterKeyW(HANDLE hPrinter,LPCWSTR pKeyName);
1035 
1036 #define PRINTER_NOTIFY_TYPE 0x00
1037 #define JOB_NOTIFY_TYPE 0x01
1038 
1039 #define PRINTER_NOTIFY_FIELD_SERVER_NAME 0x00
1040 #define PRINTER_NOTIFY_FIELD_PRINTER_NAME 0x01
1041 #define PRINTER_NOTIFY_FIELD_SHARE_NAME 0x02
1042 #define PRINTER_NOTIFY_FIELD_PORT_NAME 0x03
1043 #define PRINTER_NOTIFY_FIELD_DRIVER_NAME 0x04
1044 #define PRINTER_NOTIFY_FIELD_COMMENT 0x05
1045 #define PRINTER_NOTIFY_FIELD_LOCATION 0x06
1046 #define PRINTER_NOTIFY_FIELD_DEVMODE 0x07
1047 #define PRINTER_NOTIFY_FIELD_SEPFILE 0x08
1048 #define PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR 0x09
1049 #define PRINTER_NOTIFY_FIELD_PARAMETERS 0x0A
1050 #define PRINTER_NOTIFY_FIELD_DATATYPE 0x0B
1051 #define PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR 0x0C
1052 #define PRINTER_NOTIFY_FIELD_ATTRIBUTES 0x0D
1053 #define PRINTER_NOTIFY_FIELD_PRIORITY 0x0E
1054 #define PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY 0x0F
1055 #define PRINTER_NOTIFY_FIELD_START_TIME 0x10
1056 #define PRINTER_NOTIFY_FIELD_UNTIL_TIME 0x11
1057 #define PRINTER_NOTIFY_FIELD_STATUS 0x12
1058 #define PRINTER_NOTIFY_FIELD_STATUS_STRING 0x13
1059 #define PRINTER_NOTIFY_FIELD_CJOBS 0x14
1060 #define PRINTER_NOTIFY_FIELD_AVERAGE_PPM 0x15
1061 #define PRINTER_NOTIFY_FIELD_TOTAL_PAGES 0x16
1062 #define PRINTER_NOTIFY_FIELD_PAGES_PRINTED 0x17
1063 #define PRINTER_NOTIFY_FIELD_TOTAL_BYTES 0x18
1064 #define PRINTER_NOTIFY_FIELD_BYTES_PRINTED 0x19
1065 #define PRINTER_NOTIFY_FIELD_OBJECT_GUID 0x1A
1066 
1067 #define JOB_NOTIFY_FIELD_PRINTER_NAME 0x00
1068 #define JOB_NOTIFY_FIELD_MACHINE_NAME 0x01
1069 #define JOB_NOTIFY_FIELD_PORT_NAME 0x02
1070 #define JOB_NOTIFY_FIELD_USER_NAME 0x03
1071 #define JOB_NOTIFY_FIELD_NOTIFY_NAME 0x04
1072 #define JOB_NOTIFY_FIELD_DATATYPE 0x05
1073 #define JOB_NOTIFY_FIELD_PRINT_PROCESSOR 0x06
1074 #define JOB_NOTIFY_FIELD_PARAMETERS 0x07
1075 #define JOB_NOTIFY_FIELD_DRIVER_NAME 0x08
1076 #define JOB_NOTIFY_FIELD_DEVMODE 0x09
1077 #define JOB_NOTIFY_FIELD_STATUS 0x0A
1078 #define JOB_NOTIFY_FIELD_STATUS_STRING 0x0B
1079 #define JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR 0x0C
1080 #define JOB_NOTIFY_FIELD_DOCUMENT 0x0D
1081 #define JOB_NOTIFY_FIELD_PRIORITY 0x0E
1082 #define JOB_NOTIFY_FIELD_POSITION 0x0F
1083 #define JOB_NOTIFY_FIELD_SUBMITTED 0x10
1084 #define JOB_NOTIFY_FIELD_START_TIME 0x11
1085 #define JOB_NOTIFY_FIELD_UNTIL_TIME 0x12
1086 #define JOB_NOTIFY_FIELD_TIME 0x13
1087 #define JOB_NOTIFY_FIELD_TOTAL_PAGES 0x14
1088 #define JOB_NOTIFY_FIELD_PAGES_PRINTED 0x15
1089 #define JOB_NOTIFY_FIELD_TOTAL_BYTES 0x16
1090 #define JOB_NOTIFY_FIELD_BYTES_PRINTED 0x17
1091 
1092   typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE {
1093     WORD Type;
1094     WORD Reserved0;
1095     DWORD Reserved1;
1096     DWORD Reserved2;
1097     DWORD Count;
1098     PWORD pFields;
1099   } PRINTER_NOTIFY_OPTIONS_TYPE,*PPRINTER_NOTIFY_OPTIONS_TYPE,*LPPRINTER_NOTIFY_OPTIONS_TYPE;
1100 
1101 #define PRINTER_NOTIFY_OPTIONS_REFRESH 0x01
1102 
1103   typedef struct _PRINTER_NOTIFY_OPTIONS {
1104     DWORD Version;
1105     DWORD Flags;
1106     DWORD Count;
1107     PPRINTER_NOTIFY_OPTIONS_TYPE pTypes;
1108   } PRINTER_NOTIFY_OPTIONS,*PPRINTER_NOTIFY_OPTIONS,*LPPRINTER_NOTIFY_OPTIONS;
1109 
1110 #define PRINTER_NOTIFY_INFO_DISCARDED 0x01
1111 
1112   typedef struct _PRINTER_NOTIFY_INFO_DATA {
1113     WORD Type;
1114     WORD Field;
1115     DWORD Reserved;
1116     DWORD Id;
1117     union {
1118       DWORD adwData[2];
1119       struct {
1120 	DWORD cbBuf;
1121 	LPVOID pBuf;
1122       } Data;
1123     } NotifyData;
1124   } PRINTER_NOTIFY_INFO_DATA,*PPRINTER_NOTIFY_INFO_DATA,*LPPRINTER_NOTIFY_INFO_DATA;
1125 
1126   typedef struct _PRINTER_NOTIFY_INFO {
1127     DWORD Version;
1128     DWORD Flags;
1129     DWORD Count;
1130     PRINTER_NOTIFY_INFO_DATA aData[1];
1131   } PRINTER_NOTIFY_INFO,*PPRINTER_NOTIFY_INFO,*LPPRINTER_NOTIFY_INFO;
1132 
1133   typedef struct _BINARY_CONTAINER{
1134     DWORD cbBuf;
1135     LPBYTE pData;
1136   } BINARY_CONTAINER,*PBINARY_CONTAINER;
1137 
1138   typedef struct _BIDI_DATA{
1139     DWORD dwBidiType;
1140     union {
1141       WINBOOL bData;
1142       LONG iData;
1143       LPWSTR sData;
1144       FLOAT fData;
1145       BINARY_CONTAINER biData;
1146     } u;
1147   } BIDI_DATA,*PBIDI_DATA,*LPBIDI_DATA;
1148 
1149   typedef struct _BIDI_REQUEST_DATA{
1150     DWORD dwReqNumber;
1151     LPWSTR pSchema;
1152     BIDI_DATA data;
1153   } BIDI_REQUEST_DATA ,*PBIDI_REQUEST_DATA ,*LPBIDI_REQUEST_DATA;
1154 
1155   typedef struct _BIDI_REQUEST_CONTAINER{
1156     DWORD Version;
1157     DWORD Flags;
1158     DWORD Count;
1159     BIDI_REQUEST_DATA aData[1 ];
1160   }BIDI_REQUEST_CONTAINER,*PBIDI_REQUEST_CONTAINER,*LPBIDI_REQUEST_CONTAINER;
1161 
1162   typedef struct _BIDI_RESPONSE_DATA{
1163     DWORD dwResult;
1164     DWORD dwReqNumber;
1165     LPWSTR pSchema;
1166     BIDI_DATA data;
1167   } BIDI_RESPONSE_DATA,*PBIDI_RESPONSE_DATA,*LPBIDI_RESPONSE_DATA;
1168 
1169   typedef struct _BIDI_RESPONSE_CONTAINER{
1170     DWORD Version;
1171     DWORD Flags;
1172     DWORD Count;
1173     BIDI_RESPONSE_DATA aData[1 ];
1174   } BIDI_RESPONSE_CONTAINER,*PBIDI_RESPONSE_CONTAINER,*LPBIDI_RESPONSE_CONTAINER;
1175 
1176 #define BIDI_ACTION_ENUM_SCHEMA L"EnumSchema"
1177 #define BIDI_ACTION_GET L"Get"
1178 #define BIDI_ACTION_SET L"Set"
1179 #define BIDI_ACTION_GET_ALL L"GetAll"
1180 
1181   typedef enum {
1182     BIDI_NULL = 0,BIDI_INT = 1,BIDI_FLOAT = 2,BIDI_BOOL = 3,BIDI_STRING = 4,BIDI_TEXT = 5,BIDI_ENUM = 6,BIDI_BLOB = 7
1183   } BIDI_TYPE;
1184 
1185 #define BIDI_ACCESS_ADMINISTRATOR 0x1
1186 #define BIDI_ACCESS_USER 0x2
1187 
1188 #define ERROR_BIDI_STATUS_OK 0
1189 #define ERROR_BIDI_NOT_SUPPORTED ERROR_NOT_SUPPORTED
1190 
1191 #define ERROR_BIDI_ERROR_BASE 13000
1192 #define ERROR_BIDI_STATUS_WARNING (ERROR_BIDI_ERROR_BASE + 1)
1193 #define ERROR_BIDI_SCHEMA_READ_ONLY (ERROR_BIDI_ERROR_BASE + 2)
1194 #define ERROR_BIDI_SERVER_OFFLINE (ERROR_BIDI_ERROR_BASE + 3)
1195 #define ERROR_BIDI_DEVICE_OFFLINE (ERROR_BIDI_ERROR_BASE + 4)
1196 #define ERROR_BIDI_SCHEMA_NOT_SUPPORTED (ERROR_BIDI_ERROR_BASE + 5)
1197 
1198   DWORD WINAPI WaitForPrinterChange(HANDLE hPrinter,DWORD Flags);
1199   HANDLE WINAPI FindFirstPrinterChangeNotification(HANDLE hPrinter,DWORD fdwFlags,DWORD fdwOptions,LPVOID pPrinterNotifyOptions);
1200   WINBOOL WINAPI FindNextPrinterChangeNotification(HANDLE hChange,PDWORD pdwChange,LPVOID pPrinterNotifyOptions,LPVOID *ppPrinterNotifyInfo);
1201   WINBOOL WINAPI FreePrinterNotifyInfo (PPRINTER_NOTIFY_INFO pPrinterNotifyInfo);
1202   WINBOOL WINAPI FindClosePrinterChangeNotification(HANDLE hChange);
1203 
1204 #define PRINTER_CHANGE_ADD_PRINTER 0x00000001
1205 #define PRINTER_CHANGE_SET_PRINTER 0x00000002
1206 #define PRINTER_CHANGE_DELETE_PRINTER 0x00000004
1207 #define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER 0x00000008
1208 #define PRINTER_CHANGE_PRINTER 0x000000FF
1209 #define PRINTER_CHANGE_ADD_JOB 0x00000100
1210 #define PRINTER_CHANGE_SET_JOB 0x00000200
1211 #define PRINTER_CHANGE_DELETE_JOB 0x00000400
1212 #define PRINTER_CHANGE_WRITE_JOB 0x00000800
1213 #define PRINTER_CHANGE_JOB 0x0000FF00
1214 #define PRINTER_CHANGE_ADD_FORM 0x00010000
1215 #define PRINTER_CHANGE_SET_FORM 0x00020000
1216 #define PRINTER_CHANGE_DELETE_FORM 0x00040000
1217 #define PRINTER_CHANGE_FORM 0x00070000
1218 #define PRINTER_CHANGE_ADD_PORT 0x00100000
1219 #define PRINTER_CHANGE_CONFIGURE_PORT 0x00200000
1220 #define PRINTER_CHANGE_DELETE_PORT 0x00400000
1221 #define PRINTER_CHANGE_PORT 0x00700000
1222 #define PRINTER_CHANGE_ADD_PRINT_PROCESSOR 0x01000000
1223 #define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR 0x04000000
1224 #define PRINTER_CHANGE_PRINT_PROCESSOR 0x07000000
1225 #define PRINTER_CHANGE_ADD_PRINTER_DRIVER 0x10000000
1226 #define PRINTER_CHANGE_SET_PRINTER_DRIVER 0x20000000
1227 #define PRINTER_CHANGE_DELETE_PRINTER_DRIVER 0x40000000
1228 #define PRINTER_CHANGE_PRINTER_DRIVER 0x70000000
1229 #define PRINTER_CHANGE_TIMEOUT 0x80000000
1230 #define PRINTER_CHANGE_ALL 0x7777FFFF
1231 
1232 #define PrinterMessageBox __MINGW_NAME_AW(PrinterMessageBox)
1233 #define AddForm __MINGW_NAME_AW(AddForm)
1234 #define DeleteForm __MINGW_NAME_AW(DeleteForm)
1235 #define GetForm __MINGW_NAME_AW(GetForm)
1236 #define SetForm __MINGW_NAME_AW(SetForm)
1237 #define EnumForms __MINGW_NAME_AW(EnumForms)
1238 #define EnumMonitors __MINGW_NAME_AW(EnumMonitors)
1239 #define AddMonitor __MINGW_NAME_AW(AddMonitor)
1240 #define DeleteMonitor __MINGW_NAME_AW(DeleteMonitor)
1241 #define EnumPorts __MINGW_NAME_AW(EnumPorts)
1242 #define AddPort __MINGW_NAME_AW(AddPort)
1243 #define ConfigurePort __MINGW_NAME_AW(ConfigurePort)
1244 #define DeletePort __MINGW_NAME_AW(DeletePort)
1245 #define GetDefaultPrinter __MINGW_NAME_AW(GetDefaultPrinter)
1246 #define SetDefaultPrinter __MINGW_NAME_AW(SetDefaultPrinter)
1247 #define SetPort __MINGW_NAME_AW(SetPort)
1248 #define AddPrinterConnection __MINGW_NAME_AW(AddPrinterConnection)
1249 #define DeletePrinterConnection __MINGW_NAME_AW(DeletePrinterConnection)
1250 
1251   DWORD WINAPI PrinterMessageBoxA(HANDLE hPrinter,DWORD Error,HWND hWnd,LPSTR pText,LPSTR pCaption,DWORD dwType);
1252   DWORD WINAPI PrinterMessageBoxW(HANDLE hPrinter,DWORD Error,HWND hWnd,LPWSTR pText,LPWSTR pCaption,DWORD dwType);
1253 
1254 #define PRINTER_ERROR_INFORMATION 0x80000000
1255 #define PRINTER_ERROR_WARNING 0x40000000
1256 #define PRINTER_ERROR_SEVERE 0x20000000
1257 
1258 #define PRINTER_ERROR_OUTOFPAPER 0x00000001
1259 #define PRINTER_ERROR_JAM 0x00000002
1260 #define PRINTER_ERROR_OUTOFTONER 0x00000004
1261 
1262   WINBOOL WINAPI ClosePrinter(HANDLE hPrinter);
1263   WINBOOL WINAPI AddFormA(HANDLE hPrinter,DWORD Level,LPBYTE pForm);
1264   WINBOOL WINAPI AddFormW(HANDLE hPrinter,DWORD Level,LPBYTE pForm);
1265   WINBOOL WINAPI DeleteFormA(HANDLE hPrinter,LPSTR pFormName);
1266   WINBOOL WINAPI DeleteFormW(HANDLE hPrinter,LPWSTR pFormName);
1267   WINBOOL WINAPI GetFormA(HANDLE hPrinter,LPSTR pFormName,DWORD Level,LPBYTE pForm,DWORD cbBuf,LPDWORD pcbNeeded);
1268   WINBOOL WINAPI GetFormW(HANDLE hPrinter,LPWSTR pFormName,DWORD Level,LPBYTE pForm,DWORD cbBuf,LPDWORD pcbNeeded);
1269   WINBOOL WINAPI SetFormA(HANDLE hPrinter,LPSTR pFormName,DWORD Level,LPBYTE pForm);
1270   WINBOOL WINAPI SetFormW(HANDLE hPrinter,LPWSTR pFormName,DWORD Level,LPBYTE pForm);
1271   WINBOOL WINAPI EnumFormsA(HANDLE hPrinter,DWORD Level,LPBYTE pForm,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
1272   WINBOOL WINAPI EnumFormsW(HANDLE hPrinter,DWORD Level,LPBYTE pForm,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
1273   WINBOOL WINAPI EnumMonitorsA(LPSTR pName,DWORD Level,LPBYTE pMonitor,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
1274   WINBOOL WINAPI EnumMonitorsW(LPWSTR pName,DWORD Level,LPBYTE pMonitor,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
1275   WINBOOL WINAPI AddMonitorA(LPSTR pName,DWORD Level,LPBYTE pMonitorInfo);
1276   WINBOOL WINAPI AddMonitorW(LPWSTR pName,DWORD Level,LPBYTE pMonitorInfo);
1277   WINBOOL WINAPI DeleteMonitorA(LPSTR pName,LPSTR pEnvironment,LPSTR pMonitorName);
1278   WINBOOL WINAPI DeleteMonitorW(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pMonitorName);
1279   WINBOOL WINAPI EnumPortsA(LPSTR pName,DWORD Level,LPBYTE pPorts,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
1280   WINBOOL WINAPI EnumPortsW(LPWSTR pName,DWORD Level,LPBYTE pPorts,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned);
1281   WINBOOL WINAPI AddPortA(LPSTR pName,HWND hWnd,LPSTR pMonitorName);
1282   WINBOOL WINAPI AddPortW(LPWSTR pName,HWND hWnd,LPWSTR pMonitorName);
1283   WINBOOL WINAPI ConfigurePortA(LPSTR pName,HWND hWnd,LPSTR pPortName);
1284   WINBOOL WINAPI ConfigurePortW(LPWSTR pName,HWND hWnd,LPWSTR pPortName);
1285   WINBOOL WINAPI DeletePortA(LPSTR pName,HWND hWnd,LPSTR pPortName);
1286   WINBOOL WINAPI DeletePortW(LPWSTR pName,HWND hWnd,LPWSTR pPortName);
1287   WINBOOL WINAPI XcvDataW(HANDLE hXcv,PCWSTR pszDataName,PBYTE pInputData,DWORD cbInputData,PBYTE pOutputData,DWORD cbOutputData,PDWORD pcbOutputNeeded,PDWORD pdwStatus);
1288 
1289 #define XcvData XcvDataW
1290 
1291   WINBOOL WINAPI GetDefaultPrinterA(LPSTR pszBuffer,LPDWORD pcchBuffer);
1292   WINBOOL WINAPI GetDefaultPrinterW(LPWSTR pszBuffer,LPDWORD pcchBuffer);
1293   WINBOOL WINAPI SetDefaultPrinterA(LPCSTR pszPrinter);
1294   WINBOOL WINAPI SetDefaultPrinterW(LPCWSTR pszPrinter);
1295   WINBOOL WINAPI SetPortA(LPSTR pName,LPSTR pPortName,DWORD dwLevel,LPBYTE pPortInfo);
1296   WINBOOL WINAPI SetPortW(LPWSTR pName,LPWSTR pPortName,DWORD dwLevel,LPBYTE pPortInfo);
1297   WINBOOL WINAPI AddPrinterConnectionA(LPSTR pName);
1298   WINBOOL WINAPI AddPrinterConnectionW(LPWSTR pName);
1299   WINBOOL WINAPI DeletePrinterConnectionA(LPSTR pName);
1300   WINBOOL WINAPI DeletePrinterConnectionW(LPWSTR pName);
1301   HANDLE WINAPI ConnectToPrinterDlg(HWND hwnd,DWORD Flags);
1302 
1303   typedef struct _PROVIDOR_INFO_1A{
1304     LPSTR pName;
1305     LPSTR pEnvironment;
1306     LPSTR pDLLName;
1307   } PROVIDOR_INFO_1A,*PPROVIDOR_INFO_1A,*LPPROVIDOR_INFO_1A;
1308 
1309   typedef struct _PROVIDOR_INFO_1W{
1310     LPWSTR pName;
1311     LPWSTR pEnvironment;
1312     LPWSTR pDLLName;
1313   } PROVIDOR_INFO_1W,*PPROVIDOR_INFO_1W,*LPPROVIDOR_INFO_1W;
1314 
1315   __MINGW_TYPEDEF_AW(PROVIDOR_INFO_1)
1316   __MINGW_TYPEDEF_AW(PPROVIDOR_INFO_1)
1317   __MINGW_TYPEDEF_AW(LPPROVIDOR_INFO_1)
1318 
1319   typedef struct _PROVIDOR_INFO_2A{
1320     LPSTR pOrder;
1321   } PROVIDOR_INFO_2A,*PPROVIDOR_INFO_2A,*LPPROVIDOR_INFO_2A;
1322 
1323   typedef struct _PROVIDOR_INFO_2W{
1324     LPWSTR pOrder;
1325   } PROVIDOR_INFO_2W,*PPROVIDOR_INFO_2W,*LPPROVIDOR_INFO_2W;
1326 
1327   __MINGW_TYPEDEF_AW(PROVIDOR_INFO_2)
1328   __MINGW_TYPEDEF_AW(PPROVIDOR_INFO_2)
1329   __MINGW_TYPEDEF_AW(LPPROVIDOR_INFO_2)
1330 
1331 #define AddPrintProvidor __MINGW_NAME_AW(AddPrintProvidor)
1332 #define DeletePrintProvidor __MINGW_NAME_AW(DeletePrintProvidor)
1333 #define IsValidDevmode __MINGW_NAME_AW(IsValidDevmode)
1334 
1335   WINBOOL WINAPI AddPrintProvidorA(LPSTR pName,DWORD level,LPBYTE pProvidorInfo);
1336   WINBOOL WINAPI AddPrintProvidorW(LPWSTR pName,DWORD level,LPBYTE pProvidorInfo);
1337   WINBOOL WINAPI DeletePrintProvidorA(LPSTR pName,LPSTR pEnvironment,LPSTR pPrintProvidorName);
1338   WINBOOL WINAPI DeletePrintProvidorW(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pPrintProvidorName);
1339   WINBOOL WINAPI IsValidDevmodeA (PDEVMODEA pDevmode,size_t DevmodeSize);
1340   WINBOOL WINAPI IsValidDevmodeW (PDEVMODEW pDevmode,size_t DevmodeSize);
1341 
1342 #define SPLREG_DEFAULT_SPOOL_DIRECTORY TEXT("DefaultSpoolDirectory")
1343 #define SPLREG_PORT_THREAD_PRIORITY_DEFAULT TEXT("PortThreadPriorityDefault")
1344 #define SPLREG_PORT_THREAD_PRIORITY TEXT("PortThreadPriority")
1345 #define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT TEXT("SchedulerThreadPriorityDefault")
1346 #define SPLREG_SCHEDULER_THREAD_PRIORITY TEXT("SchedulerThreadPriority")
1347 #define SPLREG_BEEP_ENABLED TEXT("BeepEnabled")
1348 #define SPLREG_NET_POPUP TEXT("NetPopup")
1349 #define SPLREG_RETRY_POPUP TEXT("RetryPopup")
1350 #define SPLREG_NET_POPUP_TO_COMPUTER TEXT("NetPopupToComputer")
1351 #define SPLREG_EVENT_LOG TEXT("EventLog")
1352 #define SPLREG_MAJOR_VERSION TEXT("MajorVersion")
1353 #define SPLREG_MINOR_VERSION TEXT("MinorVersion")
1354 #define SPLREG_ARCHITECTURE TEXT("Architecture")
1355 #define SPLREG_OS_VERSION TEXT("OSVersion")
1356 #define SPLREG_OS_VERSIONEX TEXT("OSVersionEx")
1357 #define SPLREG_DS_PRESENT TEXT("DsPresent")
1358 #define SPLREG_DS_PRESENT_FOR_USER TEXT("DsPresentForUser")
1359 #define SPLREG_REMOTE_FAX TEXT("RemoteFax")
1360 #define SPLREG_RESTART_JOB_ON_POOL_ERROR TEXT("RestartJobOnPoolError")
1361 #define SPLREG_RESTART_JOB_ON_POOL_ENABLED TEXT("RestartJobOnPoolEnabled")
1362 #define SPLREG_DNS_MACHINE_NAME TEXT("DNSMachineName")
1363 #define SPLREG_ALLOW_USER_MANAGEFORMS TEXT("AllowUserManageForms")
1364 #define SPLREG_WEBSHAREMGMT TEXT("WebShareMgmt")
1365 
1366 #define SERVER_ACCESS_ADMINISTER 0x00000001
1367 #define SERVER_ACCESS_ENUMERATE 0x00000002
1368 
1369 #define PRINTER_ACCESS_ADMINISTER 0x00000004
1370 #define PRINTER_ACCESS_USE 0x00000008
1371 
1372 #define JOB_ACCESS_ADMINISTER 0x00000010
1373 #define JOB_ACCESS_READ 0x00000020
1374 
1375 #define SERVER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE)
1376 #define SERVER_READ (STANDARD_RIGHTS_READ | SERVER_ACCESS_ENUMERATE)
1377 #define SERVER_WRITE (STANDARD_RIGHTS_WRITE | SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE)
1378 #define SERVER_EXECUTE (STANDARD_RIGHTS_EXECUTE | SERVER_ACCESS_ENUMERATE)
1379 #define PRINTER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE)
1380 #define PRINTER_READ (STANDARD_RIGHTS_READ | PRINTER_ACCESS_USE)
1381 #define PRINTER_WRITE (STANDARD_RIGHTS_WRITE | PRINTER_ACCESS_USE)
1382 #define PRINTER_EXECUTE (STANDARD_RIGHTS_EXECUTE | PRINTER_ACCESS_USE)
1383 #define JOB_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | JOB_ACCESS_ADMINISTER | JOB_ACCESS_READ)
1384 #define JOB_READ (STANDARD_RIGHTS_READ | JOB_ACCESS_READ)
1385 #define JOB_WRITE (STANDARD_RIGHTS_WRITE | JOB_ACCESS_ADMINISTER)
1386 #define JOB_EXECUTE (STANDARD_RIGHTS_EXECUTE | JOB_ACCESS_ADMINISTER)
1387 
1388 #define SPLDS_SPOOLER_KEY TEXT("DsSpooler")
1389 #define SPLDS_DRIVER_KEY TEXT("DsDriver")
1390 #define SPLDS_USER_KEY TEXT("DsUser")
1391 
1392 #define SPLDS_ASSET_NUMBER TEXT("assetNumber")
1393 #define SPLDS_BYTES_PER_MINUTE TEXT("bytesPerMinute")
1394 #define SPLDS_DESCRIPTION TEXT("description")
1395 #define SPLDS_DRIVER_NAME TEXT("driverName")
1396 #define SPLDS_DRIVER_VERSION TEXT("driverVersion")
1397 #define SPLDS_LOCATION TEXT("location")
1398 #define SPLDS_PORT_NAME TEXT("portName")
1399 #define SPLDS_PRINT_ATTRIBUTES TEXT("printAttributes")
1400 #define SPLDS_PRINT_BIN_NAMES TEXT("printBinNames")
1401 #define SPLDS_PRINT_COLLATE TEXT("printCollate")
1402 #define SPLDS_PRINT_COLOR TEXT("printColor")
1403 #define SPLDS_PRINT_DUPLEX_SUPPORTED TEXT("printDuplexSupported")
1404 #define SPLDS_PRINT_END_TIME TEXT("printEndTime")
1405 #define SPLDS_PRINTER_CLASS TEXT("printQueue")
1406 #define SPLDS_PRINTER_NAME TEXT("printerName")
1407 #define SPLDS_PRINT_KEEP_PRINTED_JOBS TEXT("printKeepPrintedJobs")
1408 #define SPLDS_PRINT_LANGUAGE TEXT("printLanguage")
1409 #define SPLDS_PRINT_MAC_ADDRESS TEXT("printMACAddress")
1410 #define SPLDS_PRINT_MAX_X_EXTENT TEXT("printMaxXExtent")
1411 #define SPLDS_PRINT_MAX_Y_EXTENT TEXT("printMaxYExtent")
1412 #define SPLDS_PRINT_MAX_RESOLUTION_SUPPORTED TEXT("printMaxResolutionSupported")
1413 #define SPLDS_PRINT_MEDIA_READY TEXT("printMediaReady")
1414 #define SPLDS_PRINT_MEDIA_SUPPORTED TEXT("printMediaSupported")
1415 #define SPLDS_PRINT_MEMORY TEXT("printMemory")
1416 #define SPLDS_PRINT_MIN_X_EXTENT TEXT("printMinXExtent")
1417 #define SPLDS_PRINT_MIN_Y_EXTENT TEXT("printMinYExtent")
1418 #define SPLDS_PRINT_NETWORK_ADDRESS TEXT("printNetworkAddress")
1419 #define SPLDS_PRINT_NOTIFY TEXT("printNotify")
1420 #define SPLDS_PRINT_NUMBER_UP TEXT("printNumberUp")
1421 #define SPLDS_PRINT_ORIENTATIONS_SUPPORTED TEXT("printOrientationsSupported")
1422 #define SPLDS_PRINT_OWNER TEXT("printOwner")
1423 #define SPLDS_PRINT_PAGES_PER_MINUTE TEXT("printPagesPerMinute")
1424 #define SPLDS_PRINT_RATE TEXT("printRate")
1425 #define SPLDS_PRINT_RATE_UNIT TEXT("printRateUnit")
1426 #define SPLDS_PRINT_SEPARATOR_FILE TEXT("printSeparatorFile")
1427 #define SPLDS_PRINT_SHARE_NAME TEXT("printShareName")
1428 #define SPLDS_PRINT_SPOOLING TEXT("printSpooling")
1429 #define SPLDS_PRINT_STAPLING_SUPPORTED TEXT("printStaplingSupported")
1430 #define SPLDS_PRINT_START_TIME TEXT("printStartTime")
1431 #define SPLDS_PRINT_STATUS TEXT("printStatus")
1432 #define SPLDS_PRIORITY TEXT("priority")
1433 #define SPLDS_SERVER_NAME TEXT("serverName")
1434 #define SPLDS_SHORT_SERVER_NAME TEXT("shortServerName")
1435 #define SPLDS_UNC_NAME TEXT("uNCName")
1436 #define SPLDS_URL TEXT("url")
1437 #define SPLDS_FLAGS TEXT("flags")
1438 #define SPLDS_VERSION_NUMBER TEXT("versionNumber")
1439 
1440 #define SPLDS_PRINTER_NAME_ALIASES TEXT("printerNameAliases")
1441 #define SPLDS_PRINTER_LOCATIONS TEXT("printerLocations")
1442 #define SPLDS_PRINTER_MODEL TEXT("printerModel")
1443 
1444 #if (_WIN32_WINNT >= 0x0600)
1445 #define AddPrinterConnection2 __MINGW_NAME_AW(AddPrinterConnection2)
1446 #define DeletePrinterDriverPackage __MINGW_NAME_AW(DeletePrinterDriverPackage)
1447 #define DocumentEvent __MINGW_NAME_AW(DocumentEvent)
1448 
1449 #define PRINTER_CONNECTION_MISMATCH 0x00000020
1450 #define PRINTER_CONNECTION_NO_UI    0x00000040
1451 
1452 typedef enum tagPRINTER_OPTION_FLAGS {
1453   PRINTER_OPTION_NO_CACHE,
1454   PRINTER_OPTION_CACHE,
1455   PRINTER_OPTION_CLIENT_CHANGE
1456 } PRINTER_OPTION_FLAGS;
1457 
1458 typedef enum tagEPrintXPSJobOperation {
1459   kJobProduction,
1460   kJobConsumption
1461 } EPrintXPSJobOperation;
1462 
1463 typedef enum tagEPrintXPSJobProgress {
1464   kAddingDocumentSequence,
1465   kDocumentSequenceAdded,
1466   kAddingFixedDocument,
1467   kFixedDocumentAdded,
1468   kAddingFixedPage,
1469   kFixedPageAdded,
1470   kResourceAdded,
1471   kFontAdded,
1472   kImageAdded,
1473   kXpsDocumentCommitted
1474 } EPrintXPSJobProgress;
1475 
1476 typedef struct _PRINTER_CONNECTION_INFO_1 {
1477   DWORD  dwFlags;
1478   LPTSTR pszDriverName;
1479 } PRINTER_CONNECTION_INFO_1, *PPRINTER_CONNECTION_INFO_1;
1480 
1481   WINBOOL AddPrinterConnection2W(HWND hWnd,LPCWSTR pszName,DWORD dwLevel,PVOID pConnectionInfo);
1482   WINBOOL AddPrinterConnection2A(HWND hWnd,LPCSTR pszName,DWORD dwLevel,PVOID pConnectionInfo); /*Not supported and returns ERROR_NOT_SUPPORTED.*/
1483 
1484 HRESULT WINAPI DeletePrinterDriverPackageA(
1485   LPCSTR pszServer,
1486   LPCSTR pszInfPath,
1487   LPCSTR pszEnvironment
1488 );
1489 
1490 HRESULT WINAPI DeletePrinterDriverPackageW(
1491   LPCWSTR pszServer,
1492   LPCWSTR pszInfPath,
1493   LPCWSTR pszEnvironment
1494 );
1495 
1496 HRESULT DocumentEventA(
1497   HANDLE hPrinter,
1498   HDC hdc,
1499   INT iEsc,
1500   ULONG cbIn,
1501   PVOID pvIn,
1502   ULONG cbOut,
1503   PVOID pvOut
1504 );
1505 
1506 HRESULT DocumentEventW(
1507   HANDLE hPrinter,
1508   HDC hdc,
1509   INT iEsc,
1510   ULONG cbIn,
1511   PVOID pvIn,
1512   ULONG cbOut,
1513   PVOID pvOut
1514 );
1515 
1516 typedef struct _PRINTPROCESSOR_CAPS_2 {
1517   DWORD dwLevel;
1518   DWORD dwNupOptions;
1519   DWORD dwPageOrderFlags;
1520   DWORD dwNumberOfCopies;
1521   DWORD dwNupDirectionCaps;
1522   DWORD dwNupBorderCaps;
1523   DWORD dwBookletHandlingCaps;
1524   DWORD dwDuplexHandlingCaps;
1525   DWORD dwScalingCaps;
1526 } PRINTPROCESSOR_CAPS_2, *PPRINTPROCESSOR_CAPS_2;
1527 
1528 HRESULT ReportJobProcessingProgress(
1529   HANDLE printerHandle,
1530   ULONG jobId,
1531   EPrintXPSJobOperation jobOperation,
1532   EPrintXPSJobProgress jobProgress
1533 );
1534 
1535 typedef struct _CORE_PRINTER_DRIVERA {
1536   GUID      CoreDriverGUID;
1537   FILETIME  ftDriverDate;
1538   DWORDLONG dwlDriverVersion;
1539   CHAR      szPackageID[MAX_PATH];
1540 } CORE_PRINTER_DRIVERA, *PCORE_PRINTER_DRIVERA;
1541 
1542 typedef struct _CORE_PRINTER_DRIVERW {
1543   GUID      CoreDriverGUID;
1544   FILETIME  ftDriverDate;
1545   DWORDLONG dwlDriverVersion;
1546   WCHAR     szPackageID[MAX_PATH];
1547 } CORE_PRINTER_DRIVERW, *PCORE_PRINTER_DRIVERW;
1548 
1549 typedef struct _PRINTER_OPTIONS {
1550   UINT  cbSize;
1551   DWORD dwFlags;
1552 } PRINTER_OPTIONS, *PPRINTER_OPTIONS;
1553 
1554 __MINGW_TYPEDEF_AW(CORE_PRINTER_DRIVER)
1555 __MINGW_TYPEDEF_AW(PCORE_PRINTER_DRIVER)
1556 #define GetCorePrinterDrivers __MINGW_NAME_AW(GetCorePrinterDrivers)
1557 #define GetPrinterDriver2 __MINGW_NAME_AW(GetPrinterDriver2)
1558 #define GetPrinterDriverPackagePath __MINGW_NAME_AW(GetPrinterDriverPackagePath)
1559 #define GetSpoolFileHandle __MINGW_NAME_AW(GetSpoolFileHandle)
1560 
1561 HRESULT WINAPI GetCorePrinterDriversA(
1562   LPCSTR pszServer,
1563   LPCSTR pszEnvironment,
1564   LPCSTR pszzCoreDriverDependencies,
1565   DWORD cCorePrinterDrivers,
1566   PCORE_PRINTER_DRIVERA pCorePrinterDrivers
1567 );
1568 
1569 HRESULT WINAPI GetCorePrinterDriversW(
1570   LPCWSTR pszServer,
1571   LPCWSTR pszEnvironment,
1572   LPCWSTR pszzCoreDriverDependencies,
1573   DWORD cCorePrinterDrivers,
1574   PCORE_PRINTER_DRIVERW pCorePrinterDrivers
1575 );
1576 
1577 /*Unsupported*/
1578 WINBOOL WINAPI GetPrinterDriver2A(
1579   HWND hWnd,
1580   HANDLE hPrinter,
1581   LPSTR pEnvironment,
1582   DWORD Level,
1583   LPBYTE pDriverInfo,
1584   DWORD cbBuf,
1585   LPDWORD pcbNeeded
1586 );
1587 
1588 WINBOOL WINAPI GetPrinterDriver2W(
1589   HWND hWnd,
1590   HANDLE hPrinter,
1591   LPWSTR pEnvironment,
1592   DWORD Level,
1593   LPBYTE pDriverInfo,
1594   DWORD cbBuf,
1595   LPDWORD pcbNeeded
1596 );
1597 
1598 HRESULT WINAPI GetPrinterDriverPackagePathA(
1599   LPCSTR pszServer,
1600   LPCSTR pszEnvironment,
1601   LPCSTR pszLanguage,
1602   LPCSTR pszPackageID,
1603   LPSTR  pszDriverPackageCab,
1604   DWORD  cchDriverPackageCab,
1605   LPDWORD pcchRequiredSize
1606 );
1607 
1608 HRESULT WINAPI GetPrinterDriverPackagePathW(
1609   LPCWSTR pszServer,
1610   LPCWSTR pszEnvironment,
1611   LPCWSTR pszLanguage,
1612   LPCWSTR pszPackageID,
1613   LPWSTR  pszDriverPackageCab,
1614   DWORD   cchDriverPackageCab,
1615   LPDWORD pcchRequiredSize
1616 );
1617 
1618 HANDLE WINAPI GetSpoolFileHandleA(
1619   HANDLE hPrinter
1620 );
1621 
1622 HANDLE WINAPI GetSpoolFileHandleW(
1623   HANDLE hPrinter
1624 );
1625 
1626 HANDLE WINAPI CommitSpoolData(
1627   HANDLE hPrinter,
1628   HANDLE hSpoolFile,
1629   DWORD cbCommit
1630 );
1631 
1632 WINBOOL WINAPI CloseSpoolFileHandle(
1633   HANDLE hPrinter,
1634   HANDLE hSpoolFile
1635 );
1636 
1637 WINBOOL WINAPI OpenPrinter2A(
1638   LPCSTR pPrinterName,
1639   LPHANDLE phPrinter,
1640   LPPRINTER_DEFAULTS pDefault,
1641   PPRINTER_OPTIONS pOptions
1642 );
1643 
1644 WINBOOL WINAPI OpenPrinter2W(
1645   LPCWSTR pPrinterName,
1646   LPHANDLE phPrinter,
1647   LPPRINTER_DEFAULTS pDefault,
1648   PPRINTER_OPTIONS pOptions
1649 );
1650 
1651 #define OpenPrinter2 __MINGW_NAME_AW(OpenPrinter2)
1652 
1653 HRESULT WINAPI UploadPrinterDriverPackageA(
1654   LPCSTR pszServer,
1655   LPCSTR pszInfPath,
1656   LPCSTR pszEnvironment,
1657   DWORD dwFlags,
1658   HWND hwnd,
1659   LPSTR pszDestInfPath,
1660   PULONG pcchDestInfPath
1661 );
1662 
1663 HRESULT WINAPI UploadPrinterDriverPackageW(
1664   LPCWSTR pszServer,
1665   LPCWSTR pszInfPath,
1666   LPCWSTR pszEnvironment,
1667   DWORD dwFlags,
1668   HWND hwnd,
1669   LPWSTR pszDestInfPath,
1670   PULONG pcchDestInfPath
1671 );
1672 
1673 #define UploadPrinterDriverPackage __MINGW_NAME_AW(UploadPrinterDriverPackage)
1674 
1675 #endif /*(_WIN32_WINNT >= 0x0600)*/
1676 
1677 #ifdef __cplusplus
1678 }
1679 #endif
1680 #endif
1681