1use shared::guiddef::GUID;
8use shared::minwindef::{
9 BOOL, BYTE, DWORD, FILETIME, FLOAT, LPBYTE, LPDWORD, LPHANDLE, LPVOID, MAX_PATH, PBYTE, PDWORD,
10 PULONG, PWORD, UINT, ULONG, WORD,
11};
12use shared::windef::{HWND, RECTL, SIZEL};
13use shared::winerror::ERROR_NOT_SUPPORTED;
14use um::minwinbase::SYSTEMTIME;
15use um::wingdi::{LPDEVMODEA, LPDEVMODEW, PDEVMODEA, PDEVMODEW};
16use um::winnt::{
17 ACCESS_MASK, CHAR, DWORDLONG, HANDLE, HRESULT, LANGID, LONG, LONGLONG, LPCSTR, LPCWSTR, LPSTR,
18 LPWSTR, PCWSTR, PSECURITY_DESCRIPTOR, PVOID, PWSTR, STANDARD_RIGHTS_EXECUTE,
19 STANDARD_RIGHTS_READ, STANDARD_RIGHTS_REQUIRED, STANDARD_RIGHTS_WRITE, WCHAR,
20};
21use vc::vcruntime::size_t;
22STRUCT!{struct PRINTER_INFO_1A {
23 Flags: DWORD,
24 pDescription: LPSTR,
25 pName: LPSTR,
26 pComment: LPSTR,
27}}
28pub type PPRINTER_INFO_1A = *mut PRINTER_INFO_1A;
29pub type LPPRINTER_INFO_1A = *mut PRINTER_INFO_1A;
30STRUCT!{struct PRINTER_INFO_1W {
31 Flags: DWORD,
32 pDescription: LPWSTR,
33 pName: LPWSTR,
34 pComment: LPWSTR,
35}}
36pub type PPRINTER_INFO_1W = *mut PRINTER_INFO_1W;
37pub type LPPRINTER_INFO_1W = *mut PRINTER_INFO_1W;
38STRUCT!{struct PRINTER_INFO_2A {
39 pServerName: LPSTR,
40 pPrinterName: LPSTR,
41 pShareName: LPSTR,
42 pPortName: LPSTR,
43 pDriverName: LPSTR,
44 pComment: LPSTR,
45 pLocation: LPSTR,
46 pDevMode: LPDEVMODEA,
47 pSepFile: LPSTR,
48 pPrintProcessor: LPSTR,
49 pDatatype: LPSTR,
50 pParameters: LPSTR,
51 pSecurityDescriptor: PSECURITY_DESCRIPTOR,
52 Attributes: DWORD,
53 Priority: DWORD,
54 DefaultPriority: DWORD,
55 StartTime: DWORD,
56 UntilTime: DWORD,
57 Status: DWORD,
58 cJobs: DWORD,
59 AveragePPM: DWORD,
60}}
61pub type PPRINTER_INFO_2A = *mut PRINTER_INFO_2A;
62pub type LPPRINTER_INFO_2A = *mut PRINTER_INFO_2A;
63STRUCT!{struct PRINTER_INFO_2W {
64 pServerName: LPWSTR,
65 pPrinterName: LPWSTR,
66 pShareName: LPWSTR,
67 pPortName: LPWSTR,
68 pDriverName: LPWSTR,
69 pComment: LPWSTR,
70 pLocation: LPWSTR,
71 pDevMode: LPDEVMODEW,
72 pSepFile: LPWSTR,
73 pPrintProcessor: LPWSTR,
74 pDatatype: LPWSTR,
75 pParameters: LPWSTR,
76 pSecurityDescriptor: PSECURITY_DESCRIPTOR,
77 Attributes: DWORD,
78 Priority: DWORD,
79 DefaultPriority: DWORD,
80 StartTime: DWORD,
81 UntilTime: DWORD,
82 Status: DWORD,
83 cJobs: DWORD,
84 AveragePPM: DWORD,
85}}
86pub type PPRINTER_INFO_2W = *mut PRINTER_INFO_2W;
87pub type LPPRINTER_INFO_2W = *mut PRINTER_INFO_2W;
88STRUCT!{struct PRINTER_INFO_3 {
89 pSecurityDescriptor: PSECURITY_DESCRIPTOR,
90}}
91pub type PPRINTER_INFO_3 = *mut PRINTER_INFO_3;
92pub type LPPRINTER_INFO_3 = *mut PRINTER_INFO_3;
93STRUCT!{struct PRINTER_INFO_4A {
94 pPrinterName: LPSTR,
95 pServerName: LPSTR,
96 Attributes: DWORD,
97}}
98pub type PPRINTER_INFO_4A = *mut PRINTER_INFO_4A;
99pub type LPPRINTER_INFO_4A = *mut PRINTER_INFO_4A;
100STRUCT!{struct PRINTER_INFO_4W {
101 pPrinterName: LPWSTR,
102 pServerName: LPWSTR,
103 Attributes: DWORD,
104}}
105pub type PPRINTER_INFO_4W = *mut PRINTER_INFO_4W;
106pub type LPPRINTER_INFO_4W = *mut PRINTER_INFO_4W;
107STRUCT!{struct PRINTER_INFO_5A {
108 pPrinterName: LPSTR,
109 pPortName: LPSTR,
110 Attributes: DWORD,
111 DeviceNotSelectedTimeout: DWORD,
112 TransmissionRetryTimeout: DWORD,
113}}
114pub type PPRINTER_INFO_5A = *mut PRINTER_INFO_5A;
115pub type LPPRINTER_INFO_5A = *mut PRINTER_INFO_5A;
116STRUCT!{struct PRINTER_INFO_5W {
117 pPrinterName: LPWSTR,
118 pPortName: LPWSTR,
119 Attributes: DWORD,
120 DeviceNotSelectedTimeout: DWORD,
121 TransmissionRetryTimeout: DWORD,
122}}
123pub type PPRINTER_INFO_5W = *mut PRINTER_INFO_5W;
124pub type LPPRINTER_INFO_5W = *mut PRINTER_INFO_5W;
125STRUCT!{struct PRINTER_INFO_6 {
126 dwStatus: DWORD,
127}}
128pub type PPRINTER_INFO_6 = *mut PRINTER_INFO_6;
129pub type LPPRINTER_INFO_6 = *mut PRINTER_INFO_6;
130STRUCT!{struct PRINTER_INFO_7A {
131 pszObjectGUID: LPSTR,
132 dwAction: DWORD,
133}}
134pub type PPRINTER_INFO_7A = *mut PRINTER_INFO_7A;
135pub type LPPRINTER_INFO_7A = *mut PRINTER_INFO_7A;
136STRUCT!{struct PRINTER_INFO_7W {
137 pszObjectGUID: LPWSTR,
138 dwAction: DWORD,
139}}
140pub type PPRINTER_INFO_7W = *mut PRINTER_INFO_7W;
141pub type LPPRINTER_INFO_7W = *mut PRINTER_INFO_7W;
142pub const DSPRINT_PUBLISH: DWORD = 0x00000001;
143pub const DSPRINT_UPDATE: DWORD = 0x00000002;
144pub const DSPRINT_UNPUBLISH: DWORD = 0x00000004;
145pub const DSPRINT_REPUBLISH: DWORD = 0x00000008;
146pub const DSPRINT_PENDING: DWORD = 0x80000000;
147STRUCT!{struct PRINTER_INFO_8A {
148 pDevMode: LPDEVMODEA,
149}}
150pub type PPRINTER_INFO_8A = *mut PRINTER_INFO_8A;
151pub type LPPRINTER_INFO_8A = *mut PRINTER_INFO_8A;
152STRUCT!{struct PRINTER_INFO_8W {
153 pDevMode: LPDEVMODEW,
154}}
155pub type PPRINTER_INFO_8W = *mut PRINTER_INFO_8W;
156pub type LPPRINTER_INFO_8W = *mut PRINTER_INFO_8W;
157STRUCT!{struct PRINTER_INFO_9A {
158 pDevMode: LPDEVMODEA,
159}}
160pub type PPRINTER_INFO_9A = *mut PRINTER_INFO_9A;
161pub type LPPRINTER_INFO_9A = *mut PRINTER_INFO_9A;
162STRUCT!{struct PRINTER_INFO_9W {
163 pDevMode: LPDEVMODEW,
164}}
165pub type PPRINTER_INFO_9W = *mut PRINTER_INFO_9W;
166pub type LPPRINTER_INFO_9W = *mut PRINTER_INFO_9W;
167pub const PRINTER_CONTROL_PAUSE: DWORD = 1;
168pub const PRINTER_CONTROL_RESUME: DWORD = 2;
169pub const PRINTER_CONTROL_PURGE: DWORD = 3;
170pub const PRINTER_CONTROL_SET_STATUS: DWORD = 4;
171pub const PRINTER_STATUS_PAUSED: DWORD = 0x00000001;
172pub const PRINTER_STATUS_ERROR: DWORD = 0x00000002;
173pub const PRINTER_STATUS_PENDING_DELETION: DWORD = 0x00000004;
174pub const PRINTER_STATUS_PAPER_JAM: DWORD = 0x00000008;
175pub const PRINTER_STATUS_PAPER_OUT: DWORD = 0x00000010;
176pub const PRINTER_STATUS_MANUAL_FEED: DWORD = 0x00000020;
177pub const PRINTER_STATUS_PAPER_PROBLEM: DWORD = 0x00000040;
178pub const PRINTER_STATUS_OFFLINE: DWORD = 0x00000080;
179pub const PRINTER_STATUS_IO_ACTIVE: DWORD = 0x00000100;
180pub const PRINTER_STATUS_BUSY: DWORD = 0x00000200;
181pub const PRINTER_STATUS_PRINTING: DWORD = 0x00000400;
182pub const PRINTER_STATUS_OUTPUT_BIN_FULL: DWORD = 0x00000800;
183pub const PRINTER_STATUS_NOT_AVAILABLE: DWORD = 0x00001000;
184pub const PRINTER_STATUS_WAITING: DWORD = 0x00002000;
185pub const PRINTER_STATUS_PROCESSING: DWORD = 0x00004000;
186pub const PRINTER_STATUS_INITIALIZING: DWORD = 0x00008000;
187pub const PRINTER_STATUS_WARMING_UP: DWORD = 0x00010000;
188pub const PRINTER_STATUS_TONER_LOW: DWORD = 0x00020000;
189pub const PRINTER_STATUS_NO_TONER: DWORD = 0x00040000;
190pub const PRINTER_STATUS_PAGE_PUNT: DWORD = 0x00080000;
191pub const PRINTER_STATUS_USER_INTERVENTION: DWORD = 0x00100000;
192pub const PRINTER_STATUS_OUT_OF_MEMORY: DWORD = 0x00200000;
193pub const PRINTER_STATUS_DOOR_OPEN: DWORD = 0x00400000;
194pub const PRINTER_STATUS_SERVER_UNKNOWN: DWORD = 0x00800000;
195pub const PRINTER_STATUS_POWER_SAVE: DWORD = 0x01000000;
196pub const PRINTER_STATUS_SERVER_OFFLINE: DWORD = 0x02000000;
197pub const PRINTER_STATUS_DRIVER_UPDATE_NEEDED: DWORD = 0x04000000;
198pub const PRINTER_ATTRIBUTE_QUEUED: DWORD = 0x00000001;
199pub const PRINTER_ATTRIBUTE_DIRECT: DWORD = 0x00000002;
200pub const PRINTER_ATTRIBUTE_DEFAULT: DWORD = 0x00000004;
201pub const PRINTER_ATTRIBUTE_SHARED: DWORD = 0x00000008;
202pub const PRINTER_ATTRIBUTE_NETWORK: DWORD = 0x00000010;
203pub const PRINTER_ATTRIBUTE_HIDDEN: DWORD = 0x00000020;
204pub const PRINTER_ATTRIBUTE_LOCAL: DWORD = 0x00000040;
205pub const PRINTER_ATTRIBUTE_ENABLE_DEVQ: DWORD = 0x00000080;
206pub const PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS: DWORD = 0x00000100;
207pub const PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST: DWORD = 0x00000200;
208pub const PRINTER_ATTRIBUTE_WORK_OFFLINE: DWORD = 0x00000400;
209pub const PRINTER_ATTRIBUTE_ENABLE_BIDI: DWORD = 0x00000800;
210pub const PRINTER_ATTRIBUTE_RAW_ONLY: DWORD = 0x00001000;
211pub const PRINTER_ATTRIBUTE_PUBLISHED: DWORD = 0x00002000;
212pub const PRINTER_ATTRIBUTE_FAX: DWORD = 0x00004000;
213pub const PRINTER_ATTRIBUTE_TS: DWORD = 0x00008000;
214pub const PRINTER_ATTRIBUTE_PUSHED_USER: DWORD = 0x00020000;
215pub const PRINTER_ATTRIBUTE_PUSHED_MACHINE: DWORD = 0x00040000;
216pub const PRINTER_ATTRIBUTE_MACHINE: DWORD = 0x00080000;
217pub const PRINTER_ATTRIBUTE_FRIENDLY_NAME: DWORD = 0x00100000;
218pub const PRINTER_ATTRIBUTE_TS_GENERIC_DRIVER: DWORD = 0x00200000;
219pub const PRINTER_ATTRIBUTE_PER_USER: DWORD = 0x00400000;
220pub const PRINTER_ATTRIBUTE_ENTERPRISE_CLOUD: DWORD = 0x00800000;
221pub const NO_PRIORITY: DWORD = 0;
222pub const MAX_PRIORITY: DWORD = 99;
223pub const MIN_PRIORITY: DWORD = 1;
224pub const DEF_PRIORITY: DWORD = 1;
225STRUCT!{struct JOB_INFO_1A {
226 JobId: DWORD,
227 pPrinterName: LPSTR,
228 pMachineName: LPSTR,
229 pUserName: LPSTR,
230 pDocument: LPSTR,
231 pDatatype: LPSTR,
232 pStatus: LPSTR,
233 Status: DWORD,
234 Priority: DWORD,
235 Position: DWORD,
236 TotalPages: DWORD,
237 PagesPrinted: DWORD,
238 Submitted: SYSTEMTIME,
239}}
240pub type PJOB_INFO_1A = *mut JOB_INFO_1A;
241pub type LPJOB_INFO_1A = *mut JOB_INFO_1A;
242STRUCT!{struct JOB_INFO_1W {
243 JobId: DWORD,
244 pPrinterName: LPWSTR,
245 pMachineName: LPWSTR,
246 pUserName: LPWSTR,
247 pDocument: LPWSTR,
248 pDatatype: LPWSTR,
249 pStatus: LPWSTR,
250 Status: DWORD,
251 Priority: DWORD,
252 Position: DWORD,
253 TotalPages: DWORD,
254 PagesPrinted: DWORD,
255 Submitted: SYSTEMTIME,
256}}
257pub type PJOB_INFO_1W = *mut JOB_INFO_1W;
258pub type LPJOB_INFO_1W = *mut JOB_INFO_1W;
259STRUCT!{struct JOB_INFO_2A {
260 JobId: DWORD,
261 pPrinterName: LPSTR,
262 pMachineName: LPSTR,
263 pUserName: LPSTR,
264 pDocument: LPSTR,
265 pNotifyName: LPSTR,
266 pDatatype: LPSTR,
267 pPrintProcessor: LPSTR,
268 pParameters: LPSTR,
269 pDriverName: LPSTR,
270 pDevMode: LPDEVMODEA,
271 pStatus: LPSTR,
272 pSecurityDescriptor: PSECURITY_DESCRIPTOR,
273 Status: DWORD,
274 Priority: DWORD,
275 Position: DWORD,
276 StartTime: DWORD,
277 UntilTime: DWORD,
278 TotalPages: DWORD,
279 Size: DWORD,
280 Submitted: SYSTEMTIME,
281 Time: DWORD,
282 PagesPrinted: DWORD,
283}}
284pub type PJOB_INFO_2A = *mut JOB_INFO_2A;
285pub type LPJOB_INFO_2A = *mut JOB_INFO_2A;
286STRUCT!{struct JOB_INFO_2W {
287 JobId: DWORD,
288 pPrinterName: LPWSTR,
289 pMachineName: LPWSTR,
290 pUserName: LPWSTR,
291 pDocument: LPWSTR,
292 pNotifyName: LPWSTR,
293 pDatatype: LPWSTR,
294 pPrintProcessor: LPWSTR,
295 pParameters: LPWSTR,
296 pDriverName: LPWSTR,
297 pDevMode: LPDEVMODEW,
298 pStatus: LPWSTR,
299 pSecurityDescriptor: PSECURITY_DESCRIPTOR,
300 Status: DWORD,
301 Priority: DWORD,
302 Position: DWORD,
303 StartTime: DWORD,
304 UntilTime: DWORD,
305 TotalPages: DWORD,
306 Size: DWORD,
307 Submitted: SYSTEMTIME,
308 Time: DWORD,
309 PagesPrinted: DWORD,
310}}
311pub type PJOB_INFO_2W = *mut JOB_INFO_2W;
312pub type LPJOB_INFO_2W = *mut JOB_INFO_2W;
313STRUCT!{struct JOB_INFO_3 {
314 JobId: DWORD,
315 NextJobId: DWORD,
316 Reserved: DWORD,
317}}
318pub type PJOB_INFO_3 = *mut JOB_INFO_3;
319pub type LPJOB_INFO_3 = *mut JOB_INFO_3;
320STRUCT!{struct JOB_INFO_4A {
321 JobId: DWORD,
322 pPrinterName: LPSTR,
323 pMachineName: LPSTR,
324 pUserName: LPSTR,
325 pDocument: LPSTR,
326 pNotifyName: LPSTR,
327 pDatatype: LPSTR,
328 pPrintProcessor: LPSTR,
329 pParameters: LPSTR,
330 pDriverName: LPSTR,
331 pDevMode: LPDEVMODEA,
332 pStatus: LPSTR,
333 pSecurityDescriptor: PSECURITY_DESCRIPTOR,
334 Status: DWORD,
335 Priority: DWORD,
336 Position: DWORD,
337 StartTime: DWORD,
338 UntilTime: DWORD,
339 TotalPages: DWORD,
340 Size: DWORD,
341 Submitted: SYSTEMTIME,
342 Time: DWORD,
343 PagesPrinted: DWORD,
344 SizeHigh: LONG,
345}}
346pub type PJOB_INFO_4A = *mut JOB_INFO_4A;
347pub type LPJOB_INFO_4A = *mut JOB_INFO_4A;
348STRUCT!{struct JOB_INFO_4W {
349 JobId: DWORD,
350 pPrinterName: LPWSTR,
351 pMachineName: LPWSTR,
352 pUserName: LPWSTR,
353 pDocument: LPWSTR,
354 pNotifyName: LPWSTR,
355 pDatatype: LPWSTR,
356 pPrintProcessor: LPWSTR,
357 pParameters: LPWSTR,
358 pDriverName: LPWSTR,
359 pDevMode: LPDEVMODEW,
360 pStatus: LPWSTR,
361 pSecurityDescriptor: PSECURITY_DESCRIPTOR,
362 Status: DWORD,
363 Priority: DWORD,
364 Position: DWORD,
365 StartTime: DWORD,
366 UntilTime: DWORD,
367 TotalPages: DWORD,
368 Size: DWORD,
369 Submitted: SYSTEMTIME,
370 Time: DWORD,
371 PagesPrinted: DWORD,
372 SizeHigh: LONG,
373}}
374pub type PJOB_INFO_4W = *mut JOB_INFO_4W;
375pub type LPJOB_INFO_4W = *mut JOB_INFO_4W;
376pub const JOB_CONTROL_PAUSE: DWORD = 1;
377pub const JOB_CONTROL_RESUME: DWORD = 2;
378pub const JOB_CONTROL_CANCEL: DWORD = 3;
379pub const JOB_CONTROL_RESTART: DWORD = 4;
380pub const JOB_CONTROL_DELETE: DWORD = 5;
381pub const JOB_CONTROL_SENT_TO_PRINTER: DWORD = 6;
382pub const JOB_CONTROL_LAST_PAGE_EJECTED: DWORD = 7;
383pub const JOB_STATUS_PAUSED: DWORD = 0x00000001;
384pub const JOB_STATUS_ERROR: DWORD = 0x00000002;
385pub const JOB_STATUS_DELETING: DWORD = 0x00000004;
386pub const JOB_STATUS_SPOOLING: DWORD = 0x00000008;
387pub const JOB_STATUS_PRINTING: DWORD = 0x00000010;
388pub const JOB_STATUS_OFFLINE: DWORD = 0x00000020;
389pub const JOB_STATUS_PAPEROUT: DWORD = 0x00000040;
390pub const JOB_STATUS_PRINTED: DWORD = 0x00000080;
391pub const JOB_STATUS_DELETED: DWORD = 0x00000100;
392pub const JOB_STATUS_BLOCKED_DEVQ: DWORD = 0x00000200;
393pub const JOB_STATUS_USER_INTERVENTION: DWORD = 0x00000400;
394pub const JOB_STATUS_RESTART: DWORD = 0x00000800;
395pub const JOB_POSITION_UNSPECIFIED: DWORD = 0;
396STRUCT!{struct ADDJOB_INFO_1A {
397 Path: LPSTR,
398 JobId: DWORD,
399}}
400pub type PADDJOB_INFO_1A = *mut ADDJOB_INFO_1A;
401pub type LPADDJOB_INFO_1A = *mut ADDJOB_INFO_1A;
402STRUCT!{struct ADDJOB_INFO_1W {
403 Path: LPWSTR,
404 JobId: DWORD,
405}}
406pub type PADDJOB_INFO_1W = *mut ADDJOB_INFO_1W;
407pub type LPADDJOB_INFO_1W = *mut ADDJOB_INFO_1W;
408STRUCT!{struct DRIVER_INFO_1A {
409 pName: LPSTR,
410}}
411pub type PDRIVER_INFO_1A = *mut DRIVER_INFO_1A;
412pub type LPDRIVER_INFO_1A = *mut DRIVER_INFO_1A;
413STRUCT!{struct DRIVER_INFO_1W {
414 pName: LPWSTR,
415}}
416pub type PDRIVER_INFO_1W = *mut DRIVER_INFO_1W;
417pub type LPDRIVER_INFO_1W = *mut DRIVER_INFO_1W;
418STRUCT!{struct DRIVER_INFO_2A {
419 cVersion: DWORD,
420 pName: LPSTR,
421 pEnvironment: LPSTR,
422 pDriverPath: LPSTR,
423 pDataFile: LPSTR,
424 pConfigFile: LPSTR,
425}}
426pub type PDRIVER_INFO_2A = *mut DRIVER_INFO_2A;
427pub type LPDRIVER_INFO_2A = *mut DRIVER_INFO_2A;
428STRUCT!{struct DRIVER_INFO_2W {
429 cVersion: DWORD,
430 pName: LPWSTR,
431 pEnvironment: LPWSTR,
432 pDriverPath: LPWSTR,
433 pDataFile: LPWSTR,
434 pConfigFile: LPWSTR,
435}}
436pub type PDRIVER_INFO_2W = *mut DRIVER_INFO_2W;
437pub type LPDRIVER_INFO_2W = *mut DRIVER_INFO_2W;
438STRUCT!{struct DRIVER_INFO_3A {
439 cVersion: DWORD,
440 pName: LPSTR,
441 pEnvironment: LPSTR,
442 pDriverPath: LPSTR,
443 pDataFile: LPSTR,
444 pConfigFile: LPSTR,
445 pHelpFile: LPSTR,
446 pDependentFiles: LPSTR,
447 pMonitorName: LPSTR,
448 pDefaultDataType: LPSTR,
449}}
450pub type PDRIVER_INFO_3A = *mut DRIVER_INFO_3A;
451pub type LPDRIVER_INFO_3A = *mut DRIVER_INFO_3A;
452STRUCT!{struct DRIVER_INFO_3W {
453 cVersion: DWORD,
454 pName: LPWSTR,
455 pEnvironment: LPWSTR,
456 pDriverPath: LPWSTR,
457 pDataFile: LPWSTR,
458 pConfigFile: LPWSTR,
459 pHelpFile: LPWSTR,
460 pDependentFiles: LPWSTR,
461 pMonitorName: LPWSTR,
462 pDefaultDataType: LPWSTR,
463}}
464pub type PDRIVER_INFO_3W = *mut DRIVER_INFO_3W;
465pub type LPDRIVER_INFO_3W = *mut DRIVER_INFO_3W;
466STRUCT!{struct DRIVER_INFO_4A {
467 cVersion: DWORD,
468 pName: LPSTR,
469 pEnvironment: LPSTR,
470 pDriverPath: LPSTR,
471 pDataFile: LPSTR,
472 pConfigFile: LPSTR,
473 pHelpFile: LPSTR,
474 pDependentFiles: LPSTR,
475 pMonitorName: LPSTR,
476 pDefaultDataType: LPSTR,
477 pszzPreviousNames: LPSTR,
478}}
479pub type PDRIVER_INFO_4A = *mut DRIVER_INFO_4A;
480pub type LPDRIVER_INFO_4A = *mut DRIVER_INFO_4A;
481STRUCT!{struct DRIVER_INFO_4W {
482 cVersion: DWORD,
483 pName: LPWSTR,
484 pEnvironment: LPWSTR,
485 pDriverPath: LPWSTR,
486 pDataFile: LPWSTR,
487 pConfigFile: LPWSTR,
488 pHelpFile: LPWSTR,
489 pDependentFiles: LPWSTR,
490 pMonitorName: LPWSTR,
491 pDefaultDataType: LPWSTR,
492 pszzPreviousNames: LPWSTR,
493}}
494pub type PDRIVER_INFO_4W = *mut DRIVER_INFO_4W;
495pub type LPDRIVER_INFO_4W = *mut DRIVER_INFO_4W;
496STRUCT!{struct DRIVER_INFO_5A {
497 cVersion: DWORD,
498 pName: LPSTR,
499 pEnvironment: LPSTR,
500 pDriverPath: LPSTR,
501 pDataFile: LPSTR,
502 pConfigFile: LPSTR,
503 dwDriverAttributes: DWORD,
504 dwConfigVersion: DWORD,
505 dwDriverVersion: DWORD,
506}}
507pub type PDRIVER_INFO_5A = *mut DRIVER_INFO_5A;
508pub type LPDRIVER_INFO_5A = *mut DRIVER_INFO_5A;
509STRUCT!{struct DRIVER_INFO_5W {
510 cVersion: DWORD,
511 pName: LPWSTR,
512 pEnvironment: LPWSTR,
513 pDriverPath: LPWSTR,
514 pDataFile: LPWSTR,
515 pConfigFile: LPWSTR,
516 dwDriverAttributes: DWORD,
517 dwConfigVersion: DWORD,
518 dwDriverVersion: DWORD,
519}}
520pub type PDRIVER_INFO_5W = *mut DRIVER_INFO_5W;
521pub type LPDRIVER_INFO_5W = *mut DRIVER_INFO_5W;
522STRUCT!{struct DRIVER_INFO_6A {
523 cVersion: DWORD,
524 pName: LPSTR,
525 pEnvironment: LPSTR,
526 pDriverPath: LPSTR,
527 pDataFile: LPSTR,
528 pConfigFile: LPSTR,
529 pHelpFile: LPSTR,
530 pDependentFiles: LPSTR,
531 pMonitorName: LPSTR,
532 pDefaultDataType: LPSTR,
533 pszzPreviousNames: LPSTR,
534 ftDriverDate: FILETIME,
535 dwlDriverVersion: DWORDLONG,
536 pszMfgName: LPSTR,
537 pszOEMUrl: LPSTR,
538 pszHardwareID: LPSTR,
539 pszProvider: LPSTR,
540}}
541pub type PDRIVER_INFO_6A = *mut DRIVER_INFO_6A;
542pub type LPDRIVER_INFO_6A = *mut DRIVER_INFO_6A;
543STRUCT!{struct DRIVER_INFO_6W {
544 cVersion: DWORD,
545 pName: LPWSTR,
546 pEnvironment: LPWSTR,
547 pDriverPath: LPWSTR,
548 pDataFile: LPWSTR,
549 pConfigFile: LPWSTR,
550 pHelpFile: LPWSTR,
551 pDependentFiles: LPWSTR,
552 pMonitorName: LPWSTR,
553 pDefaultDataType: LPWSTR,
554 pszzPreviousNames: LPWSTR,
555 ftDriverDate: FILETIME,
556 dwlDriverVersion: DWORDLONG,
557 pszMfgName: LPWSTR,
558 pszOEMUrl: LPWSTR,
559 pszHardwareID: LPWSTR,
560 pszProvider: LPWSTR,
561}}
562pub type PDRIVER_INFO_6W = *mut DRIVER_INFO_6W;
563pub type LPDRIVER_INFO_6W = *mut DRIVER_INFO_6W;
564pub const PRINTER_DRIVER_PACKAGE_AWARE: DWORD = 0x00000001;
565pub const PRINTER_DRIVER_XPS: DWORD = 0x00000002;
566pub const PRINTER_DRIVER_SANDBOX_ENABLED: DWORD = 0x00000004;
567pub const PRINTER_DRIVER_CLASS: DWORD = 0x00000008;
568pub const PRINTER_DRIVER_DERIVED: DWORD = 0x00000010;
569pub const PRINTER_DRIVER_NOT_SHAREABLE: DWORD = 0x00000020;
570pub const PRINTER_DRIVER_CATEGORY_FAX: DWORD = 0x00000040;
571pub const PRINTER_DRIVER_CATEGORY_FILE: DWORD = 0x00000080;
572pub const PRINTER_DRIVER_CATEGORY_VIRTUAL: DWORD = 0x00000100;
573pub const PRINTER_DRIVER_CATEGORY_SERVICE: DWORD = 0x00000200;
574pub const PRINTER_DRIVER_SOFT_RESET_REQUIRED: DWORD = 0x00000400;
575pub const PRINTER_DRIVER_SANDBOX_DISABLED: DWORD = 0x00000800;
576pub const PRINTER_DRIVER_CATEGORY_3D: DWORD = 0x00001000;
577pub const PRINTER_DRIVER_CATEGORY_CLOUD: DWORD = 0x00002000;
578STRUCT!{struct DRIVER_INFO_8A {
579 cVersion: DWORD,
580 pName: LPSTR,
581 pEnvironment: LPSTR,
582 pDriverPath: LPSTR,
583 pDataFile: LPSTR,
584 pConfigFile: LPSTR,
585 pHelpFile: LPSTR,
586 pDependentFiles: LPSTR,
587 pMonitorName: LPSTR,
588 pDefaultDataType: LPSTR,
589 pszzPreviousNames: LPSTR,
590 ftDriverDate: FILETIME,
591 dwlDriverVersion: DWORDLONG,
592 pszMfgName: LPSTR,
593 pszOEMUrl: LPSTR,
594 pszHardwareID: LPSTR,
595 pszProvider: LPSTR,
596 pszPrintProcessor: LPSTR,
597 pszVendorSetup: LPSTR,
598 pszzColorProfiles: LPSTR,
599 pszInfPath: LPSTR,
600 dwPrinterDriverAttributes: DWORD,
601 pszzCoreDriverDependencies: LPSTR,
602 ftMinInboxDriverVerDate: FILETIME,
603 dwlMinInboxDriverVerVersion: DWORDLONG,
604}}
605pub type PDRIVER_INFO_8A = *mut DRIVER_INFO_8A;
606pub type LPDRIVER_INFO_8A = *mut DRIVER_INFO_8A;
607STRUCT!{struct DRIVER_INFO_8W {
608 cVersion: DWORD,
609 pName: LPWSTR,
610 pEnvironment: LPWSTR,
611 pDriverPath: LPWSTR,
612 pDataFile: LPWSTR,
613 pConfigFile: LPWSTR,
614 pHelpFile: LPWSTR,
615 pDependentFiles: LPWSTR,
616 pMonitorName: LPWSTR,
617 pDefaultDataType: LPWSTR,
618 pszzPreviousNames: LPWSTR,
619 ftDriverDate: FILETIME,
620 dwlDriverVersion: DWORDLONG,
621 pszMfgName: LPWSTR,
622 pszOEMUrl: LPWSTR,
623 pszHardwareID: LPWSTR,
624 pszProvider: LPWSTR,
625 pszPrintProcessor: LPWSTR,
626 pszVendorSetup: LPWSTR,
627 pszzColorProfiles: LPWSTR,
628 pszInfPath: LPWSTR,
629 dwPrinterDriverAttributes: DWORD,
630 pszzCoreDriverDependencies: LPWSTR,
631 ftMinInboxDriverVerDate: FILETIME,
632 dwlMinInboxDriverVerVersion: DWORDLONG,
633}}
634pub type PDRIVER_INFO_8W = *mut DRIVER_INFO_8W;
635pub type LPDRIVER_INFO_8W = *mut DRIVER_INFO_8W;
636pub const DRIVER_KERNELMODE: DWORD = 0x00000001;
637pub const DRIVER_USERMODE: DWORD = 0x00000002;
638pub const DPD_DELETE_UNUSED_FILES: DWORD = 0x00000001;
639pub const DPD_DELETE_SPECIFIC_VERSION: DWORD = 0x00000002;
640pub const DPD_DELETE_ALL_FILES: DWORD = 0x00000004;
641pub const APD_STRICT_UPGRADE: DWORD = 0x00000001;
642pub const APD_STRICT_DOWNGRADE: DWORD = 0x00000002;
643pub const APD_COPY_ALL_FILES: DWORD = 0x00000004;
644pub const APD_COPY_NEW_FILES: DWORD = 0x00000008;
645pub const APD_COPY_FROM_DIRECTORY: DWORD = 0x00000010;
646STRUCT!{struct DOC_INFO_1A {
647 pDocName: LPSTR,
648 pOutputFile: LPSTR,
649 pDatatype: LPSTR,
650}}
651pub type PDOC_INFO_1A = *mut DOC_INFO_1A;
652pub type LPDOC_INFO_1A = *mut DOC_INFO_1A;
653STRUCT!{struct DOC_INFO_1W {
654 pDocName: LPWSTR,
655 pOutputFile: LPWSTR,
656 pDatatype: LPWSTR,
657}}
658pub type PDOC_INFO_1W = *mut DOC_INFO_1W;
659pub type LPDOC_INFO_1W = *mut DOC_INFO_1W;
660STRUCT!{struct FORM_INFO_1A {
661 Flags: DWORD,
662 pName: LPSTR,
663 Size: SIZEL,
664 ImageableArea: RECTL,
665}}
666pub type PFORM_INFO_1A = *mut FORM_INFO_1A;
667pub type LPFORM_INFO_1A = *mut FORM_INFO_1A;
668STRUCT!{struct FORM_INFO_1W {
669 Flags: DWORD,
670 pName: LPWSTR,
671 Size: SIZEL,
672 ImageableArea: RECTL,
673}}
674pub type PFORM_INFO_1W = *mut FORM_INFO_1W;
675pub type LPFORM_INFO_1W = *mut FORM_INFO_1W;
676pub const STRING_NONE: DWORD = 0x00000001;
677pub const STRING_MUIDLL: DWORD = 0x00000002;
678pub const STRING_LANGPAIR: DWORD = 0x00000004;
679pub const MAX_FORM_KEYWORD_LENGTH: usize = 63 + 1;
680STRUCT!{struct FORM_INFO_2A {
681 Flags: DWORD,
682 pName: LPCSTR,
683 Size: SIZEL,
684 ImageableArea: RECTL,
685 pKeyword: LPCSTR,
686 StringType: DWORD,
687 pMuiDll: LPCSTR,
688 dwResourceId: DWORD,
689 pDisplayName: LPCSTR,
690 wLangId: LANGID,
691}}
692pub type PFORM_INFO_2A = *mut FORM_INFO_2A;
693pub type LPFORM_INFO_2A = *mut FORM_INFO_2A;
694STRUCT!{struct FORM_INFO_2W {
695 Flags: DWORD,
696 pName: LPCWSTR,
697 Size: SIZEL,
698 ImageableArea: RECTL,
699 pKeyword: LPCSTR,
700 StringType: DWORD,
701 pMuiDll: LPCWSTR,
702 dwResourceId: DWORD,
703 pDisplayName: LPCWSTR,
704 wLangId: LANGID,
705}}
706pub type PFORM_INFO_2W = *mut FORM_INFO_2W;
707pub type LPFORM_INFO_2W = *mut FORM_INFO_2W;
708STRUCT!{struct DOC_INFO_2A {
709 pDocName: LPSTR,
710 pOutputFile: LPSTR,
711 pDatatype: LPSTR,
712 dwMode: DWORD,
713 JobId: DWORD,
714}}
715pub type PDOC_INFO_2A = *mut DOC_INFO_2A;
716pub type LPDOC_INFO_2A = *mut DOC_INFO_2A;
717STRUCT!{struct DOC_INFO_2W {
718 pDocName: LPWSTR,
719 pOutputFile: LPWSTR,
720 pDatatype: LPWSTR,
721 dwMode: DWORD,
722 JobId: DWORD,
723}}
724pub type PDOC_INFO_2W = *mut DOC_INFO_2W;
725pub type LPDOC_INFO_2W = *mut DOC_INFO_2W;
726pub const DI_CHANNEL: DWORD = 1;
727pub const DI_READ_SPOOL_JOB: DWORD = 3;
728STRUCT!{struct DOC_INFO_3A {
729 pDocName: LPSTR,
730 pOutputFile: LPSTR,
731 pDatatype: LPSTR,
732 dwFlags: DWORD,
733}}
734pub type PDOC_INFO_3A = *mut DOC_INFO_3A;
735pub type LPDOC_INFO_3A = *mut DOC_INFO_3A;
736STRUCT!{struct DOC_INFO_3W {
737 pDocName: LPWSTR,
738 pOutputFile: LPWSTR,
739 pDatatype: LPWSTR,
740 dwFlags: DWORD,
741}}
742pub type PDOC_INFO_3W = *mut DOC_INFO_3W;
743pub type LPDOC_INFO_3W = *mut DOC_INFO_3W;
744pub const DI_MEMORYMAP_WRITE: DWORD = 0x00000001;
745pub const FORM_USER: DWORD = 0x00000000;
746pub const FORM_BUILTIN: DWORD = 0x00000001;
747pub const FORM_PRINTER: DWORD = 0x00000002;
748STRUCT!{struct PRINTPROCESSOR_INFO_1A {
749 pName: LPSTR,
750}}
751pub type PPRINTPROCESSOR_INFO_1A = *mut PRINTPROCESSOR_INFO_1A;
752pub type LPPRINTPROCESSOR_INFO_1A = *mut PRINTPROCESSOR_INFO_1A;
753STRUCT!{struct PRINTPROCESSOR_INFO_1W {
754 pName: LPWSTR,
755}}
756pub type PPRINTPROCESSOR_INFO_1W = *mut PRINTPROCESSOR_INFO_1W;
757pub type LPPRINTPROCESSOR_INFO_1W = *mut PRINTPROCESSOR_INFO_1W;
758STRUCT!{struct PRINTPROCESSOR_CAPS_1 {
759 dwLevel: DWORD,
760 dwNupOptions: DWORD,
761 dwPageOrderFlags: DWORD,
762 dwNumberOfCopies: DWORD,
763}}
764pub type PPRINTPROCESSOR_CAPS_1 = *mut PRINTPROCESSOR_CAPS_1;
765STRUCT!{struct PRINTPROCESSOR_CAPS_2 {
766 dwLevel: DWORD,
767 dwNupOptions: DWORD,
768 dwPageOrderFlags: DWORD,
769 dwNumberOfCopies: DWORD,
770 dwDuplexHandlingCaps: DWORD,
771 dwNupDirectionCaps: DWORD,
772 dwNupBorderCaps: DWORD,
773 dwBookletHandlingCaps: DWORD,
774 dwScalingCaps: DWORD,
775}}
776pub type PPRINTPROCESSOR_CAPS_2 = *mut PRINTPROCESSOR_CAPS_2;
777pub const PPCAPS_RIGHT_THEN_DOWN: DWORD = 0x00000001;
778pub const PPCAPS_DOWN_THEN_RIGHT: DWORD = 0x00000001 << 1;
779pub const PPCAPS_LEFT_THEN_DOWN: DWORD = 0x00000001 << 2;
780pub const PPCAPS_DOWN_THEN_LEFT: DWORD = 0x00000001 << 3;
781pub const PPCAPS_BORDER_PRINT: DWORD = 0x00000001;
782pub const PPCAPS_BOOKLET_EDGE: DWORD = 0x00000001;
783pub const PPCAPS_REVERSE_PAGES_FOR_REVERSE_DUPLEX: DWORD = 0x00000001;
784pub const PPCAPS_DONT_SEND_EXTRA_PAGES_FOR_DUPLEX: DWORD = 0x00000001 << 1;
785pub const PPCAPS_SQUARE_SCALING: DWORD = 0x00000001;
786STRUCT!{struct PORT_INFO_1A {
787 pName: LPSTR,
788}}
789pub type PPORT_INFO_1A = *mut PORT_INFO_1A;
790pub type LPPORT_INFO_1A = *mut PORT_INFO_1A;
791STRUCT!{struct PORT_INFO_1W {
792 pName: LPWSTR,
793}}
794pub type PPORT_INFO_1W = *mut PORT_INFO_1W;
795pub type LPPORT_INFO_1W = *mut PORT_INFO_1W;
796STRUCT!{struct PORT_INFO_2A {
797 pPortName: LPSTR,
798 pMonitorName: LPSTR,
799 pDescription: LPSTR,
800 fPortType: DWORD,
801 Reserved: DWORD,
802}}
803pub type PPORT_INFO_2A = *mut PORT_INFO_2A;
804pub type LPPORT_INFO_2A = *mut PORT_INFO_2A;
805STRUCT!{struct PORT_INFO_2W {
806 pPortName: LPWSTR,
807 pMonitorName: LPWSTR,
808 pDescription: LPWSTR,
809 fPortType: DWORD,
810 Reserved: DWORD,
811}}
812pub type PPORT_INFO_2W = *mut PORT_INFO_2W;
813pub type LPPORT_INFO_2W = *mut PORT_INFO_2W;
814pub const PORT_TYPE_WRITE: DWORD = 0x0001;
815pub const PORT_TYPE_READ: DWORD = 0x0002;
816pub const PORT_TYPE_REDIRECTED: DWORD = 0x0004;
817pub const PORT_TYPE_NET_ATTACHED: DWORD = 0x0008;
818STRUCT!{struct PORT_INFO_3A {
819 dwStatus: DWORD,
820 pszStatus: LPSTR,
821 dwSeverity: DWORD,
822}}
823pub type PPORT_INFO_3A = *mut PORT_INFO_3A;
824pub type LPPORT_INFO_3A = *mut PORT_INFO_3A;
825STRUCT!{struct PORT_INFO_3W {
826 dwStatus: DWORD,
827 pszStatus: LPWSTR,
828 dwSeverity: DWORD,
829}}
830pub type PPORT_INFO_3W = *mut PORT_INFO_3W;
831pub type LPPORT_INFO_3W = *mut PORT_INFO_3W;
832pub const PORT_STATUS_TYPE_ERROR: DWORD = 1;
833pub const PORT_STATUS_TYPE_WARNING: DWORD = 2;
834pub const PORT_STATUS_TYPE_INFO: DWORD = 3;
835pub const PORT_STATUS_OFFLINE: DWORD = 1;
836pub const PORT_STATUS_PAPER_JAM: DWORD = 2;
837pub const PORT_STATUS_PAPER_OUT: DWORD = 3;
838pub const PORT_STATUS_OUTPUT_BIN_FULL: DWORD = 4;
839pub const PORT_STATUS_PAPER_PROBLEM: DWORD = 5;
840pub const PORT_STATUS_NO_TONER: DWORD = 6;
841pub const PORT_STATUS_DOOR_OPEN: DWORD = 7;
842pub const PORT_STATUS_USER_INTERVENTION: DWORD = 8;
843pub const PORT_STATUS_OUT_OF_MEMORY: DWORD = 9;
844pub const PORT_STATUS_TONER_LOW: DWORD = 10;
845pub const PORT_STATUS_WARMING_UP: DWORD = 11;
846pub const PORT_STATUS_POWER_SAVE: DWORD = 12;
847STRUCT!{struct MONITOR_INFO_1A {
848 pName: LPSTR,
849}}
850pub type PMONITOR_INFO_1A = *mut MONITOR_INFO_1A;
851pub type LPMONITOR_INFO_1A = *mut MONITOR_INFO_1A;
852STRUCT!{struct MONITOR_INFO_1W {
853 pName: LPWSTR,
854}}
855pub type PMONITOR_INFO_1W = *mut MONITOR_INFO_1W;
856pub type LPMONITOR_INFO_1W = *mut MONITOR_INFO_1W;
857STRUCT!{struct MONITOR_INFO_2A {
858 pName: LPSTR,
859 pEnvironment: LPSTR,
860 pDLLName: LPSTR,
861}}
862pub type PMONITOR_INFO_2A = *mut MONITOR_INFO_2A;
863pub type LPMONITOR_INFO_2A = *mut MONITOR_INFO_2A;
864STRUCT!{struct MONITOR_INFO_2W {
865 pName: LPWSTR,
866 pEnvironment: LPWSTR,
867 pDLLName: LPWSTR,
868}}
869pub type PMONITOR_INFO_2W = *mut MONITOR_INFO_2W;
870pub type LPMONITOR_INFO_2W = *mut MONITOR_INFO_2W;
871STRUCT!{struct DATATYPES_INFO_1A {
872 pName: LPSTR,
873}}
874pub type PDATATYPES_INFO_1A = *mut DATATYPES_INFO_1A;
875pub type LPDATATYPES_INFO_1A = *mut DATATYPES_INFO_1A;
876STRUCT!{struct DATATYPES_INFO_1W {
877 pName: LPWSTR,
878}}
879pub type PDATATYPES_INFO_1W = *mut DATATYPES_INFO_1W;
880pub type LPDATATYPES_INFO_1W = *mut DATATYPES_INFO_1W;
881STRUCT!{struct PRINTER_DEFAULTSA {
882 pDataType: LPSTR,
883 pDevMode: LPDEVMODEA,
884 DesiredAccess: ACCESS_MASK,
885}}
886pub type PPRINTER_DEFAULTSA = *mut PRINTER_DEFAULTSA;
887pub type LPPRINTER_DEFAULTSA = *mut PRINTER_DEFAULTSA;
888STRUCT!{struct PRINTER_DEFAULTSW {
889 pDataType: LPWSTR,
890 pDevMode: LPDEVMODEW,
891 DesiredAccess: ACCESS_MASK,
892}}
893pub type PPRINTER_DEFAULTSW = *mut PRINTER_DEFAULTSW;
894pub type LPPRINTER_DEFAULTSW = *mut PRINTER_DEFAULTSW;
895STRUCT!{struct PRINTER_ENUM_VALUESA {
896 pValueName: LPSTR,
897 cbValueName: DWORD,
898 dwType: DWORD,
899 pData: LPBYTE,
900 cbData: DWORD,
901}}
902pub type PPRINTER_ENUM_VALUESA = *mut PRINTER_ENUM_VALUESA;
903pub type LPPRINTER_ENUM_VALUESA = *mut PRINTER_ENUM_VALUESA;
904STRUCT!{struct PRINTER_ENUM_VALUESW {
905 pValueName: LPWSTR,
906 cbValueName: DWORD,
907 dwType: DWORD,
908 pData: LPBYTE,
909 cbData: DWORD,
910}}
911pub type PPRINTER_ENUM_VALUESW = *mut PRINTER_ENUM_VALUESW;
912pub type LPPRINTER_ENUM_VALUESW = *mut PRINTER_ENUM_VALUESW;
913extern "system" {
914 pub fn EnumPrintersA(
915 Flags: DWORD,
916 Name: LPSTR,
917 Level: DWORD,
918 pPrinterEnum: LPBYTE,
919 cbBuf: DWORD,
920 pcbNeeded: LPDWORD,
921 pcReturned: LPDWORD,
922 ) -> BOOL;
923 pub fn EnumPrintersW(
924 Flags: DWORD,
925 Name: LPWSTR,
926 Level: DWORD,
927 pPrinterEnum: LPBYTE,
928 cbBuf: DWORD,
929 pcbNeeded: LPDWORD,
930 pcReturned: LPDWORD,
931 ) -> BOOL;
932}
933pub const PRINTER_ENUM_DEFAULT: DWORD = 0x00000001;
934pub const PRINTER_ENUM_LOCAL: DWORD = 0x00000002;
935pub const PRINTER_ENUM_CONNECTIONS: DWORD = 0x00000004;
936pub const PRINTER_ENUM_FAVORITE: DWORD = 0x00000004;
937pub const PRINTER_ENUM_NAME: DWORD = 0x00000008;
938pub const PRINTER_ENUM_REMOTE: DWORD = 0x00000010;
939pub const PRINTER_ENUM_SHARED: DWORD = 0x00000020;
940pub const PRINTER_ENUM_NETWORK: DWORD = 0x00000040;
941pub const PRINTER_ENUM_EXPAND: DWORD = 0x00004000;
942pub const PRINTER_ENUM_CONTAINER: DWORD = 0x00008000;
943pub const PRINTER_ENUM_ICONMASK: DWORD = 0x00ff0000;
944pub const PRINTER_ENUM_ICON1: DWORD = 0x00010000;
945pub const PRINTER_ENUM_ICON2: DWORD = 0x00020000;
946pub const PRINTER_ENUM_ICON3: DWORD = 0x00040000;
947pub const PRINTER_ENUM_ICON4: DWORD = 0x00080000;
948pub const PRINTER_ENUM_ICON5: DWORD = 0x00100000;
949pub const PRINTER_ENUM_ICON6: DWORD = 0x00200000;
950pub const PRINTER_ENUM_ICON7: DWORD = 0x00400000;
951pub const PRINTER_ENUM_ICON8: DWORD = 0x00800000;
952pub const PRINTER_ENUM_HIDE: DWORD = 0x01000000;
953pub const PRINTER_ENUM_CATEGORY_ALL: DWORD = 0x02000000;
954pub const PRINTER_ENUM_CATEGORY_3D: DWORD = 0x04000000;
955pub const SPOOL_FILE_PERSISTENT: DWORD = 0x00000001;
956pub const SPOOL_FILE_TEMPORARY: DWORD = 0x00000002;
957extern "system" {
958 pub fn GetSpoolFileHandle(
959 hPrinter: HANDLE,
960 ) -> HANDLE;
961 pub fn CommitSpoolData(
962 hPrinter: HANDLE,
963 hSpoolFile: HANDLE,
964 cbCommit: DWORD,
965 ) -> HANDLE;
966 pub fn CloseSpoolFileHandle(
967 hPrinter: HANDLE,
968 hSpoolFile: HANDLE,
969 ) -> BOOL;
970 pub fn OpenPrinterA(
971 pPrinterName: LPSTR,
972 phPrinter: LPHANDLE,
973 pDefault: LPPRINTER_DEFAULTSA,
974 ) -> BOOL;
975 pub fn OpenPrinterW(
976 pPrinterName: LPWSTR,
977 phPrinter: LPHANDLE,
978 pDefault: LPPRINTER_DEFAULTSW,
979 ) -> BOOL;
980 pub fn ResetPrinterA(
981 hPrinter: HANDLE,
982 pDefault: LPPRINTER_DEFAULTSA,
983 ) -> BOOL;
984 pub fn ResetPrinterW(
985 hPrinter: HANDLE,
986 pDefault: LPPRINTER_DEFAULTSW,
987 ) -> BOOL;
988 pub fn SetJobA(
989 hPrinter: HANDLE,
990 JobId: DWORD,
991 Level: DWORD,
992 pJob: LPBYTE,
993 Command: DWORD,
994 ) -> BOOL;
995 pub fn SetJobW(
996 hPrinter: HANDLE,
997 JobId: DWORD,
998 Level: DWORD,
999 pJob: LPBYTE,
1000 Command: DWORD,
1001 ) -> BOOL;
1002 pub fn GetJobA(
1003 hPrinter: HANDLE,
1004 JobId: DWORD,
1005 Level: DWORD,
1006 pJob: LPBYTE,
1007 cbBuf: DWORD,
1008 pcbNeeded: LPDWORD,
1009 ) -> BOOL;
1010 pub fn GetJobW(
1011 hPrinter: HANDLE,
1012 JobId: DWORD,
1013 Level: DWORD,
1014 pJob: LPBYTE,
1015 cbBuf: DWORD,
1016 pcbNeeded: LPDWORD,
1017 ) -> BOOL;
1018 pub fn EnumJobsA(
1019 hPrinter: HANDLE,
1020 FirstJob: DWORD,
1021 NoJobs: DWORD,
1022 Level: DWORD,
1023 pJob: LPBYTE,
1024 cbBuf: DWORD,
1025 pcbNeeded: LPDWORD,
1026 pcReturned: LPDWORD,
1027 ) -> BOOL;
1028 pub fn EnumJobsW(
1029 hPrinter: HANDLE,
1030 FirstJob: DWORD,
1031 NoJobs: DWORD,
1032 Level: DWORD,
1033 pJob: LPBYTE,
1034 cbBuf: DWORD,
1035 pcbNeeded: LPDWORD,
1036 pcReturned: LPDWORD,
1037 ) -> BOOL;
1038 pub fn AddPrinterA(
1039 pName: LPSTR,
1040 Level: DWORD,
1041 pPrinter: LPBYTE,
1042 ) -> HANDLE;
1043 pub fn AddPrinterW(
1044 pName: LPWSTR,
1045 Level: DWORD,
1046 pPrinter: LPBYTE,
1047 ) -> HANDLE;
1048 pub fn DeletePrinter(
1049 hPrinter: HANDLE,
1050 ) -> BOOL;
1051 pub fn SetPrinterA(
1052 hPrinter: HANDLE,
1053 Level: DWORD,
1054 pPrinter: LPBYTE,
1055 Command: DWORD,
1056 ) -> BOOL;
1057 pub fn SetPrinterW(
1058 hPrinter: HANDLE,
1059 Level: DWORD,
1060 pPrinter: LPBYTE,
1061 Command: DWORD,
1062 ) -> BOOL;
1063 pub fn GetPrinterA(
1064 hPrinter: HANDLE,
1065 Level: DWORD,
1066 pPrinter: LPBYTE,
1067 cbBuf: DWORD,
1068 pcbNeeded: LPDWORD,
1069 ) -> BOOL;
1070 pub fn GetPrinterW(
1071 hPrinter: HANDLE,
1072 Level: DWORD,
1073 pPrinter: LPBYTE,
1074 cbBuf: DWORD,
1075 pcbNeeded: LPDWORD,
1076 ) -> BOOL;
1077 pub fn AddPrinterDriverA(
1078 pName: LPSTR,
1079 Level: DWORD,
1080 pDriverInfo: LPBYTE,
1081 ) -> BOOL;
1082 pub fn AddPrinterDriverW(
1083 pName: LPWSTR,
1084 Level: DWORD,
1085 pDriverInfo: LPBYTE,
1086 ) -> BOOL;
1087 pub fn AddPrinterDriverExA(
1088 pName: LPSTR,
1089 Level: DWORD,
1090 pDriverInfo: PBYTE,
1091 dwFileCopyFlags: DWORD,
1092 ) -> BOOL;
1093 pub fn AddPrinterDriverExW(
1094 pName: LPWSTR,
1095 Level: DWORD,
1096 pDriverInfo: PBYTE,
1097 dwFileCopyFlags: DWORD,
1098 ) -> BOOL;
1099 pub fn EnumPrinterDriversA(
1100 pName: LPSTR,
1101 pEnvironment: LPSTR,
1102 Level: DWORD,
1103 pDriverInfo: LPBYTE,
1104 cbBuf: DWORD,
1105 pcbNeeded: LPDWORD,
1106 pcReturned: LPDWORD,
1107 ) -> BOOL;
1108 pub fn EnumPrinterDriversW(
1109 pName: LPWSTR,
1110 pEnvironment: LPWSTR,
1111 Level: DWORD,
1112 pDriverInfo: LPBYTE,
1113 cbBuf: DWORD,
1114 pcbNeeded: LPDWORD,
1115 pcReturned: LPDWORD,
1116 ) -> BOOL;
1117 pub fn GetPrinterDriverA(
1118 hPrinter: HANDLE,
1119 pEnvironment: LPSTR,
1120 Level: DWORD,
1121 pDriverInfo: LPBYTE,
1122 cbBuf: DWORD,
1123 pcbNeeded: LPDWORD,
1124 ) -> BOOL;
1125 pub fn GetPrinterDriverW(
1126 hPrinter: HANDLE,
1127 pEnvironment: LPWSTR,
1128 Level: DWORD,
1129 pDriverInfo: LPBYTE,
1130 cbBuf: DWORD,
1131 pcbNeeded: LPDWORD,
1132 ) -> BOOL;
1133 pub fn GetPrinterDriverDirectoryA(
1134 pName: LPSTR,
1135 pEnvironment: LPSTR,
1136 Level: DWORD,
1137 pDriverDirectory: LPBYTE,
1138 cbBuf: DWORD,
1139 pcbNeeded: LPDWORD,
1140 ) -> BOOL;
1141 pub fn GetPrinterDriverDirectoryW(
1142 pName: LPWSTR,
1143 pEnvironment: LPWSTR,
1144 Level: DWORD,
1145 pDriverDirectory: LPBYTE,
1146 cbBuf: DWORD,
1147 pcbNeeded: LPDWORD,
1148 ) -> BOOL;
1149 pub fn DeletePrinterDriverA(
1150 pName: LPSTR,
1151 pEnvironment: LPSTR,
1152 pDriverName: LPSTR,
1153 ) -> BOOL;
1154 pub fn DeletePrinterDriverW(
1155 pName: LPWSTR,
1156 pEnvironment: LPWSTR,
1157 pDriverName: LPWSTR,
1158 ) -> BOOL;
1159 pub fn DeletePrinterDriverExA(
1160 pName: LPSTR,
1161 pEnvironment: LPSTR,
1162 pDriverName: LPSTR,
1163 dwDeleteFlag: DWORD,
1164 dwVersionFlag: DWORD,
1165 ) -> BOOL;
1166 pub fn DeletePrinterDriverExW(
1167 pName: LPWSTR,
1168 pEnvironment: LPWSTR,
1169 pDriverName: LPWSTR,
1170 dwDeleteFlag: DWORD,
1171 dwVersionFlag: DWORD,
1172 ) -> BOOL;
1173 pub fn AddPrintProcessorA(
1174 pName: LPSTR,
1175 pEnvironment: LPSTR,
1176 pPathName: LPSTR,
1177 pPrintProcessorName: LPSTR,
1178 ) -> BOOL;
1179 pub fn AddPrintProcessorW(
1180 pName: LPWSTR,
1181 pEnvironment: LPWSTR,
1182 pPathName: LPWSTR,
1183 pPrintProcessorName: LPWSTR,
1184 ) -> BOOL;
1185 pub fn EnumPrintProcessorsA(
1186 pName: LPSTR,
1187 pEnvironment: LPSTR,
1188 Level: DWORD,
1189 pPrintProcessorInfo: LPBYTE,
1190 cbBuf: DWORD,
1191 pcbNeeded: LPDWORD,
1192 pcReturned: LPDWORD,
1193 ) -> BOOL;
1194 pub fn EnumPrintProcessorsW(
1195 pName: LPWSTR,
1196 pEnvironment: LPWSTR,
1197 Level: DWORD,
1198 pPrintProcessorInfo: LPBYTE,
1199 cbBuf: DWORD,
1200 pcbNeeded: LPDWORD,
1201 pcReturned: LPDWORD,
1202 ) -> BOOL;
1203 pub fn GetPrintProcessorDirectoryA(
1204 pName: LPSTR,
1205 pEnvironment: LPSTR,
1206 Level: DWORD,
1207 pPrintProcessorInfo: LPBYTE,
1208 cbBuf: DWORD,
1209 pcbNeeded: LPDWORD,
1210 ) -> BOOL;
1211 pub fn GetPrintProcessorDirectoryW(
1212 pName: LPWSTR,
1213 pEnvironment: LPWSTR,
1214 Level: DWORD,
1215 pPrintProcessorInfo: LPBYTE,
1216 cbBuf: DWORD,
1217 pcbNeeded: LPDWORD,
1218 ) -> BOOL;
1219 pub fn EnumPrintProcessorDatatypesA(
1220 pName: LPSTR,
1221 pPrintProcessorName: LPSTR,
1222 Level: DWORD,
1223 pDatatypes: LPBYTE,
1224 cbBuf: DWORD,
1225 pcbNeeded: LPDWORD,
1226 pcReturned: LPDWORD,
1227 ) -> BOOL;
1228 pub fn EnumPrintProcessorDatatypesW(
1229 pName: LPWSTR,
1230 pPrintProcessorName: LPWSTR,
1231 Level: DWORD,
1232 pDatatypes: LPBYTE,
1233 cbBuf: DWORD,
1234 pcbNeeded: LPDWORD,
1235 pcReturned: LPDWORD,
1236 ) -> BOOL;
1237 pub fn DeletePrintProcessorA(
1238 pName: LPSTR,
1239 pEnvironment: LPSTR,
1240 pPrintProcessorName: LPSTR,
1241 ) -> BOOL;
1242 pub fn DeletePrintProcessorW(
1243 pName: LPWSTR,
1244 pEnvironment: LPWSTR,
1245 pPrintProcessorName: LPWSTR,
1246 ) -> BOOL;
1247 pub fn StartDocPrinterA(
1248 hPrinter: HANDLE,
1249 Level: DWORD,
1250 pDocInfo: LPBYTE,
1251 ) -> DWORD;
1252 pub fn StartDocPrinterW(
1253 hPrinter: HANDLE,
1254 Level: DWORD,
1255 pDocInfo: LPBYTE,
1256 ) -> DWORD;
1257 pub fn StartPagePrinter(
1258 hPrinter: HANDLE,
1259 ) -> BOOL;
1260 pub fn WritePrinter(
1261 hPrinter: HANDLE,
1262 pBuf: LPVOID,
1263 cbBuf: DWORD,
1264 pcWritten: LPDWORD,
1265 ) -> BOOL;
1266 pub fn FlushPrinter(
1267 hPrinter: HANDLE,
1268 pBuf: LPVOID,
1269 cbBuf: DWORD,
1270 pcWritten: LPDWORD,
1271 cSleep: DWORD,
1272 ) -> BOOL;
1273 pub fn EndPagePrinter(
1274 hPrinter: HANDLE,
1275 ) -> BOOL;
1276 pub fn AbortPrinter(
1277 hPrinter: HANDLE,
1278 ) -> BOOL;
1279 pub fn ReadPrinter(
1280 hPrinter: HANDLE,
1281 pBuf: LPVOID,
1282 cbBuf: DWORD,
1283 pNoBytesRead: LPDWORD,
1284 ) -> BOOL;
1285 pub fn EndDocPrinter(
1286 hPrinter: HANDLE,
1287 ) -> BOOL;
1288 pub fn AddJobA(
1289 hPrinter: HANDLE,
1290 Level: DWORD,
1291 pData: LPBYTE,
1292 cbBuf: DWORD,
1293 pcbNeeded: LPDWORD,
1294 ) -> BOOL;
1295 pub fn AddJobW(
1296 hPrinter: HANDLE,
1297 Level: DWORD,
1298 pData: LPBYTE,
1299 cbBuf: DWORD,
1300 pcbNeeded: LPDWORD,
1301 ) -> BOOL;
1302 pub fn ScheduleJob(
1303 hPrinter: HANDLE,
1304 JobId: DWORD,
1305 ) -> BOOL;
1306 pub fn PrinterProperties(
1307 hWnd: HWND,
1308 hPrinter: HANDLE,
1309 ) -> BOOL;
1310 pub fn DocumentPropertiesA(
1311 hWnd: HWND,
1312 hPrinter: HANDLE,
1313 pDeviceName: LPSTR,
1314 pDevModeOutput: PDEVMODEA,
1315 pDevModeInput: PDEVMODEA,
1316 fMode: DWORD,
1317 ) -> LONG;
1318 pub fn DocumentPropertiesW(
1319 hWnd: HWND,
1320 hPrinter: HANDLE,
1321 pDeviceName: LPWSTR,
1322 pDevModeOutput: PDEVMODEW,
1323 pDevModeInput: PDEVMODEW,
1324 fMode: DWORD,
1325 ) -> LONG;
1326 pub fn AdvancedDocumentPropertiesA(
1327 hWnd: HWND,
1328 hPrinter: HANDLE,
1329 pDeviceName: LPSTR,
1330 pDevModeOutput: PDEVMODEA,
1331 pDevModeInput: PDEVMODEA,
1332 ) -> LONG;
1333 pub fn AdvancedDocumentPropertiesW(
1334 hWnd: HWND,
1335 hPrinter: HANDLE,
1336 pDeviceName: LPWSTR,
1337 pDevModeOutput: PDEVMODEW,
1338 pDevModeInput: PDEVMODEW,
1339 ) -> LONG;
1340 pub fn ExtDeviceMode(
1341 hWnd: HWND,
1342 hInst: HANDLE,
1343 pDevModeOutput: LPDEVMODEA,
1344 pDeviceName: LPSTR,
1345 pPort: LPSTR,
1346 pDevModeInput: LPDEVMODEA,
1347 pProfile: LPSTR,
1348 fMode: DWORD,
1349 ) -> LONG;
1350 pub fn GetPrinterDataA(
1351 hPrinter: HANDLE,
1352 pValueName: LPSTR,
1353 pType: LPDWORD,
1354 pData: LPBYTE,
1355 nSize: DWORD,
1356 pcbNeeded: LPDWORD,
1357 ) -> DWORD;
1358 pub fn GetPrinterDataW(
1359 hPrinter: HANDLE,
1360 pValueName: LPWSTR,
1361 pType: LPDWORD,
1362 pData: LPBYTE,
1363 nSize: DWORD,
1364 pcbNeeded: LPDWORD,
1365 ) -> DWORD;
1366 pub fn GetPrinterDataExA(
1367 hPrinter: HANDLE,
1368 pKeyName: LPCSTR,
1369 pValueName: LPCSTR,
1370 pType: LPDWORD,
1371 pData: LPBYTE,
1372 nSize: DWORD,
1373 pcbNeeded: LPDWORD,
1374 ) -> DWORD;
1375 pub fn GetPrinterDataExW(
1376 hPrinter: HANDLE,
1377 pKeyName: LPCWSTR,
1378 pValueName: LPCWSTR,
1379 pType: LPDWORD,
1380 pData: LPBYTE,
1381 nSize: DWORD,
1382 pcbNeeded: LPDWORD,
1383 ) -> DWORD;
1384 pub fn EnumPrinterDataA(
1385 hPrinter: HANDLE,
1386 dwIndex: DWORD,
1387 pValueName: LPSTR,
1388 cbValueName: DWORD,
1389 pcbValueName: LPDWORD,
1390 pType: LPDWORD,
1391 pData: LPBYTE,
1392 cbData: DWORD,
1393 pcbData: LPDWORD,
1394 ) -> DWORD;
1395 pub fn EnumPrinterDataW(
1396 hPrinter: HANDLE,
1397 dwIndex: DWORD,
1398 pValueName: LPWSTR,
1399 cbValueName: DWORD,
1400 pcbValueName: LPDWORD,
1401 pType: LPDWORD,
1402 pData: LPBYTE,
1403 cbData: DWORD,
1404 pcbData: LPDWORD,
1405 ) -> DWORD;
1406 pub fn EnumPrinterDataExA(
1407 hPrinter: HANDLE,
1408 pKeyName: LPCSTR,
1409 pEnumValues: LPBYTE,
1410 cbEnumValues: DWORD,
1411 pcbEnumValues: LPDWORD,
1412 pnEnumValues: LPDWORD,
1413 ) -> DWORD;
1414 pub fn EnumPrinterDataExW(
1415 hPrinter: HANDLE,
1416 pKeyName: LPCWSTR,
1417 pEnumValues: LPBYTE,
1418 cbEnumValues: DWORD,
1419 pcbEnumValues: LPDWORD,
1420 pnEnumValues: LPDWORD,
1421 ) -> DWORD;
1422 pub fn EnumPrinterKeyA(
1423 hPrinter: HANDLE,
1424 pKeyName: LPCSTR,
1425 pSubKey: LPSTR,
1426 cbSubkey: DWORD,
1427 pcbSubkey: LPDWORD,
1428 ) -> DWORD;
1429 pub fn EnumPrinterKeyW(
1430 hPrinter: HANDLE,
1431 pKeyName: LPCWSTR,
1432 pSubKey: LPWSTR,
1433 cbSubkey: DWORD,
1434 pcbSubkey: LPDWORD,
1435 ) -> DWORD;
1436 pub fn SetPrinterDataA(
1437 hPrinter: HANDLE,
1438 pValueName: LPSTR,
1439 Type: DWORD,
1440 pData: LPBYTE,
1441 cbData: DWORD,
1442 ) -> DWORD;
1443 pub fn SetPrinterDataW(
1444 hPrinter: HANDLE,
1445 pValueName: LPWSTR,
1446 Type: DWORD,
1447 pData: LPBYTE,
1448 cbData: DWORD,
1449 ) -> DWORD;
1450 pub fn SetPrinterDataExA(
1451 hPrinter: HANDLE,
1452 pKeyName: LPCSTR,
1453 pValueName: LPCSTR,
1454 Type: DWORD,
1455 pData: LPBYTE,
1456 cbData: DWORD,
1457 ) -> DWORD;
1458 pub fn SetPrinterDataExW(
1459 hPrinter: HANDLE,
1460 pKeyName: LPCWSTR,
1461 pValueName: LPCWSTR,
1462 Type: DWORD,
1463 pData: LPBYTE,
1464 cbData: DWORD,
1465 ) -> DWORD;
1466 pub fn DeletePrinterDataA(
1467 hPrinter: HANDLE,
1468 pValueName: LPSTR,
1469 ) -> DWORD;
1470 pub fn DeletePrinterDataW(
1471 hPrinter: HANDLE,
1472 pValueName: LPWSTR,
1473 ) -> DWORD;
1474 pub fn DeletePrinterDataExA(
1475 hPrinter: HANDLE,
1476 pKeyName: LPCSTR,
1477 pValueName: LPCSTR,
1478 ) -> DWORD;
1479 pub fn DeletePrinterDataExW(
1480 hPrinter: HANDLE,
1481 pKeyName: LPCWSTR,
1482 pValueName: LPCWSTR,
1483 ) -> DWORD;
1484 pub fn DeletePrinterKeyA(
1485 hPrinter: HANDLE,
1486 pKeyName: LPCSTR,
1487 ) -> DWORD;
1488 pub fn DeletePrinterKeyW(
1489 hPrinter: HANDLE,
1490 pKeyName: LPCWSTR,
1491 ) -> DWORD;
1492}
1493pub const PRINTER_NOTIFY_TYPE: DWORD = 0x00;
1494pub const JOB_NOTIFY_TYPE: DWORD = 0x01;
1495pub const SERVER_NOTIFY_TYPE: DWORD = 0x02;
1496pub const PRINTER_NOTIFY_FIELD_SERVER_NAME: DWORD = 0x00;
1497pub const PRINTER_NOTIFY_FIELD_PRINTER_NAME: DWORD = 0x01;
1498pub const PRINTER_NOTIFY_FIELD_SHARE_NAME: DWORD = 0x02;
1499pub const PRINTER_NOTIFY_FIELD_PORT_NAME: DWORD = 0x03;
1500pub const PRINTER_NOTIFY_FIELD_DRIVER_NAME: DWORD = 0x04;
1501pub const PRINTER_NOTIFY_FIELD_COMMENT: DWORD = 0x05;
1502pub const PRINTER_NOTIFY_FIELD_LOCATION: DWORD = 0x06;
1503pub const PRINTER_NOTIFY_FIELD_DEVMODE: DWORD = 0x07;
1504pub const PRINTER_NOTIFY_FIELD_SEPFILE: DWORD = 0x08;
1505pub const PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR: DWORD = 0x09;
1506pub const PRINTER_NOTIFY_FIELD_PARAMETERS: DWORD = 0x0A;
1507pub const PRINTER_NOTIFY_FIELD_DATATYPE: DWORD = 0x0B;
1508pub const PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR: DWORD = 0x0C;
1509pub const PRINTER_NOTIFY_FIELD_ATTRIBUTES: DWORD = 0x0D;
1510pub const PRINTER_NOTIFY_FIELD_PRIORITY: DWORD = 0x0E;
1511pub const PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY: DWORD = 0x0F;
1512pub const PRINTER_NOTIFY_FIELD_START_TIME: DWORD = 0x10;
1513pub const PRINTER_NOTIFY_FIELD_UNTIL_TIME: DWORD = 0x11;
1514pub const PRINTER_NOTIFY_FIELD_STATUS: DWORD = 0x12;
1515pub const PRINTER_NOTIFY_FIELD_STATUS_STRING: DWORD = 0x13;
1516pub const PRINTER_NOTIFY_FIELD_CJOBS: DWORD = 0x14;
1517pub const PRINTER_NOTIFY_FIELD_AVERAGE_PPM: DWORD = 0x15;
1518pub const PRINTER_NOTIFY_FIELD_TOTAL_PAGES: DWORD = 0x16;
1519pub const PRINTER_NOTIFY_FIELD_PAGES_PRINTED: DWORD = 0x17;
1520pub const PRINTER_NOTIFY_FIELD_TOTAL_BYTES: DWORD = 0x18;
1521pub const PRINTER_NOTIFY_FIELD_BYTES_PRINTED: DWORD = 0x19;
1522pub const PRINTER_NOTIFY_FIELD_OBJECT_GUID: DWORD = 0x1A;
1523pub const PRINTER_NOTIFY_FIELD_FRIENDLY_NAME: DWORD = 0x1B;
1524pub const PRINTER_NOTIFY_FIELD_BRANCH_OFFICE_PRINTING: DWORD = 0x1C;
1525pub const JOB_NOTIFY_FIELD_PRINTER_NAME: DWORD = 0x00;
1526pub const JOB_NOTIFY_FIELD_MACHINE_NAME: DWORD = 0x01;
1527pub const JOB_NOTIFY_FIELD_PORT_NAME: DWORD = 0x02;
1528pub const JOB_NOTIFY_FIELD_USER_NAME: DWORD = 0x03;
1529pub const JOB_NOTIFY_FIELD_NOTIFY_NAME: DWORD = 0x04;
1530pub const JOB_NOTIFY_FIELD_DATATYPE: DWORD = 0x05;
1531pub const JOB_NOTIFY_FIELD_PRINT_PROCESSOR: DWORD = 0x06;
1532pub const JOB_NOTIFY_FIELD_PARAMETERS: DWORD = 0x07;
1533pub const JOB_NOTIFY_FIELD_DRIVER_NAME: DWORD = 0x08;
1534pub const JOB_NOTIFY_FIELD_DEVMODE: DWORD = 0x09;
1535pub const JOB_NOTIFY_FIELD_STATUS: DWORD = 0x0A;
1536pub const JOB_NOTIFY_FIELD_STATUS_STRING: DWORD = 0x0B;
1537pub const JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR: DWORD = 0x0C;
1538pub const JOB_NOTIFY_FIELD_DOCUMENT: DWORD = 0x0D;
1539pub const JOB_NOTIFY_FIELD_PRIORITY: DWORD = 0x0E;
1540pub const JOB_NOTIFY_FIELD_POSITION: DWORD = 0x0F;
1541pub const JOB_NOTIFY_FIELD_SUBMITTED: DWORD = 0x10;
1542pub const JOB_NOTIFY_FIELD_START_TIME: DWORD = 0x11;
1543pub const JOB_NOTIFY_FIELD_UNTIL_TIME: DWORD = 0x12;
1544pub const JOB_NOTIFY_FIELD_TIME: DWORD = 0x13;
1545pub const JOB_NOTIFY_FIELD_TOTAL_PAGES: DWORD = 0x14;
1546pub const JOB_NOTIFY_FIELD_PAGES_PRINTED: DWORD = 0x15;
1547pub const JOB_NOTIFY_FIELD_TOTAL_BYTES: DWORD = 0x16;
1548pub const JOB_NOTIFY_FIELD_BYTES_PRINTED: DWORD = 0x17;
1549pub const JOB_NOTIFY_FIELD_REMOTE_JOB_ID: DWORD = 0x18;
1550pub const SERVER_NOTIFY_FIELD_PRINT_DRIVER_ISOLATION_GROUP: DWORD = 0x00;
1551pub const PRINTER_NOTIFY_CATEGORY_ALL: DWORD = 0x001000;
1552pub const PRINTER_NOTIFY_CATEGORY_3D: DWORD = 0x002000;
1553STRUCT!{struct PRINTER_NOTIFY_OPTIONS_TYPE {
1554 Type: WORD,
1555 Reserved0: WORD,
1556 Reserved1: DWORD,
1557 Reserved2: DWORD,
1558 Count: DWORD,
1559 pFields: PWORD,
1560}}
1561pub type PPRINTER_NOTIFY_OPTIONS_TYPE = *mut PRINTER_NOTIFY_OPTIONS_TYPE;
1562pub type LPPRINTER_NOTIFY_OPTIONS_TYPE = *mut PRINTER_NOTIFY_OPTIONS_TYPE;
1563pub const PRINTER_NOTIFY_OPTIONS_REFRESH: DWORD = 0x01;
1564STRUCT!{struct PRINTER_NOTIFY_OPTIONS {
1565 Version: DWORD,
1566 Flags: DWORD,
1567 Count: DWORD,
1568 pTypes: PPRINTER_NOTIFY_OPTIONS_TYPE,
1569}}
1570pub type PPRINTER_NOTIFY_OPTIONS = *mut PRINTER_NOTIFY_OPTIONS;
1571pub type LPPRINTER_NOTIFY_OPTIONS = *mut PRINTER_NOTIFY_OPTIONS;
1572pub const PRINTER_NOTIFY_INFO_DISCARDED: DWORD = 0x01;
1573STRUCT!{struct PRINTER_NOTIFY_INFO_DATA_NotifyData_Data {
1574 cbBuf: DWORD,
1575 pBuf: LPVOID,
1576}}
1577UNION!{union PRINTER_NOTIFY_INFO_DATA_NotifyData {
1578 [usize; 2],
1579 adwData adwData_mut: [DWORD; 2],
1580 Data Data_mut: PRINTER_NOTIFY_INFO_DATA_NotifyData_Data,
1581}}
1582STRUCT!{struct PRINTER_NOTIFY_INFO_DATA {
1583 Type: WORD,
1584 Field: WORD,
1585 Reserved: DWORD,
1586 Id: DWORD,
1587 NotifyData: PRINTER_NOTIFY_INFO_DATA_NotifyData,
1588}}
1589pub type PPRINTER_NOTIFY_INFO_DATA = *mut PRINTER_NOTIFY_INFO_DATA;
1590pub type LPPRINTER_NOTIFY_INFO_DATA = *mut PRINTER_NOTIFY_INFO_DATA;
1591STRUCT!{struct PRINTER_NOTIFY_INFO {
1592 Version: DWORD,
1593 Flags: DWORD,
1594 Count: DWORD,
1595 aData: [PRINTER_NOTIFY_INFO_DATA; 1],
1596}}
1597pub type PPRINTER_NOTIFY_INFO = *mut PRINTER_NOTIFY_INFO;
1598pub type LPPRINTER_NOTIFY_INFO = *mut PRINTER_NOTIFY_INFO;
1599STRUCT!{struct BINARY_CONTAINER {
1600 cbBuf: DWORD,
1601 pData: LPBYTE,
1602}}
1603pub type PBINARY_CONTAINER = *mut BINARY_CONTAINER;
1604UNION!{union BIDI_DATA_u {
1605 [usize; 2],
1606 bData bData_mut: BOOL,
1607 iData iData_mut: LONG,
1608 sData sData_mut: LPWSTR,
1609 fData fData_mut: FLOAT,
1610 biData biData_mut: BINARY_CONTAINER,
1611}}
1612STRUCT!{struct BIDI_DATA {
1613 dwBidiType: DWORD,
1614 u: BIDI_DATA_u,
1615}}
1616pub type PBIDI_DATA = *mut BIDI_DATA;
1617pub type LPBIDI_DATA = *mut BIDI_DATA;
1618STRUCT!{struct BIDI_REQUEST_DATA {
1619 dwReqNumber: DWORD,
1620 pSchema: LPWSTR,
1621 data: BIDI_DATA,
1622}}
1623pub type PBIDI_REQUEST_DATA = *mut BIDI_REQUEST_DATA;
1624pub type LPBIDI_REQUEST_DATA = *mut BIDI_REQUEST_DATA;
1625STRUCT!{struct BIDI_REQUEST_CONTAINER {
1626 Version: DWORD,
1627 Flags: DWORD,
1628 Count: DWORD,
1629 aData: [BIDI_REQUEST_DATA; 1],
1630}}
1631pub type PBIDI_REQUEST_CONTAINER = *mut BIDI_REQUEST_CONTAINER;
1632pub type LPBIDI_REQUEST_CONTAINER = *mut BIDI_REQUEST_CONTAINER;
1633STRUCT!{struct BIDI_RESPONSE_DATA {
1634 dwResult: DWORD,
1635 dwReqNumber: DWORD,
1636 pSchema: LPWSTR,
1637 data: BIDI_DATA,
1638}}
1639pub type PBIDI_RESPONSE_DATA = *mut BIDI_RESPONSE_DATA;
1640pub type LPBIDI_RESPONSE_DATA = *mut BIDI_RESPONSE_DATA;
1641STRUCT!{struct BIDI_RESPONSE_CONTAINER {
1642 Version: DWORD,
1643 Flags: DWORD,
1644 Count: DWORD,
1645 aData: [BIDI_RESPONSE_DATA; 1],
1646}}
1647pub type PBIDI_RESPONSE_CONTAINER = *mut BIDI_RESPONSE_CONTAINER;
1648pub type LPBIDI_RESPONSE_CONTAINER = *mut BIDI_RESPONSE_CONTAINER;
1649pub const BIDI_ACTION_ENUM_SCHEMA: &'static str = "EnumSchema";
1650pub const BIDI_ACTION_GET: &'static str = "Get";
1651pub const BIDI_ACTION_SET: &'static str = "Set";
1652pub const BIDI_ACTION_GET_ALL: &'static str = "GetAll";
1653pub const BIDI_ACTION_GET_WITH_ARGUMENT: &'static str = "GetWithArgument";
1654ENUM!{enum BIDI_TYPE {
1655 BIDI_NULL = 0,
1656 BIDI_INT = 1,
1657 BIDI_FLOAT = 2,
1658 BIDI_BOOL = 3,
1659 BIDI_STRING = 4,
1660 BIDI_TEXT = 5,
1661 BIDI_ENUM = 6,
1662 BIDI_BLOB = 7,
1663}}
1664pub const BIDI_ACCESS_ADMINISTRATOR: DWORD = 0x1;
1665pub const BIDI_ACCESS_USER: DWORD = 0x2;
1666pub const ERROR_BIDI_STATUS_OK: DWORD = 0;
1667pub const ERROR_BIDI_NOT_SUPPORTED: DWORD = ERROR_NOT_SUPPORTED;
1668pub const ERROR_BIDI_ERROR_BASE: DWORD = 13000;
1669pub const ERROR_BIDI_STATUS_WARNING: DWORD = ERROR_BIDI_ERROR_BASE + 1;
1670pub const ERROR_BIDI_SCHEMA_READ_ONLY: DWORD = ERROR_BIDI_ERROR_BASE + 2;
1671pub const ERROR_BIDI_SERVER_OFFLINE: DWORD = ERROR_BIDI_ERROR_BASE + 3;
1672pub const ERROR_BIDI_DEVICE_OFFLINE: DWORD = ERROR_BIDI_ERROR_BASE + 4;
1673pub const ERROR_BIDI_SCHEMA_NOT_SUPPORTED: DWORD = ERROR_BIDI_ERROR_BASE + 5;
1674pub const ERROR_BIDI_SET_DIFFERENT_TYPE: DWORD = ERROR_BIDI_ERROR_BASE + 6;
1675pub const ERROR_BIDI_SET_MULTIPLE_SCHEMAPATH: DWORD = ERROR_BIDI_ERROR_BASE + 7;
1676pub const ERROR_BIDI_SET_INVALID_SCHEMAPATH: DWORD = ERROR_BIDI_ERROR_BASE + 8;
1677pub const ERROR_BIDI_SET_UNKNOWN_FAILURE: DWORD = ERROR_BIDI_ERROR_BASE + 9;
1678pub const ERROR_BIDI_SCHEMA_WRITE_ONLY: DWORD = ERROR_BIDI_ERROR_BASE + 10;
1679pub const ERROR_BIDI_GET_REQUIRES_ARGUMENT: DWORD = ERROR_BIDI_ERROR_BASE + 11;
1680pub const ERROR_BIDI_GET_ARGUMENT_NOT_SUPPORTED: DWORD = ERROR_BIDI_ERROR_BASE + 12;
1681pub const ERROR_BIDI_GET_MISSING_ARGUMENT: DWORD = ERROR_BIDI_ERROR_BASE + 13;
1682pub const ERROR_BIDI_DEVICE_CONFIG_UNCHANGED: DWORD = ERROR_BIDI_ERROR_BASE + 14;
1683pub const ERROR_BIDI_NO_LOCALIZED_RESOURCES: DWORD = ERROR_BIDI_ERROR_BASE + 15;
1684pub const ERROR_BIDI_NO_BIDI_SCHEMA_EXTENSIONS: DWORD = ERROR_BIDI_ERROR_BASE + 16;
1685pub const ERROR_BIDI_UNSUPPORTED_CLIENT_LANGUAGE: DWORD = ERROR_BIDI_ERROR_BASE + 17;
1686pub const ERROR_BIDI_UNSUPPORTED_RESOURCE_FORMAT: DWORD = ERROR_BIDI_ERROR_BASE + 18;
1687extern "system" {
1688 pub fn WaitForPrinterChange(
1689 hPrinter: HANDLE,
1690 Flags: DWORD,
1691 ) -> DWORD;
1692 pub fn FindFirstPrinterChangeNotification(
1693 hPrinter: HANDLE,
1694 fdwFilter: DWORD,
1695 fdwOptions: DWORD,
1696 pPrinterNotifyOptions: LPVOID,
1697 ) -> HANDLE;
1698 pub fn FindNextPrinterChangeNotification(
1699 hChange: HANDLE,
1700 pdwChange: PDWORD,
1701 pPrinterNotifyOptions: LPVOID,
1702 ppPrinterNotifyInfo: *mut LPVOID,
1703 ) -> BOOL;
1704 pub fn FreePrinterNotifyInfo(
1705 pPrinterNotifyInfo: PPRINTER_NOTIFY_INFO,
1706 ) -> BOOL;
1707 pub fn FindClosePrinterChangeNotification(
1708 hChange: HANDLE,
1709 ) -> BOOL;
1710}
1711pub const PRINTER_CHANGE_ADD_PRINTER: DWORD = 0x00000001;
1712pub const PRINTER_CHANGE_SET_PRINTER: DWORD = 0x00000002;
1713pub const PRINTER_CHANGE_DELETE_PRINTER: DWORD = 0x00000004;
1714pub const PRINTER_CHANGE_FAILED_CONNECTION_PRINTER: DWORD = 0x00000008;
1715pub const PRINTER_CHANGE_PRINTER: DWORD = 0x000000FF;
1716pub const PRINTER_CHANGE_ADD_JOB: DWORD = 0x00000100;
1717pub const PRINTER_CHANGE_SET_JOB: DWORD = 0x00000200;
1718pub const PRINTER_CHANGE_DELETE_JOB: DWORD = 0x00000400;
1719pub const PRINTER_CHANGE_WRITE_JOB: DWORD = 0x00000800;
1720pub const PRINTER_CHANGE_JOB: DWORD = 0x0000FF00;
1721pub const PRINTER_CHANGE_ADD_FORM: DWORD = 0x00010000;
1722pub const PRINTER_CHANGE_SET_FORM: DWORD = 0x00020000;
1723pub const PRINTER_CHANGE_DELETE_FORM: DWORD = 0x00040000;
1724pub const PRINTER_CHANGE_FORM: DWORD = 0x00070000;
1725pub const PRINTER_CHANGE_ADD_PORT: DWORD = 0x00100000;
1726pub const PRINTER_CHANGE_CONFIGURE_PORT: DWORD = 0x00200000;
1727pub const PRINTER_CHANGE_DELETE_PORT: DWORD = 0x00400000;
1728pub const PRINTER_CHANGE_PORT: DWORD = 0x00700000;
1729pub const PRINTER_CHANGE_ADD_PRINT_PROCESSOR: DWORD = 0x01000000;
1730pub const PRINTER_CHANGE_DELETE_PRINT_PROCESSOR: DWORD = 0x04000000;
1731pub const PRINTER_CHANGE_PRINT_PROCESSOR: DWORD = 0x07000000;
1732pub const PRINTER_CHANGE_SERVER: DWORD = 0x08000000;
1733pub const PRINTER_CHANGE_ADD_PRINTER_DRIVER: DWORD = 0x10000000;
1734pub const PRINTER_CHANGE_SET_PRINTER_DRIVER: DWORD = 0x20000000;
1735pub const PRINTER_CHANGE_DELETE_PRINTER_DRIVER: DWORD = 0x40000000;
1736pub const PRINTER_CHANGE_PRINTER_DRIVER: DWORD = 0x70000000;
1737pub const PRINTER_CHANGE_TIMEOUT: DWORD = 0x80000000;
1738pub const PRINTER_CHANGE_ALL: DWORD = 0x7F77FFFF;
1739extern "system" {
1740 pub fn PrinterMessageBoxA(
1741 hPrinter: HANDLE,
1742 Error: DWORD,
1743 hWnd: HWND,
1744 pText: LPSTR,
1745 pCaption: LPSTR,
1746 dwType: DWORD,
1747 ) -> DWORD;
1748 pub fn PrinterMessageBoxW(
1749 hPrinter: HANDLE,
1750 Error: DWORD,
1751 hWnd: HWND,
1752 pText: LPWSTR,
1753 pCaption: LPWSTR,
1754 dwType: DWORD,
1755 ) -> DWORD;
1756}
1757pub const PRINTER_ERROR_INFORMATION: DWORD = 0x80000000;
1758pub const PRINTER_ERROR_WARNING: DWORD = 0x40000000;
1759pub const PRINTER_ERROR_SEVERE: DWORD = 0x20000000;
1760pub const PRINTER_ERROR_OUTOFPAPER: DWORD = 0x00000001;
1761pub const PRINTER_ERROR_JAM: DWORD = 0x00000002;
1762pub const PRINTER_ERROR_OUTOFTONER: DWORD = 0x00000004;
1763extern "system" {
1764 pub fn ClosePrinter(
1765 hPrinter: HANDLE,
1766 ) -> BOOL;
1767 pub fn AddFormA(
1768 hPrinter: HANDLE,
1769 Level: DWORD,
1770 pForm: LPBYTE,
1771 ) -> BOOL;
1772 pub fn AddFormW(
1773 hPrinter: HANDLE,
1774 Level: DWORD,
1775 pForm: LPBYTE,
1776 ) -> BOOL;
1777 pub fn DeleteFormA(
1778 hPrinter: HANDLE,
1779 pFormName: LPSTR,
1780 ) -> BOOL;
1781 pub fn DeleteFormW(
1782 hPrinter: HANDLE,
1783 pFormName: LPWSTR,
1784 ) -> BOOL;
1785 pub fn GetFormA(
1786 hPrinter: HANDLE,
1787 pFormName: LPSTR,
1788 Level: DWORD,
1789 pForm: LPBYTE,
1790 cbBuf: DWORD,
1791 pcbNeeded: LPDWORD,
1792 ) -> BOOL;
1793 pub fn GetFormW(
1794 hPrinter: HANDLE,
1795 pFormName: LPWSTR,
1796 Level: DWORD,
1797 pForm: LPBYTE,
1798 cbBuf: DWORD,
1799 pcbNeeded: LPDWORD,
1800 ) -> BOOL;
1801 pub fn SetFormA(
1802 hPrinter: HANDLE,
1803 pFormName: LPSTR,
1804 Level: DWORD,
1805 pForm: LPBYTE,
1806 ) -> BOOL;
1807 pub fn SetFormW(
1808 hPrinter: HANDLE,
1809 pFormName: LPWSTR,
1810 Level: DWORD,
1811 pForm: LPBYTE,
1812 ) -> BOOL;
1813 pub fn EnumFormsA(
1814 hPrinter: HANDLE,
1815 Level: DWORD,
1816 pForm: LPBYTE,
1817 cbBuf: DWORD,
1818 pcbNeeded: LPDWORD,
1819 pcReturned: LPDWORD,
1820 ) -> BOOL;
1821 pub fn EnumFormsW(
1822 hPrinter: HANDLE,
1823 Level: DWORD,
1824 pForm: LPBYTE,
1825 cbBuf: DWORD,
1826 pcbNeeded: LPDWORD,
1827 pcReturned: LPDWORD,
1828 ) -> BOOL;
1829 pub fn EnumMonitorsA(
1830 pName: LPSTR,
1831 Level: DWORD,
1832 pMonitor: LPBYTE,
1833 cbBuf: DWORD,
1834 pcbNeeded: LPDWORD,
1835 pcReturned: LPDWORD,
1836 ) -> BOOL;
1837 pub fn EnumMonitorsW(
1838 pName: LPWSTR,
1839 Level: DWORD,
1840 pMonitor: LPBYTE,
1841 cbBuf: DWORD,
1842 pcbNeeded: LPDWORD,
1843 pcReturned: LPDWORD,
1844 ) -> BOOL;
1845 pub fn AddMonitorA(
1846 pName: LPSTR,
1847 Level: DWORD,
1848 pMonitors: LPBYTE,
1849 ) -> BOOL;
1850 pub fn AddMonitorW(
1851 pName: LPWSTR,
1852 Level: DWORD,
1853 pMonitors: LPBYTE,
1854 ) -> BOOL;
1855 pub fn DeleteMonitorA(
1856 pName: LPSTR,
1857 pEnvironment: LPSTR,
1858 pMonitorName: LPSTR,
1859 ) -> BOOL;
1860 pub fn DeleteMonitorW(
1861 pName: LPWSTR,
1862 pEnvironment: LPWSTR,
1863 pMonitorName: LPWSTR,
1864 ) -> BOOL;
1865 pub fn EnumPortsA(
1866 pName: LPSTR,
1867 Level: DWORD,
1868 pPort: LPBYTE,
1869 cbBuf: DWORD,
1870 pcbNeeded: LPDWORD,
1871 pcReturned: LPDWORD,
1872 ) -> BOOL;
1873 pub fn EnumPortsW(
1874 pName: LPWSTR,
1875 Level: DWORD,
1876 pPort: LPBYTE,
1877 cbBuf: DWORD,
1878 pcbNeeded: LPDWORD,
1879 pcReturned: LPDWORD,
1880 ) -> BOOL;
1881 pub fn AddPortA(
1882 pName: LPSTR,
1883 hWnd: HWND,
1884 pMonitorName: LPSTR,
1885 ) -> BOOL;
1886 pub fn AddPortW(
1887 pName: LPWSTR,
1888 hWnd: HWND,
1889 pMonitorName: LPWSTR,
1890 ) -> BOOL;
1891 pub fn ConfigurePortA(
1892 pName: LPSTR,
1893 hWnd: HWND,
1894 pPortName: LPSTR,
1895 ) -> BOOL;
1896 pub fn ConfigurePortW(
1897 pName: LPWSTR,
1898 hWnd: HWND,
1899 pPortName: LPWSTR,
1900 ) -> BOOL;
1901 pub fn DeletePortA(
1902 pName: LPSTR,
1903 hWnd: HWND,
1904 pPortName: LPSTR,
1905 ) -> BOOL;
1906 pub fn DeletePortW(
1907 pName: LPWSTR,
1908 hWnd: HWND,
1909 pPortName: LPWSTR,
1910 ) -> BOOL;
1911 pub fn XcvDataW(
1912 hXcv: HANDLE,
1913 pszDataName: PCWSTR,
1914 pInputData: PBYTE,
1915 cbInputData: DWORD,
1916 pOutputData: PBYTE,
1917 cbOutputData: DWORD,
1918 pcbOutputNeeded: PDWORD,
1919 pdwStatus: PDWORD,
1920 ) -> BOOL;
1921 pub fn GetDefaultPrinterA(
1922 pszBuffer: LPSTR,
1923 pcchBuffer: LPDWORD,
1924 ) -> BOOL;
1925 pub fn GetDefaultPrinterW(
1926 pszBuffer: LPWSTR,
1927 pcchBuffer: LPDWORD,
1928 ) -> BOOL;
1929 pub fn SetDefaultPrinterA(
1930 pszPrinter: LPCSTR,
1931 ) -> BOOL;
1932 pub fn SetDefaultPrinterW(
1933 pszPrinter: LPCWSTR,
1934 ) -> BOOL;
1935 pub fn SetPortA(
1936 pName: LPSTR,
1937 pPortName: LPSTR,
1938 dwLevel: DWORD,
1939 pPortInfo: LPBYTE,
1940 ) -> BOOL;
1941 pub fn SetPortW(pName: LPWSTR,
1942 pPortName: LPWSTR,
1943 dwLevel: DWORD,
1944 pPortInfo: LPBYTE,
1945 ) -> BOOL;
1946 pub fn AddPrinterConnectionA(
1947 pName: LPSTR,
1948 ) -> BOOL;
1949 pub fn AddPrinterConnectionW(
1950 pName: LPWSTR,
1951 ) -> BOOL;
1952 pub fn DeletePrinterConnectionA(
1953 pName: LPSTR,
1954 ) -> BOOL;
1955 pub fn DeletePrinterConnectionW(
1956 pName: LPWSTR,
1957 ) -> BOOL;
1958 pub fn ConnectToPrinterDlg(
1959 hwnd: HWND,
1960 Flags: DWORD,
1961 ) -> HANDLE;
1962}
1963STRUCT!{struct PROVIDOR_INFO_1A {
1964 pName: LPSTR,
1965 pEnvironment: LPSTR,
1966 pDLLName: LPSTR,
1967}}
1968pub type PPROVIDOR_INFO_1A = *mut PROVIDOR_INFO_1A;
1969pub type LPPROVIDOR_INFO_1A = *mut PROVIDOR_INFO_1A;
1970STRUCT!{struct PROVIDOR_INFO_1W {
1971 pName: LPWSTR,
1972 pEnvironment: LPWSTR,
1973 pDLLName: LPWSTR,
1974}}
1975pub type PPROVIDOR_INFO_1W = *mut PROVIDOR_INFO_1W;
1976pub type LPPROVIDOR_INFO_1W = *mut PROVIDOR_INFO_1W;
1977STRUCT!{struct PROVIDOR_INFO_2A {
1978 pOrder: LPSTR,
1979}}
1980pub type PPROVIDOR_INFO_2A = *mut PROVIDOR_INFO_2A;
1981pub type LPPROVIDOR_INFO_2A = *mut PROVIDOR_INFO_2A;
1982STRUCT!{struct PROVIDOR_INFO_2W {
1983 pOrder: LPWSTR,
1984}}
1985pub type PPROVIDOR_INFO_2W = *mut PROVIDOR_INFO_2W;
1986pub type LPPROVIDOR_INFO_2W = *mut PROVIDOR_INFO_2W;
1987extern "system" {
1988 pub fn AddPrintProvidorA(
1989 pName: LPSTR,
1990 Level: DWORD,
1991 pProvidorInfo: LPBYTE,
1992 ) -> BOOL;
1993 pub fn AddPrintProvidorW(
1994 pName: LPWSTR,
1995 Level: DWORD,
1996 pProvidorInfo: LPBYTE,
1997 ) -> BOOL;
1998 pub fn DeletePrintProvidorA(
1999 pName: LPSTR,
2000 pEnvironment: LPSTR,
2001 pPrintProvidorName: LPSTR,
2002 ) -> BOOL;
2003 pub fn DeletePrintProvidorW(
2004 pName: LPWSTR,
2005 pEnvironment: LPWSTR,
2006 pPrintProvidorName: LPWSTR,
2007 ) -> BOOL;
2008 pub fn IsValidDevmodeA(
2009 pDevmode: PDEVMODEA,
2010 DevmodeSize: size_t,
2011 ) -> BOOL;
2012 pub fn IsValidDevmodeW(
2013 pDevmode: PDEVMODEW,
2014 DevmodeSize: size_t,
2015 ) -> BOOL;
2016}
2017pub const SPLREG_DEFAULT_SPOOL_DIRECTORY: &'static str = "DefaultSpoolDirectory";
2018pub const SPLREG_PORT_THREAD_PRIORITY_DEFAULT: &'static str = "PortThreadPriorityDefault";
2019pub const SPLREG_PORT_THREAD_PRIORITY: &'static str = "PortThreadPriority";
2020pub const SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT: &'static str
2021 = "SchedulerThreadPriorityDefault";
2022pub const SPLREG_SCHEDULER_THREAD_PRIORITY: &'static str = "SchedulerThreadPriority";
2023pub const SPLREG_BEEP_ENABLED: &'static str = "BeepEnabled";
2024pub const SPLREG_NET_POPUP: &'static str = "NetPopup";
2025pub const SPLREG_RETRY_POPUP: &'static str = "RetryPopup";
2026pub const SPLREG_NET_POPUP_TO_COMPUTER: &'static str = "NetPopupToComputer";
2027pub const SPLREG_EVENT_LOG: &'static str = "EventLog";
2028pub const SPLREG_MAJOR_VERSION: &'static str = "MajorVersion";
2029pub const SPLREG_MINOR_VERSION: &'static str = "MinorVersion";
2030pub const SPLREG_ARCHITECTURE: &'static str = "Architecture";
2031pub const SPLREG_OS_VERSION: &'static str = "OSVersion";
2032pub const SPLREG_OS_VERSIONEX: &'static str = "OSVersionEx";
2033pub const SPLREG_DS_PRESENT: &'static str = "DsPresent";
2034pub const SPLREG_DS_PRESENT_FOR_USER: &'static str = "DsPresentForUser";
2035pub const SPLREG_REMOTE_FAX: &'static str = "RemoteFax";
2036pub const SPLREG_RESTART_JOB_ON_POOL_ERROR: &'static str = "RestartJobOnPoolError";
2037pub const SPLREG_RESTART_JOB_ON_POOL_ENABLED: &'static str = "RestartJobOnPoolEnabled";
2038pub const SPLREG_DNS_MACHINE_NAME: &'static str = "DNSMachineName";
2039pub const SPLREG_ALLOW_USER_MANAGEFORMS: &'static str = "AllowUserManageForms";
2040pub const SPLREG_WEBSHAREMGMT: &'static str = "WebShareMgmt";
2041pub const SPLREG_PRINT_DRIVER_ISOLATION_GROUPS_SEPARATOR: &'static str = "\\";
2042pub const SPLREG_PRINT_DRIVER_ISOLATION_GROUPS: &'static str = "PrintDriverIsolationGroups";
2043pub const SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE: &'static str
2044 = "PrintDriverIsolationTimeBeforeRecycle";
2045pub const SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE: &'static str
2046 = "PrintDriverIsolationMaxobjsBeforeRecycle";
2047pub const SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT: &'static str
2048 = "PrintDriverIsolationIdleTimeout";
2049pub const SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY: &'static str
2050 = "PrintDriverIsolationExecutionPolicy";
2051pub const SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY: &'static str
2052 = "PrintDriverIsolationOverrideCompat";
2053pub const SPLREG_PRINT_QUEUE_V4_DRIVER_DIRECTORY: &'static str = "PrintQueueV4DriverDirectory";
2054pub const SERVER_ACCESS_ADMINISTER: DWORD = 0x00000001;
2055pub const SERVER_ACCESS_ENUMERATE: DWORD = 0x00000002;
2056pub const PRINTER_ACCESS_ADMINISTER: DWORD = 0x00000004;
2057pub const PRINTER_ACCESS_USE: DWORD = 0x00000008;
2058pub const JOB_ACCESS_ADMINISTER: DWORD = 0x00000010;
2059pub const JOB_ACCESS_READ: DWORD = 0x00000020;
2060pub const PRINTER_ACCESS_MANAGE_LIMITED: DWORD = 0x00000040;
2061pub const SERVER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SERVER_ACCESS_ADMINISTER
2062 | SERVER_ACCESS_ENUMERATE;
2063pub const SERVER_READ: DWORD = STANDARD_RIGHTS_READ | SERVER_ACCESS_ENUMERATE;
2064pub const SERVER_WRITE: DWORD = STANDARD_RIGHTS_WRITE | SERVER_ACCESS_ADMINISTER
2065 | SERVER_ACCESS_ENUMERATE;
2066pub const SERVER_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | SERVER_ACCESS_ENUMERATE;
2067pub const PRINTER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | PRINTER_ACCESS_ADMINISTER
2068 | PRINTER_ACCESS_USE;
2069pub const PRINTER_READ: DWORD = STANDARD_RIGHTS_READ | PRINTER_ACCESS_USE;
2070pub const PRINTER_WRITE: DWORD = STANDARD_RIGHTS_WRITE | PRINTER_ACCESS_USE;
2071pub const PRINTER_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | PRINTER_ACCESS_USE;
2072pub const JOB_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | JOB_ACCESS_ADMINISTER
2073 | JOB_ACCESS_READ;
2074pub const JOB_READ: DWORD = STANDARD_RIGHTS_READ | JOB_ACCESS_READ;
2075pub const JOB_WRITE: DWORD = STANDARD_RIGHTS_WRITE | JOB_ACCESS_ADMINISTER;
2076pub const JOB_EXECUTE: DWORD = STANDARD_RIGHTS_EXECUTE | JOB_ACCESS_ADMINISTER;
2077pub const SPLDS_SPOOLER_KEY: &'static str = "DsSpooler";
2078pub const SPLDS_DRIVER_KEY: &'static str = "DsDriver";
2079pub const SPLDS_USER_KEY: &'static str = "DsUser";
2080pub const SPLDS_ASSET_NUMBER: &'static str = "assetNumber";
2081pub const SPLDS_BYTES_PER_MINUTE: &'static str = "bytesPerMinute";
2082pub const SPLDS_DESCRIPTION: &'static str = "description";
2083pub const SPLDS_DRIVER_NAME: &'static str = "driverName";
2084pub const SPLDS_DRIVER_VERSION: &'static str = "driverVersion";
2085pub const SPLDS_LOCATION: &'static str = "location";
2086pub const SPLDS_PORT_NAME: &'static str = "portName";
2087pub const SPLDS_PRINT_ATTRIBUTES: &'static str = "printAttributes";
2088pub const SPLDS_PRINT_BIN_NAMES: &'static str = "printBinNames";
2089pub const SPLDS_PRINT_COLLATE: &'static str = "printCollate";
2090pub const SPLDS_PRINT_COLOR: &'static str = "printColor";
2091pub const SPLDS_PRINT_DUPLEX_SUPPORTED: &'static str = "printDuplexSupported";
2092pub const SPLDS_PRINT_END_TIME: &'static str = "printEndTime";
2093pub const SPLDS_PRINTER_CLASS: &'static str = "printQueue";
2094pub const SPLDS_PRINTER_NAME: &'static str = "printerName";
2095pub const SPLDS_PRINT_KEEP_PRINTED_JOBS: &'static str = "printKeepPrintedJobs";
2096pub const SPLDS_PRINT_LANGUAGE: &'static str = "printLanguage";
2097pub const SPLDS_PRINT_MAC_ADDRESS: &'static str = "printMACAddress";
2098pub const SPLDS_PRINT_MAX_X_EXTENT: &'static str = "printMaxXExtent";
2099pub const SPLDS_PRINT_MAX_Y_EXTENT: &'static str = "printMaxYExtent";
2100pub const SPLDS_PRINT_MAX_RESOLUTION_SUPPORTED: &'static str = "printMaxResolutionSupported";
2101pub const SPLDS_PRINT_MEDIA_READY: &'static str = "printMediaReady";
2102pub const SPLDS_PRINT_MEDIA_SUPPORTED: &'static str = "printMediaSupported";
2103pub const SPLDS_PRINT_MEMORY: &'static str = "printMemory";
2104pub const SPLDS_PRINT_MIN_X_EXTENT: &'static str = "printMinXExtent";
2105pub const SPLDS_PRINT_MIN_Y_EXTENT: &'static str = "printMinYExtent";
2106pub const SPLDS_PRINT_NETWORK_ADDRESS: &'static str = "printNetworkAddress";
2107pub const SPLDS_PRINT_NOTIFY: &'static str = "printNotify";
2108pub const SPLDS_PRINT_NUMBER_UP: &'static str = "printNumberUp";
2109pub const SPLDS_PRINT_ORIENTATIONS_SUPPORTED: &'static str = "printOrientationsSupported";
2110pub const SPLDS_PRINT_OWNER: &'static str = "printOwner";
2111pub const SPLDS_PRINT_PAGES_PER_MINUTE: &'static str = "printPagesPerMinute";
2112pub const SPLDS_PRINT_RATE: &'static str = "printRate";
2113pub const SPLDS_PRINT_RATE_UNIT: &'static str = "printRateUnit";
2114pub const SPLDS_PRINT_SEPARATOR_FILE: &'static str = "printSeparatorFile";
2115pub const SPLDS_PRINT_SHARE_NAME: &'static str = "printShareName";
2116pub const SPLDS_PRINT_SPOOLING: &'static str = "printSpooling";
2117pub const SPLDS_PRINT_STAPLING_SUPPORTED: &'static str = "printStaplingSupported";
2118pub const SPLDS_PRINT_START_TIME: &'static str = "printStartTime";
2119pub const SPLDS_PRINT_STATUS: &'static str = "printStatus";
2120pub const SPLDS_PRIORITY: &'static str = "priority";
2121pub const SPLDS_SERVER_NAME: &'static str = "serverName";
2122pub const SPLDS_SHORT_SERVER_NAME: &'static str = "shortServerName";
2123pub const SPLDS_UNC_NAME: &'static str = "uNCName";
2124pub const SPLDS_URL: &'static str = "url";
2125pub const SPLDS_FLAGS: &'static str = "flags";
2126pub const SPLDS_VERSION_NUMBER: &'static str = "versionNumber";
2127pub const SPLDS_PRINTER_NAME_ALIASES: &'static str = "printerNameAliases";
2128pub const SPLDS_PRINTER_LOCATIONS: &'static str = "printerLocations";
2129pub const SPLDS_PRINTER_MODEL: &'static str = "printerModel";
2130ENUM!{enum PRINTER_OPTION_FLAGS {
2131 PRINTER_OPTION_NO_CACHE = 1 << 0,
2132 PRINTER_OPTION_CACHE = 1 << 1,
2133 PRINTER_OPTION_CLIENT_CHANGE = 1 << 2,
2134 PRINTER_OPTION_NO_CLIENT_DATA = 1 << 3,
2135}}
2136STRUCT!{struct PRINTER_OPTIONSA {
2137 cbSize: UINT,
2138 dwFlags: DWORD,
2139}}
2140pub type PPRINTER_OPTIONSA = *mut PRINTER_OPTIONSA;
2141pub type LPPRINTER_OPTIONSA = *mut PRINTER_OPTIONSA;
2142STRUCT!{struct PRINTER_OPTIONSW {
2143 cbSize: UINT,
2144 dwFlags: DWORD,
2145}}
2146pub type PPRINTER_OPTIONSW = *mut PRINTER_OPTIONSW;
2147pub type LPPRINTER_OPTIONSW = *mut PRINTER_OPTIONSW;
2148extern "system" {
2149 pub fn OpenPrinter2A(
2150 pPrinterName: LPCSTR,
2151 phPrinter: LPHANDLE,
2152 pDefault: PPRINTER_DEFAULTSA,
2153 pOptions: PPRINTER_OPTIONSA,
2154 ) -> BOOL;
2155 pub fn OpenPrinter2W(
2156 pPrinterName: LPCWSTR,
2157 phPrinter: LPHANDLE,
2158 pDefault: PPRINTER_DEFAULTSW,
2159 pOptions: PPRINTER_OPTIONSW,
2160 ) -> BOOL;
2161}
2162pub const PRINTER_CONNECTION_MISMATCH: DWORD = 0x00000020;
2163pub const PRINTER_CONNECTION_NO_UI: DWORD = 0x00000040;
2164STRUCT!{struct PRINTER_CONNECTION_INFO_1A {
2165 dwFlags: DWORD,
2166 pszDriverName: LPSTR,
2167}}
2168pub type PPRINTER_CONNECTION_INFO_1A = *mut PRINTER_CONNECTION_INFO_1A;
2169pub type LPPRINTER_CONNECTION_INFO_1A = *mut PRINTER_CONNECTION_INFO_1A;
2170STRUCT!{struct PRINTER_CONNECTION_INFO_1W {
2171 dwFlags: DWORD,
2172 pszDriverName: LPWSTR,
2173}}
2174pub type PPRINTER_CONNECTION_INFO_1W = *mut PRINTER_CONNECTION_INFO_1W;
2175pub type LPPRINTER_CONNECTION_INFO_1W = *mut PRINTER_CONNECTION_INFO_1W;
2176extern "system" {
2177 pub fn AddPrinterConnection2A(
2178 hWnd: HWND,
2179 pszName: LPCSTR,
2180 dwLevel: DWORD,
2181 pConnectionInfo: PVOID,
2182 ) -> BOOL;
2183 pub fn AddPrinterConnection2W(
2184 hWnd: HWND,
2185 pszName: LPCWSTR,
2186 dwLevel: DWORD,
2187 pConnectionInfo: PVOID,
2188 ) -> BOOL;
2189}
2190pub const IPDFP_COPY_ALL_FILES: DWORD = 0x00000001;
2191extern "system" {
2192 pub fn InstallPrinterDriverFromPackageA(
2193 pszServer: LPCSTR,
2194 pszInfPath: LPCSTR,
2195 pszDriverName: LPCSTR,
2196 pszEnvironment: LPCSTR,
2197 dwFlags: DWORD,
2198 ) -> HRESULT;
2199 pub fn InstallPrinterDriverFromPackageW(
2200 pszServer: LPCWSTR,
2201 pszInfPath: LPCWSTR,
2202 pszDriverName: LPCWSTR,
2203 pszEnvironment: LPCWSTR,
2204 dwFlags: DWORD,
2205 ) -> HRESULT;
2206}
2207pub const UPDP_SILENT_UPLOAD: DWORD = 0x00000001;
2208pub const UPDP_UPLOAD_ALWAYS: DWORD = 0x00000002;
2209pub const UPDP_CHECK_DRIVERSTORE: DWORD = 0x00000004;
2210extern "system" {
2211 pub fn UploadPrinterDriverPackageA(
2212 pszServer: LPCSTR,
2213 pszInfPath: LPCSTR,
2214 pszEnvironment: LPCSTR,
2215 dwFlags: DWORD,
2216 hwnd: HWND,
2217 pszDestInfPath: LPSTR,
2218 pcchDestInfPath: PULONG,
2219 ) -> HRESULT;
2220 pub fn UploadPrinterDriverPackageW(
2221 pszServer: LPCWSTR,
2222 pszInfPath: LPCWSTR,
2223 pszEnvironment: LPCWSTR,
2224 dwFlags: DWORD,
2225 hwnd: HWND,
2226 pszDestInfPath: LPWSTR,
2227 pcchDestInfPath: PULONG,
2228 ) -> HRESULT;
2229}
2230STRUCT!{struct CORE_PRINTER_DRIVERA {
2231 CoreDriverGUID: GUID,
2232 ftDriverDate: FILETIME,
2233 dwlDriverVersion: DWORDLONG,
2234 szPackageID: [CHAR; MAX_PATH],
2235}}
2236pub type PCORE_PRINTER_DRIVERA = *mut CORE_PRINTER_DRIVERA;
2237STRUCT!{struct CORE_PRINTER_DRIVERW {
2238 CoreDriverGUID: GUID,
2239 ftDriverDate: FILETIME,
2240 dwlDriverVersion: DWORDLONG,
2241 szPackageID: [WCHAR; MAX_PATH],
2242}}
2243pub type PCORE_PRINTER_DRIVERW = *mut CORE_PRINTER_DRIVERW;
2244extern "system" {
2245 pub fn GetCorePrinterDriversA(
2246 pszServer: LPCSTR,
2247 pszEnvironment: LPCSTR,
2248 pszzCoreDriverDependencies: LPCSTR,
2249 cCorePrinterDrivers: DWORD,
2250 pCorePrinterDrivers: PCORE_PRINTER_DRIVERA,
2251 ) -> HRESULT;
2252 pub fn GetCorePrinterDriversW(
2253 pszServer: LPCWSTR,
2254 pszEnvironment: LPCWSTR,
2255 pszzCoreDriverDependencies: LPCWSTR,
2256 cCorePrinterDrivers: DWORD,
2257 pCorePrinterDrivers: PCORE_PRINTER_DRIVERW,
2258 ) -> HRESULT;
2259 pub fn CorePrinterDriverInstalledA(
2260 pszServer: LPCSTR,
2261 pszEnvironment: LPCSTR,
2262 CoreDriverGUID: GUID,
2263 ftDriverDate: FILETIME,
2264 dwlDriverVersion: DWORDLONG,
2265 pbDriverInstalled: *mut BOOL,
2266 ) -> HRESULT;
2267 pub fn CorePrinterDriverInstalledW(
2268 pszServer: LPCWSTR,
2269 pszEnvironment: LPCWSTR,
2270 CoreDriverGUID: GUID,
2271 ftDriverDate: FILETIME,
2272 dwlDriverVersion: DWORDLONG,
2273 pbDriverInstalled: *mut BOOL,
2274 ) -> HRESULT;
2275 pub fn GetPrinterDriverPackagePathA(
2276 pszServer: LPCSTR,
2277 pszEnvironment: LPCSTR,
2278 pszLanguage: LPCSTR,
2279 pszPackageID: LPCSTR,
2280 pszDriverPackageCab: LPSTR,
2281 cchDriverPackageCab: DWORD,
2282 pcchRequiredSize: LPDWORD,
2283 ) -> HRESULT;
2284 pub fn GetPrinterDriverPackagePathW(
2285 pszServer: LPCWSTR,
2286 pszEnvironment: LPCWSTR,
2287 pszLanguage: LPCWSTR,
2288 pszPackageID: LPCWSTR,
2289 pszDriverPackageCab: LPWSTR,
2290 cchDriverPackageCab: DWORD,
2291 pcchRequiredSize: LPDWORD,
2292 ) -> HRESULT;
2293 pub fn DeletePrinterDriverPackageA(
2294 pszServer: LPCSTR,
2295 pszInfPath: LPCSTR,
2296 pszEnvironment: LPCSTR,
2297 ) -> HRESULT;
2298 pub fn DeletePrinterDriverPackageW(
2299 pszServer: LPCWSTR,
2300 pszInfPath: LPCWSTR,
2301 pszEnvironment: LPCWSTR,
2302 ) -> HRESULT;
2303}
2304ENUM!{enum EPrintPropertyType {
2305 kPropertyTypeString = 1,
2306 kPropertyTypeInt32,
2307 kPropertyTypeInt64,
2308 kPropertyTypeByte,
2309 kPropertyTypeTime,
2310 kPropertyTypeDevMode,
2311 kPropertyTypeSD,
2312 kPropertyTypeNotificationReply,
2313 kPropertyTypeNotificationOptions,
2314 kPropertyTypeBuffer,
2315}}
2316ENUM!{enum EPrintXPSJobProgress {
2317 kAddingDocumentSequence = 0,
2318 kDocumentSequenceAdded = 1,
2319 kAddingFixedDocument = 2,
2320 kFixedDocumentAdded = 3,
2321 kAddingFixedPage = 4,
2322 kFixedPageAdded = 5,
2323 kResourceAdded = 6,
2324 kFontAdded = 7,
2325 kImageAdded = 8,
2326 kXpsDocumentCommitted = 9,
2327}}
2328ENUM!{enum EPrintXPSJobOperation {
2329 kJobProduction = 1,
2330 kJobConsumption,
2331}}
2332STRUCT!{struct PrintPropertyValue_value_propertyBlob {
2333 cbBuf: DWORD,
2334 pBuf: LPVOID,
2335}}
2336UNION!{union PrintPropertyValue_value {
2337 [u64; 1] [u64; 2],
2338 propertyByte propertyByte_mut: BYTE,
2339 propertyString propertyString_mut: PWSTR,
2340 propertyInt32 propertyInt32_mut: LONG,
2341 propertyInt64 propertyInt64_mut: LONGLONG,
2342 propertyBlob propertyBlob_mut: PrintPropertyValue_value_propertyBlob,
2343}}
2344STRUCT!{struct PrintPropertyValue {
2345 ePropertyType: EPrintPropertyType,
2346 value: PrintPropertyValue_value,
2347}}
2348STRUCT!{struct PrintNamedProperty {
2349 propertyName: *mut WCHAR,
2350 propertyValue: PrintPropertyValue,
2351}}
2352STRUCT!{struct PrintPropertiesCollection {
2353 numberOfProperties: ULONG,
2354 propertiesCollection: *mut PrintNamedProperty,
2355}}
2356extern "system" {
2357 pub fn ReportJobProcessingProgress(
2358 printerHandle: HANDLE,
2359 jobId: ULONG,
2360 jobOperation: EPrintXPSJobOperation,
2361 jobProgress: EPrintXPSJobProgress,
2362 ) -> HRESULT;
2363 pub fn GetPrinterDriver2A(
2364 hWnd: HWND,
2365 hPrinter: HANDLE,
2366 pEnvironment: LPSTR,
2367 Level: DWORD,
2368 pDriverInfo: LPBYTE,
2369 cbBuf: DWORD,
2370 pcbNeeded: LPDWORD,
2371 ) -> BOOL;
2372 pub fn GetPrinterDriver2W(
2373 hWnd: HWND,
2374 hPrinter: HANDLE,
2375 pEnvironment: LPWSTR,
2376 Level: DWORD,
2377 pDriverInfo: LPBYTE,
2378 cbBuf: DWORD,
2379 pcbNeeded: LPDWORD,
2380 ) -> BOOL;
2381}
2382ENUM!{enum PRINT_EXECUTION_CONTEXT {
2383 PRINT_EXECUTION_CONTEXT_APPLICATION = 0,
2384 PRINT_EXECUTION_CONTEXT_SPOOLER_SERVICE = 1,
2385 PRINT_EXECUTION_CONTEXT_SPOOLER_ISOLATION_HOST = 2,
2386 PRINT_EXECUTION_CONTEXT_FILTER_PIPELINE = 3,
2387 PRINT_EXECUTION_CONTEXT_WOW64 = 4,
2388}}
2389STRUCT!{struct PRINT_EXECUTION_DATA {
2390 context: PRINT_EXECUTION_CONTEXT,
2391 clientAppPID: DWORD,
2392}}
2393extern "system" {
2394 pub fn GetPrintExecutionData(
2395 pData: *mut PRINT_EXECUTION_DATA,
2396 ) -> BOOL;
2397 pub fn GetJobNamedPropertyValue(
2398 hPrinter: HANDLE,
2399 JobId: DWORD,
2400 pszName: PCWSTR,
2401 pValue: *mut PrintPropertyValue,
2402 ) -> DWORD;
2403 pub fn FreePrintPropertyValue(
2404 pValue: *mut PrintPropertyValue,
2405 );
2406 pub fn FreePrintNamedPropertyArray(
2407 cProperties: DWORD,
2408 ppProperties: *mut *mut PrintNamedProperty,
2409 );
2410 pub fn SetJobNamedProperty(
2411 hPrinter: HANDLE,
2412 JobId: DWORD,
2413 pProperty: *const PrintNamedProperty,
2414 ) -> DWORD;
2415 pub fn DeleteJobNamedProperty(
2416 hPrinter: HANDLE,
2417 JobId: DWORD,
2418 pszName: PCWSTR,
2419 ) -> DWORD;
2420 pub fn EnumJobNamedProperties(
2421 hPrinter: HANDLE,
2422 JobId: DWORD,
2423 pcProperties: *mut DWORD,
2424 ppProperties: *mut *mut PrintNamedProperty,
2425 ) -> DWORD;
2426 pub fn GetPrintOutputInfo(
2427 hWnd: HWND,
2428 pszPrinter: PCWSTR,
2429 phFile: *mut HANDLE,
2430 ppszOutputFile: *mut PWSTR,
2431 ) -> HRESULT;
2432}
2433pub const MS_PRINT_JOB_OUTPUT_FILE: &'static str = "MsPrintJobOutputFile";