[PSDK] Update msctf.idl. CORE-16441
[reactos.git] / sdk / include / psdk / winsplp.h
1 /*
2 * winsplp.h
3 *
4 * This file is part of the ReactOS PSDK package.
5 *
6 * Contributors:
7 * Created by Amine Khaldi.
8 *
9 * THIS SOFTWARE IS NOT COPYRIGHTED
10 *
11 * This source code is offered for use in the public domain. You may
12 * use, modify or distribute it freely.
13 *
14 * This code is distributed in the hope that it will be useful but
15 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
16 * DISCLAIMED. This includes but is not limited to warranties of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 *
19 */
20
21 #pragma once
22
23 #ifndef _WINSPLP_
24 #define _WINSPLP_
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 #if (STRICT && (NTDDI_VERSION >= NTDDI_VISTA))
31 #define HKEYMONITOR HKEY
32 #else
33 #define HKEYMONITOR HANDLE
34 #endif
35
36 #define PRINTER_NOTIFY_STATUS_ENDPOINT 1
37 #define PRINTER_NOTIFY_STATUS_POLL 2
38 #define PRINTER_NOTIFY_STATUS_INFO 4
39
40 #define ROUTER_UNKNOWN 0
41 #define ROUTER_SUCCESS 1
42 #define ROUTER_STOP_ROUTING 2
43
44 #if (NTDDI_VERSION >= NTDDI_WINXP)
45 #define MONITOR2_SIZE_WIN2K (sizeof(DWORD) + (sizeof(PVOID)*18))
46 #endif
47
48 #define COPYFILE_EVENT_SET_PRINTER_DATAEX 1
49 #define COPYFILE_EVENT_DELETE_PRINTER 2
50 #define COPYFILE_EVENT_ADD_PRINTER_CONNECTION 3
51 #define COPYFILE_EVENT_DELETE_PRINTER_CONNECTION 4
52 #define COPYFILE_EVENT_FILES_CHANGED 5
53
54 #define COPYFILE_FLAG_CLIENT_SPOOLER 0x00000001
55 #define COPYFILE_FLAG_SERVER_SPOOLER 0x00000002
56
57 #define PRINTER_NOTIFY_INFO_DATA_COMPACT 1
58
59 typedef struct _PRINTER_NOTIFY_INIT {
60 DWORD Size;
61 DWORD Reserved;
62 DWORD PollTime;
63 } PRINTER_NOTIFY_INIT, *LPPRINTER_NOTIFY_INIT, *PPRINTER_NOTIFY_INIT;
64
65 typedef struct _SPLCLIENT_INFO_1 {
66 DWORD dwSize;
67 LPWSTR pMachineName;
68 LPWSTR pUserName;
69 DWORD dwBuildNum;
70 DWORD dwMajorVersion;
71 DWORD dwMinorVersion;
72 WORD wProcessorArchitecture;
73 } SPLCLIENT_INFO_1, *LPSPLCLIENT_INFO_1, *PSPLCLIENT_INFO_1;
74
75 typedef struct _SPLCLIENT_INFO_2_V1{
76 ULONG_PTR hSplPrinter;
77 } SPLCLIENT_INFO_2_W2K;
78
79 typedef struct _SPLCLIENT_INFO_2_V2{
80 #ifdef _WIN64
81 DWORD64 hSplPrinter;
82 #else
83 DWORD32 hSplPrinter;
84 #endif
85 } SPLCLIENT_INFO_2_WINXP;
86
87 typedef struct _SPLCLIENT_INFO_2_V3{
88 UINT64 hSplPrinter;
89 } SPLCLIENT_INFO_2_LONGHORN;
90
91 typedef struct _PRINTPROVIDOR {
92
93 BOOL
94 (WINAPI *fpOpenPrinter)(
95 _In_opt_ PWSTR lpPrinterName,
96 _Out_ HANDLE *phPrinter,
97 _In_opt_ PPRINTER_DEFAULTSW pDefault);
98
99 BOOL
100 (WINAPI *fpSetJob)(
101 _In_ HANDLE hPrinter,
102 _In_ DWORD JobID,
103 _In_ DWORD Level,
104 _In_reads_opt_(_Inexpressible_(0)) LPBYTE pJob,
105 _In_ DWORD Command);
106
107 BOOL
108 (WINAPI *fpGetJob)(
109 _In_ HANDLE hPrinter,
110 _In_ DWORD JobID,
111 _In_ DWORD Level,
112 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pJob,
113 _In_ DWORD cbBuf,
114 _Out_ LPDWORD pcbNeeded);
115
116 BOOL
117 (WINAPI *fpEnumJobs)(
118 _In_ HANDLE hPrinter,
119 _In_ DWORD FirstJob,
120 _In_ DWORD NoJobs,
121 _In_ DWORD Level,
122 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pJob,
123 _In_ DWORD cbBuf,
124 _Out_ LPDWORD pcbNeeded,
125 _Out_ LPDWORD pcReturned);
126
127 HANDLE
128 (WINAPI *fpAddPrinter)(
129 _In_opt_ LPWSTR pName,
130 _In_ DWORD Level,
131 _In_reads_(_Inexpressible_(0)) LPBYTE pPrinter);
132
133 BOOL (WINAPI *fpDeletePrinter)(_In_ HANDLE hPrinter);
134
135 BOOL
136 (WINAPI *fpSetPrinter)(
137 _In_ HANDLE hPrinter,
138 _In_ DWORD Level,
139 _In_reads_(_Inexpressible_(0)) LPBYTE pPrinter,
140 _In_ DWORD Command);
141
142 BOOL
143 (WINAPI *fpGetPrinter)(
144 _In_ HANDLE hPrinter,
145 _In_ DWORD Level,
146 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pPrinter,
147 _In_ DWORD cbBuf,
148 _Out_ LPDWORD pcbNeeded);
149
150 BOOL
151 (WINAPI *fpEnumPrinters)(
152 _In_ DWORD dwType,
153 _In_opt_ LPWSTR lpszName,
154 _In_ DWORD dwLevel,
155 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE lpbPrinters,
156 _In_ DWORD cbBuf,
157 _Out_ LPDWORD lpdwNeeded,
158 _Out_ LPDWORD lpdwReturned);
159
160 BOOL
161 (WINAPI *fpAddPrinterDriver)(
162 _In_opt_ LPWSTR pName,
163 _In_ DWORD Level,
164 _In_reads_(_Inexpressible_(0)) LPBYTE pDriverInfo);
165
166 BOOL
167 (WINAPI *fpEnumPrinterDrivers)(
168 _In_opt_ LPWSTR pName,
169 _In_opt_ LPWSTR pEnvironment,
170 _In_ DWORD Level,
171 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pDriverInfo,
172 _In_ DWORD cbBuf,
173 _Out_ LPDWORD pcbNeeded,
174 _Out_ LPDWORD pcbReturned);
175
176 BOOL
177 (WINAPI *fpGetPrinterDriver)(
178 _In_ HANDLE hPrinter,
179 _In_opt_ LPWSTR pEnvironment,
180 _In_ DWORD Level,
181 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pDriverInfo,
182 _In_ DWORD cbBuf,
183 _Out_ LPDWORD pcbNeeded);
184
185 BOOL
186 (WINAPI *fpGetPrinterDriverDirectory)(
187 _In_opt_ LPWSTR pName,
188 _In_opt_ LPWSTR pEnvironment,
189 _In_ DWORD Level,
190 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pDriverDirectory,
191 _In_ DWORD cbBuf,
192 _Out_ LPDWORD pcbNeeded);
193
194 BOOL
195 (WINAPI *fpDeletePrinterDriver)(
196 _In_opt_ LPWSTR pName,
197 _In_opt_ LPWSTR pEnvironment,
198 _In_ LPWSTR pDriverName);
199
200 BOOL
201 (WINAPI *fpAddPrintProcessor)(
202 _In_opt_ LPWSTR pName,
203 _In_opt_ LPWSTR pEnvironment,
204 _In_ LPWSTR pPathName,
205 _In_ LPWSTR pPrintProcessorName);
206
207 BOOL
208 (WINAPI *fpEnumPrintProcessors)(
209 _In_opt_ LPWSTR pName,
210 _In_opt_ LPWSTR pEnvironment,
211 _In_ DWORD Level,
212 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pPrintProcessorInfo,
213 _In_ DWORD cbBuf,
214 _Out_ LPDWORD pcbNeeded,
215 _Out_ LPDWORD pcbReturned);
216
217 BOOL
218 (WINAPI *fpGetPrintProcessorDirectory)(
219 _In_opt_ LPWSTR pName,
220 _In_opt_ LPWSTR pEnvironment,
221 _In_ DWORD Level,
222 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pPrintProcessorInfo,
223 _In_ DWORD cbBuf,
224 _In_ LPDWORD pcbNeeded);
225
226 BOOL
227 (WINAPI *fpDeletePrintProcessor)(
228 _In_opt_ LPWSTR pName,
229 _In_opt_ LPWSTR pEnvironment,
230 _In_ LPWSTR pPrintProcessorName);
231
232 BOOL
233 (WINAPI *fpEnumPrintProcessorDatatypes)(
234 _In_opt_ LPWSTR pName,
235 _In_ LPWSTR pPrintProcessorName,
236 _In_ DWORD Level,
237 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pDatatypes,
238 _In_ DWORD cbBuf,
239 _Out_ LPDWORD pcbNeeded,
240 _Out_ LPDWORD pcbReturned);
241
242 DWORD
243 (WINAPI *fpStartDocPrinter)(
244 _In_ HANDLE hPrinter,
245 _In_ DWORD Level,
246 _In_reads_(_Inexpressible_(0)) LPBYTE pDocInfo);
247
248 BOOL (WINAPI *fpStartPagePrinter)(_In_ HANDLE hPrinter);
249
250 BOOL
251 (WINAPI *fpWritePrinter)(
252 _In_ HANDLE hPrinter,
253 _In_reads_bytes_(cbBuf) LPVOID pBuf,
254 _In_ DWORD cbBuf,
255 _Out_ LPDWORD pcWritten);
256
257 BOOL (WINAPI *fpEndPagePrinter)(_In_ HANDLE hPrinter);
258
259 BOOL (WINAPI *fpAbortPrinter)(_In_ HANDLE hPrinter);
260
261 BOOL
262 (WINAPI *fpReadPrinter)(
263 _In_ HANDLE hPrinter,
264 _Out_writes_bytes_to_opt_(cbBuf, *pNoBytesRead) LPVOID pBuf,
265 _In_ DWORD cbBuf,
266 _Out_ LPDWORD pNoBytesRead);
267
268 BOOL (WINAPI *fpEndDocPrinter)(_In_ HANDLE hPrinter);
269
270 BOOL
271 (WINAPI *fpAddJob)(
272 _In_ HANDLE hPrinter,
273 _In_ DWORD Level,
274 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pData,
275 _In_ DWORD cbBuf,
276 _Out_ LPDWORD pcbNeeded);
277
278 BOOL (WINAPI *fpScheduleJob)(_In_ HANDLE hPrinter, _In_ DWORD JobID);
279
280 DWORD
281 (WINAPI *fpGetPrinterData)(
282 _In_ HANDLE hPrinter,
283 _In_ LPWSTR pValueName,
284 _Out_opt_ LPDWORD pType,
285 _Out_writes_bytes_to_opt_(nSize, *pcbNeeded) LPBYTE pData,
286 _In_ DWORD nSize,
287 _Out_ LPDWORD pcbNeeded);
288
289 DWORD
290 (WINAPI *fpSetPrinterData)(
291 _In_ HANDLE hPrinter,
292 _In_ LPWSTR pValueName,
293 _In_ DWORD Type,
294 _In_reads_bytes_(cbData) LPBYTE pData,
295 _In_ DWORD cbData);
296
297 DWORD
298 (WINAPI *fpWaitForPrinterChange)(
299 _In_ HANDLE hPrinter,
300 _In_ DWORD Flags);
301
302 BOOL (WINAPI *fpClosePrinter)(_In_ HANDLE phPrinter);
303
304 BOOL
305 (WINAPI *fpAddForm)(
306 _In_ HANDLE hPrinter,
307 _In_ DWORD Level,
308 _In_reads_(_Inexpressible_(0)) LPBYTE pForm);
309
310 BOOL (WINAPI *fpDeleteForm)(_In_ HANDLE hPrinter, _In_ LPWSTR pFormName);
311
312 BOOL
313 (WINAPI *fpGetForm)(
314 _In_ HANDLE hPrinter,
315 _In_ LPWSTR pFormName,
316 _In_ DWORD Level,
317 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pForm,
318 _In_ DWORD cbBuf,
319 _Out_ LPDWORD pcbNeeded);
320
321 BOOL
322 (WINAPI *fpSetForm)(
323 _In_ HANDLE hPrinter,
324 _In_ LPWSTR pFormName,
325 _In_ DWORD Level,
326 _In_reads_(_Inexpressible_(0)) LPBYTE pForm);
327
328 BOOL
329 (WINAPI *fpEnumForms)(
330 _In_ HANDLE hPrinter,
331 _In_ DWORD Level,
332 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pForm,
333 _In_ DWORD cbBuf,
334 _Out_ LPDWORD pcbNeeded,
335 _Out_ LPDWORD pcReturned);
336
337 BOOL
338 (WINAPI *fpEnumMonitors)(
339 _In_opt_ LPWSTR pName,
340 _In_ DWORD Level,
341 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pMonitors,
342 _In_ DWORD cbBuf,
343 _Out_ LPDWORD pcbNeeded,
344 _Out_ LPDWORD pcReturned);
345
346 BOOL
347 (WINAPI *fpEnumPorts)(
348 _In_opt_ LPWSTR pName,
349 _In_ DWORD Level,
350 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pPorts,
351 _In_ DWORD cbBuf,
352 _Out_ LPDWORD pcbNeeded,
353 _Out_ LPDWORD pcReturned);
354
355 BOOL
356 (WINAPI *fpAddPort)(
357 _In_opt_ LPWSTR pName,
358 _In_ HWND hWnd,
359 _In_ LPWSTR pMonitorName);
360
361 BOOL
362 (WINAPI *fpConfigurePort)(
363 _In_opt_ LPWSTR pName,
364 _In_ HWND hWnd,
365 _In_ LPWSTR pPortName);
366
367 BOOL
368 (WINAPI *fpDeletePort)(
369 _In_opt_ LPWSTR pName,
370 _In_ HWND hWnd,
371 _In_ LPWSTR pPortName);
372
373 HANDLE
374 (WINAPI *fpCreatePrinterIC)(
375 _In_ HANDLE hPrinter,
376 _In_opt_ LPDEVMODEW pDevMode);
377
378 BOOL
379 (WINAPI *fpPlayGdiScriptOnPrinterIC)(
380 _In_ HANDLE hPrinterIC,
381 _In_reads_bytes_(cIn) LPBYTE pIn,
382 _In_ DWORD cIn,
383 _Out_writes_bytes_(cOut) LPBYTE pOut,
384 _In_ DWORD cOut,
385 _In_ DWORD ul);
386
387 BOOL (WINAPI *fpDeletePrinterIC)(_In_ HANDLE hPrinterIC);
388
389 BOOL (WINAPI *fpAddPrinterConnection)(_In_ LPWSTR pName);
390
391 BOOL (WINAPI *fpDeletePrinterConnection)(_In_ LPWSTR pName);
392
393 DWORD
394 (WINAPI *fpPrinterMessageBox)(
395 _In_ HANDLE hPrinter,
396 _In_ DWORD Error,
397 _In_ HWND hWnd,
398 _In_ LPWSTR pText,
399 _In_ LPWSTR pCaption,
400 _In_ DWORD dwType);
401
402 BOOL
403 (WINAPI *fpAddMonitor)(
404 _In_opt_ LPWSTR pName,
405 _In_ DWORD Level,
406 _In_reads_(_Inexpressible_(0)) LPBYTE pMonitors);
407
408 BOOL
409 (WINAPI *fpDeleteMonitor)(
410 _In_ LPWSTR pName,
411 _In_opt_ LPWSTR pEnvironment,
412 _In_ LPWSTR pMonitorName);
413
414 BOOL
415 (WINAPI *fpResetPrinter)(
416 _In_ HANDLE hPrinter,
417 _In_ LPPRINTER_DEFAULTSW pDefault);
418
419 BOOL
420 (WINAPI *fpGetPrinterDriverEx)(
421 _In_ HANDLE hPrinter,
422 _In_opt_ LPWSTR pEnvironment,
423 _In_ DWORD Level,
424 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pDriverInfo,
425 _In_ DWORD cbBuf,
426 _Out_ LPDWORD pcbNeeded,
427 _In_ DWORD dwClientMajorVersion,
428 _In_ DWORD dwClientMinorVersion,
429 _Out_ PDWORD pdwServerMajorVersion,
430 _Out_ PDWORD pdwServerMinorVersion);
431
432 HANDLE (WINAPI *fpFindFirstPrinterChangeNotification)(HANDLE hPrinter,
433 DWORD fdwFlags,
434 DWORD fdwOptions,
435 LPVOID pPrinterNotifyOptions);
436
437 BOOL (WINAPI *fpFindClosePrinterChangeNotification)(_In_ HANDLE hChange);
438
439 BOOL
440 (WINAPI *fpAddPortEx)(
441 _In_opt_ LPWSTR pName,
442 _In_ DWORD Level,
443 _In_reads_(_Inexpressible_(0)) LPBYTE lpBuffer,
444 _In_ LPWSTR lpMonitorName);
445
446 BOOL (WINAPI *fpShutDown)(_In_opt_ LPVOID pvReserved);
447
448 BOOL
449 (WINAPI *fpRefreshPrinterChangeNotification)(
450 _In_ HANDLE hPrinter,
451 _In_ DWORD Reserved,
452 _In_opt_ PVOID pvReserved,
453 _In_ PVOID pPrinterNotifyInfo);
454
455 BOOL
456 (WINAPI *fpOpenPrinterEx)(
457 _In_opt_ LPWSTR pPrinterName,
458 _Out_ LPHANDLE phPrinter,
459 _In_opt_ LPPRINTER_DEFAULTSW pDefault,
460 _In_reads_opt_(_Inexpressible_(0)) LPBYTE pClientInfo,
461 _In_ DWORD Level);
462
463 HANDLE
464 (WINAPI *fpAddPrinterEx)(
465 _In_opt_ LPWSTR pName,
466 _In_ DWORD Level,
467 _In_reads_(_Inexpressible_(0)) LPBYTE pPrinter,
468 _In_reads_opt_(_Inexpressible_(0)) LPBYTE pClientInfo,
469 _In_ DWORD ClientInfoLevel);
470
471 BOOL
472 (WINAPI *fpSetPort)(
473 _In_opt_ LPWSTR pName,
474 _In_ LPWSTR pPortName,
475 _In_ DWORD dwLevel,
476 _In_reads_(_Inexpressible_(0)) LPBYTE pPortInfo);
477
478 DWORD
479 (WINAPI *fpEnumPrinterData)(
480 _In_ HANDLE hPrinter,
481 _In_ DWORD dwIndex,
482 _Out_writes_bytes_to_opt_(cbValueName, *pcbValueName) LPWSTR pValueName,
483 _In_ DWORD cbValueName,
484 _Out_ LPDWORD pcbValueName,
485 _Out_opt_ LPDWORD pType,
486 _Out_writes_bytes_to_opt_(cbData, *pcbData) LPBYTE pData,
487 _In_ DWORD cbData,
488 _Out_ LPDWORD pcbData);
489
490 DWORD
491 (WINAPI *fpDeletePrinterData)(
492 _In_ HANDLE hPrinter,
493 _In_ LPWSTR pValueName);
494
495 DWORD
496 (WINAPI *fpClusterSplOpen)(
497 _In_ LPCWSTR pszServer,
498 _In_ LPCWSTR pszResource,
499 _Out_ PHANDLE phSpooler,
500 _In_ LPCWSTR pszName,
501 _In_ LPCWSTR pszAddress);
502
503 DWORD (WINAPI *fpClusterSplClose)(_In_ HANDLE hSpooler);
504
505 DWORD (WINAPI *fpClusterSplIsAlive)(_In_ HANDLE hSpooler);
506
507 DWORD
508 (WINAPI *fpSetPrinterDataEx)(
509 _In_ HANDLE hPrinter,
510 _In_ LPCWSTR pKeyName,
511 _In_ LPCWSTR pValueName,
512 _In_ DWORD Type,
513 _In_reads_bytes_(cbData) LPBYTE pData,
514 _In_ DWORD cbData);
515
516 DWORD
517 (WINAPI *fpGetPrinterDataEx)(
518 _In_ HANDLE hPrinter,
519 _In_ LPCWSTR pKeyName,
520 _In_ LPCWSTR pValueName,
521 _Out_opt_ LPDWORD pType,
522 _Out_writes_bytes_to_opt_(nSize, *pcbNeeded) LPBYTE pData,
523 _In_ DWORD nSize,
524 _Out_ LPDWORD pcbNeeded);
525
526 DWORD
527 (WINAPI *fpEnumPrinterDataEx)(
528 _In_ HANDLE hPrinter,
529 _In_ LPCWSTR pKeyName,
530 _Out_writes_bytes_to_opt_(cbEnumValues, *pcbEnumValues) LPBYTE pEnumValues,
531 _In_ DWORD cbEnumValues,
532 _Out_ LPDWORD pcbEnumValues,
533 _Out_ LPDWORD pnEnumValues);
534
535 DWORD
536 (WINAPI *fpEnumPrinterKey)(
537 _In_ HANDLE hPrinter,
538 _In_ LPCWSTR pKeyName,
539 _Out_writes_bytes_to_opt_(cbSubkey, *pcbSubkey) LPWSTR pSubkey,
540 _In_ DWORD cbSubkey,
541 _Out_ LPDWORD pcbSubkey);
542
543 DWORD
544 (WINAPI *fpDeletePrinterDataEx)(
545 _In_ HANDLE hPrinter,
546 _In_ LPCWSTR pKeyName,
547 _In_ LPCWSTR pValueName);
548
549 DWORD
550 (WINAPI *fpDeletePrinterKey)(
551 _In_ HANDLE hPrinter,
552 _In_ LPCWSTR pKeyName);
553
554 BOOL
555 (WINAPI *fpSeekPrinter)(
556 _In_ HANDLE hPrinter,
557 _In_ LARGE_INTEGER liDistanceToMove,
558 _Out_ PLARGE_INTEGER pliNewPointer,
559 _In_ DWORD dwMoveMethod,
560 _In_ BOOL bWrite);
561
562 BOOL
563 (WINAPI *fpDeletePrinterDriverEx)(
564 _In_opt_ LPWSTR pName,
565 _In_opt_ LPWSTR pEnvironment,
566 _In_ LPWSTR pDriverName,
567 _In_ DWORD dwDeleteFlag,
568 _In_ DWORD dwVersionNum);
569
570 BOOL
571 (WINAPI *fpAddPerMachineConnection)(
572 _In_opt_ LPCWSTR pServer,
573 _In_ LPCWSTR pPrinterName,
574 _In_ LPCWSTR pPrintServer,
575 _In_ LPCWSTR pProvider);
576
577 BOOL
578 (WINAPI *fpDeletePerMachineConnection)(
579 _In_opt_ LPCWSTR pServer,
580 _In_ LPCWSTR pPrinterName);
581
582 BOOL
583 (WINAPI *fpEnumPerMachineConnections)(
584 _In_opt_ LPCWSTR pServer,
585 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pPrinterEnum,
586 _In_ DWORD cbBuf,
587 _Out_ LPDWORD pcbNeeded,
588 _Out_ LPDWORD pcReturned);
589
590 BOOL
591 (WINAPI *fpXcvData)(
592 _In_ HANDLE hXcv,
593 _In_ LPCWSTR pszDataName,
594 _In_reads_bytes_(cbInputData) PBYTE pInputData,
595 _In_ DWORD cbInputData,
596 _Out_writes_bytes_to_opt_(cbOutputData, *pcbOutputNeeded) PBYTE pOutputData,
597 _In_ DWORD cbOutputData,
598 _Out_ PDWORD pcbOutputNeeded,
599 _Out_ PDWORD pdwStatus);
600
601 BOOL
602 (WINAPI *fpAddPrinterDriverEx)(
603 _In_opt_ LPWSTR pName,
604 _In_ DWORD Level,
605 _In_reads_(_Inexpressible_(0)) LPBYTE pDriverInfo,
606 _In_ DWORD dwFileCopyFlags);
607
608 BOOL
609 (WINAPI *fpSplReadPrinter)(
610 _In_ HANDLE hPrinter,
611 _Out_writes_bytes_(cbBuf) LPBYTE *pBuf,
612 _In_ DWORD cbBuf);
613
614 BOOL (WINAPI *fpDriverUnloadComplete)(_In_ LPWSTR pDriverFile);
615
616 BOOL
617 (WINAPI *fpGetSpoolFileInfo)(
618 _In_ HANDLE hPrinter,
619 _Outptr_result_maybenull_ LPWSTR *pSpoolDir,
620 _Out_ LPHANDLE phFile,
621 _In_ HANDLE hSpoolerProcess,
622 _In_ HANDLE hAppProcess);
623
624 BOOL (WINAPI *fpCommitSpoolData)(_In_ HANDLE hPrinter, _In_ DWORD cbCommit);
625
626 BOOL (WINAPI *fpCloseSpoolFileHandle)(_In_ HANDLE hPrinter);
627
628 BOOL
629 (WINAPI *fpFlushPrinter)(
630 _In_ HANDLE hPrinter,
631 _In_reads_bytes_(cbBuf) LPBYTE pBuf,
632 _In_ DWORD cbBuf,
633 _Out_ LPDWORD pcWritten,
634 _In_ DWORD cSleep);
635
636 DWORD
637 (WINAPI *fpSendRecvBidiData)(
638 _In_ HANDLE hPort,
639 _In_ LPCWSTR pAction,
640 _In_ LPBIDI_REQUEST_CONTAINER pReqData,
641 _Outptr_ LPBIDI_RESPONSE_CONTAINER *ppResData);
642
643 BOOL (WINAPI *fpAddDriverCatalog)(HANDLE hPrinter, DWORD dwLevel,
644 VOID *pvDriverInfCatInfo, DWORD dwCatalogCopyFlags);
645 } PRINTPROVIDOR, *LPPRINTPROVIDOR;
646
647 typedef struct _PRINTPROCESSOROPENDATA {
648 PDEVMODEW pDevMode;
649 LPWSTR pDatatype;
650 LPWSTR pParameters;
651 LPWSTR pDocumentName;
652 DWORD JobId;
653 LPWSTR pOutputFile;
654 LPWSTR pPrinterName;
655 } PRINTPROCESSOROPENDATA, *LPPRINTPROCESSOROPENDATA, *PPRINTPROCESSOROPENDATA;
656
657 typedef struct _MONITORREG {
658 DWORD cbSize;
659
660 LONG
661 (WINAPI *fpCreateKey)(
662 _In_ HANDLE hcKey,
663 _In_ LPCWSTR pszSubKey,
664 _In_ DWORD dwOptions,
665 _In_ REGSAM samDesired,
666 _In_opt_ PSECURITY_ATTRIBUTES pSecurityAttributes,
667 _Out_ PHANDLE phckResult,
668 _Out_opt_ PDWORD pdwDisposition,
669 _In_ HANDLE hSpooler);
670
671 LONG
672 (WINAPI *fpOpenKey)(
673 _In_ HANDLE hcKey,
674 _In_ LPCWSTR pszSubKey,
675 _In_ REGSAM samDesired,
676 _Out_ PHANDLE phkResult,
677 _In_ HANDLE hSpooler);
678
679 LONG (WINAPI *fpCloseKey)(_In_ HANDLE hcKey, _In_ HANDLE hSpooler);
680
681 LONG
682 (WINAPI *fpDeleteKey)(
683 _In_ HANDLE hcKey,
684 _In_ LPCWSTR pszSubKey,
685 _In_ HANDLE hSpooler);
686
687 LONG
688 (WINAPI *fpEnumKey)(
689 _In_ HANDLE hcKey,
690 _In_ DWORD dwIndex,
691 _Inout_updates_to_(*pcchName, *pcchName) LPWSTR pszName,
692 _Inout_ PDWORD pcchName,
693 _Out_opt_ PFILETIME pftLastWriteTime,
694 _In_ HANDLE hSpooler);
695
696 LONG
697 (WINAPI *fpQueryInfoKey)(
698 _In_ HANDLE hcKey,
699 _Out_opt_ PDWORD pcSubKeys,
700 _Out_opt_ PDWORD pcbKey,
701 _Out_opt_ PDWORD pcValues,
702 _Out_opt_ PDWORD pcbValue,
703 _Out_opt_ PDWORD pcbData,
704 _Out_opt_ PDWORD pcbSecurityDescriptor,
705 _Out_opt_ PFILETIME pftLastWriteTime,
706 _In_ HANDLE hSpooler);
707
708 LONG
709 (WINAPI *fpSetValue)(
710 _In_ HANDLE hcKey,
711 _In_ LPCWSTR pszValue,
712 _In_ DWORD dwType,
713 _In_reads_bytes_(cbData) const BYTE *pData,
714 _In_ DWORD cbData,
715 _In_ HANDLE hSpooler);
716
717 LONG
718 (WINAPI *fpDeleteValue)(
719 _In_ HANDLE hcKey,
720 _In_ LPCWSTR pszValue,
721 _In_ HANDLE hSpooler);
722
723 LONG
724 (WINAPI *fpEnumValue)(
725 _In_ HANDLE hcKey,
726 _In_ DWORD dwIndex,
727 _Inout_updates_to_(*pcbValue, *pcbValue) LPWSTR pszValue,
728 _Inout_ PDWORD pcbValue,
729 _Out_opt_ PDWORD pType,
730 _Out_writes_bytes_to_opt_(*pcbData, *pcbData) PBYTE pData,
731 _Inout_ PDWORD pcbData,
732 _In_ HANDLE hSpooler);
733
734 LONG
735 (WINAPI *fpQueryValue)(
736 _In_ HANDLE hcKey,
737 _In_ LPCWSTR pszValue,
738 _Out_opt_ PDWORD pType,
739 _Out_writes_bytes_to_opt_(*pcbData, *pcbData) PBYTE pData,
740 _Inout_ PDWORD pcbData,
741 _In_ HANDLE hSpooler);
742
743 } MONITORREG, *PMONITORREG;
744
745 typedef struct _MONITORINIT {
746 DWORD cbSize;
747 HANDLE hSpooler;
748 HKEYMONITOR hckRegistryRoot;
749 PMONITORREG pMonitorReg;
750 BOOL bLocal;
751 LPCWSTR pszServerName;
752 } MONITORINIT, *PMONITORINIT;
753
754 typedef struct _MONITOR {
755
756 BOOL
757 (WINAPI *pfnEnumPorts)(
758 _In_opt_ LPWSTR pName,
759 _In_ DWORD Level,
760 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pPorts,
761 _In_ DWORD cbBuf,
762 _Out_ LPDWORD pcbNeeded,
763 _Out_ LPDWORD pcReturned);
764
765 BOOL (WINAPI *pfnOpenPort)(_In_ LPWSTR pName, _Out_ PHANDLE pHandle);
766
767 BOOL
768 (WINAPI *pfnOpenPortEx)(
769 _In_ LPWSTR pPortName,
770 _In_ LPWSTR pPrinterName,
771 _Out_ PHANDLE pHandle,
772 _In_ struct _MONITOR *pMonitor);
773
774 BOOL
775 (WINAPI *pfnStartDocPort)(
776 _In_ HANDLE hPort,
777 _In_ LPWSTR pPrinterName,
778 _In_ DWORD JobId,
779 _In_ DWORD Level,
780 _In_reads_(_Inexpressible_(0)) LPBYTE pDocInfo);
781
782 BOOL
783 (WINAPI *pfnWritePort)(
784 _In_ HANDLE hPort,
785 _In_reads_bytes_(cbBuf) LPBYTE pBuffer,
786 _In_ DWORD cbBuf,
787 _Out_ LPDWORD pcbWritten);
788
789 BOOL
790 (WINAPI *pfnReadPort)(
791 _In_ HANDLE hPort,
792 _Out_writes_bytes_to_(cbBuffer, *pcbRead) LPBYTE pBuffer,
793 _In_ DWORD cbBuffer,
794 _Out_ LPDWORD pcbRead);
795
796 BOOL (WINAPI *pfnEndDocPort)(_In_ HANDLE hPort);
797
798 BOOL (WINAPI *pfnClosePort)(_In_ HANDLE hPort);
799
800 BOOL
801 (WINAPI *pfnAddPort)(
802 _In_ LPWSTR pName,
803 _In_ HWND hWnd,
804 _In_ LPWSTR pMonitorName);
805
806 BOOL
807 (WINAPI *pfnAddPortEx)(
808 _In_ LPWSTR pName,
809 _In_ DWORD Level,
810 _In_reads_(_Inexpressible_(0)) LPBYTE lpBuffer,
811 _In_ LPWSTR lpMonitorName);
812
813 BOOL
814 (WINAPI *pfnConfigurePort)(
815 _In_ LPWSTR pName,
816 _In_ HWND hWnd,
817 _In_ LPWSTR pPortName);
818
819 BOOL
820 (WINAPI *pfnDeletePort)(
821 _In_ LPWSTR pName,
822 _In_ HWND hWnd,
823 _In_ LPWSTR pPortName);
824
825 BOOL
826 (WINAPI *pfnGetPrinterDataFromPort)(
827 _In_ HANDLE hPort,
828 _In_ DWORD ControlID,
829 _In_ LPWSTR pValueName,
830 _In_reads_bytes_(cbInBuffer) LPWSTR lpInBuffer,
831 _In_ DWORD cbInBuffer,
832 _Out_writes_bytes_to_opt_(cbOutBuffer, *lpcbReturned) LPWSTR lpOutBuffer,
833 _In_ DWORD cbOutBuffer,
834 _Out_ LPDWORD lpcbReturned);
835
836 BOOL
837 (WINAPI *pfnSetPortTimeOuts)(
838 _In_ HANDLE hPort,
839 _In_ LPCOMMTIMEOUTS lpCTO,
840 _In_ DWORD reserved);
841
842 BOOL
843 (WINAPI *pfnXcvOpenPort)(
844 _In_ LPCWSTR pszObject,
845 _In_ ACCESS_MASK GrantedAccess,
846 _Out_ PHANDLE phXcv);
847
848 DWORD
849 (WINAPI *pfnXcvDataPort)(
850 _In_ HANDLE hXcv,
851 _In_ LPCWSTR pszDataName,
852 _In_reads_bytes_(cbInputData) PBYTE pInputData,
853 _In_ DWORD cbInputData,
854 _Out_writes_bytes_to_opt_(cbOutputData, *pcbOutputNeeded) PBYTE pOutputData,
855 _In_ DWORD cbOutputData,
856 _Out_ PDWORD pcbOutputNeeded);
857
858 BOOL (WINAPI *pfnXcvClosePort)(_In_ HANDLE hXcv);
859
860 } MONITOR, *LPMONITOR;
861
862 typedef struct _MONITOREX {
863 DWORD dwMonitorSize;
864 MONITOR Monitor;
865 } MONITOREX, *LPMONITOREX;
866
867 typedef struct _MONITOR2 {
868 DWORD cbSize;
869
870 BOOL
871 (WINAPI *pfnEnumPorts)(
872 _In_ HANDLE hMonitor,
873 _In_opt_ LPWSTR pName,
874 _In_ DWORD Level,
875 _Out_writes_bytes_to_opt_(cbBuf, *pcbNeeded) LPBYTE pPorts,
876 _In_ DWORD cbBuf,
877 _Out_ LPDWORD pcbNeeded,
878 _Out_ LPDWORD pcReturned);
879
880 BOOL
881 (WINAPI *pfnOpenPort)(
882 _In_ HANDLE hMonitor,
883 _In_ LPWSTR pName,
884 _Out_ PHANDLE pHandle);
885
886 BOOL
887 (WINAPI *pfnOpenPortEx)(
888 _In_ HANDLE hMonitor,
889 _In_ HANDLE hMonitorPort,
890 _In_ LPWSTR pPortName,
891 _In_ LPWSTR pPrinterName,
892 _Out_ PHANDLE pHandle,
893 _In_ struct _MONITOR2 *pMonitor2);
894
895 BOOL
896 (WINAPI *pfnStartDocPort)(
897 _In_ HANDLE hPort,
898 _In_ LPWSTR pPrinterName,
899 _In_ DWORD JobId,
900 _In_ DWORD Level,
901 _In_reads_(_Inexpressible_(0)) LPBYTE pDocInfo);
902
903 BOOL
904 (WINAPI *pfnWritePort)(
905 _In_ HANDLE hPort,
906 _In_reads_bytes_(cbBuf) LPBYTE pBuffer,
907 _In_ DWORD cbBuf,
908 _Out_ LPDWORD pcbWritten);
909
910 BOOL
911 (WINAPI *pfnReadPort)(
912 _In_ HANDLE hPort,
913 _Out_writes_bytes_to_opt_(cbBuffer, *pcbRead) LPBYTE pBuffer,
914 _In_ DWORD cbBuffer,
915 _Out_ LPDWORD pcbRead);
916
917 BOOL (WINAPI *pfnEndDocPort)(_In_ HANDLE hPort);
918
919 BOOL (WINAPI *pfnClosePort)(_In_ HANDLE hPort);
920
921 BOOL
922 (WINAPI *pfnAddPort)(
923 _In_ HANDLE hMonitor,
924 _In_ LPWSTR pName,
925 _In_ HWND hWnd,
926 _In_ LPWSTR pMonitorName);
927
928 BOOL
929 (WINAPI *pfnAddPortEx)(
930 _In_ HANDLE hMonitor,
931 _In_ LPWSTR pName,
932 _In_ DWORD Level,
933 _In_reads_(_Inexpressible_(0)) LPBYTE lpBuffer,
934 _In_ LPWSTR lpMonitorName);
935
936 BOOL
937 (WINAPI *pfnConfigurePort)(
938 _In_ HANDLE hMonitor,
939 _In_ LPWSTR pName,
940 _In_ HWND hWnd,
941 _In_ LPWSTR pPortName);
942
943 BOOL
944 (WINAPI *pfnDeletePort)(
945 _In_ HANDLE hMonitor,
946 _In_ LPWSTR pName,
947 _In_ HWND hWnd,
948 _In_ LPWSTR pPortName);
949
950 BOOL
951 (WINAPI *pfnGetPrinterDataFromPort)(
952 _In_ HANDLE hPort,
953 _In_ DWORD ControlID,
954 _In_ LPWSTR pValueName,
955 _In_reads_bytes_(cbInBuffer) LPWSTR lpInBuffer,
956 _In_ DWORD cbInBuffer,
957 _Out_writes_bytes_to_opt_(cbOutBuffer, *lpcbReturned) LPWSTR lpOutBuffer,
958 _In_ DWORD cbOutBuffer,
959 _Out_ LPDWORD lpcbReturned);
960
961 BOOL
962 (WINAPI *pfnSetPortTimeOuts)(
963 _In_ HANDLE hPort,
964 _In_ LPCOMMTIMEOUTS lpCTO,
965 _In_ DWORD reserved);
966
967 BOOL
968 (WINAPI *pfnXcvOpenPort)(
969 _In_ HANDLE hMonitor,
970 _In_ LPCWSTR pszObject,
971 _In_ ACCESS_MASK GrantedAccess,
972 _Out_ PHANDLE phXcv);
973
974 DWORD
975 (WINAPI *pfnXcvDataPort)(
976 _In_ HANDLE hXcv,
977 _In_ LPCWSTR pszDataName,
978 _In_reads_bytes_(cbInputData) PBYTE pInputData,
979 _In_ DWORD cbInputData,
980 _Out_writes_bytes_to_opt_(cbOutputData, *pcbOutputNeeded) PBYTE pOutputData,
981 _In_ DWORD cbOutputData,
982 _Out_ PDWORD pcbOutputNeeded);
983
984 BOOL (WINAPI *pfnXcvClosePort)(_In_ HANDLE hXcv);
985
986 VOID (WINAPI *pfnShutdown)(_In_ HANDLE hMonitor);
987
988 #if (NTDDI_VERSION >= NTDDI_WINXP)
989 DWORD
990 (WINAPI *pfnSendRecvBidiDataFromPort)(
991 _In_ HANDLE hPort,
992 _In_ DWORD dwAccessBit,
993 _In_ LPCWSTR pAction,
994 _In_ PBIDI_REQUEST_CONTAINER pReqData,
995 _Outptr_ PBIDI_RESPONSE_CONTAINER *ppResData);
996 #endif
997
998 #if (NTDDI_VERSION >= NTDDI_WIN7)
999
1000 DWORD
1001 (WINAPI *pfnNotifyUsedPorts)(
1002 _In_ HANDLE hMonitor,
1003 _In_ DWORD cPorts,
1004 _In_reads_(cPorts) PCWSTR *ppszPorts);
1005
1006 DWORD
1007 (WINAPI *pfnNotifyUnusedPorts)(
1008 _In_ HANDLE hMonitor,
1009 _In_ DWORD cPorts,
1010 _In_reads_(cPorts) PCWSTR *ppszPorts);
1011
1012 #endif
1013
1014 } MONITOR2, *LPMONITOR2, *PMONITOR2;
1015
1016 typedef struct _MONITORUI {
1017 DWORD dwMonitorUISize;
1018
1019 BOOL
1020 (WINAPI *pfnAddPortUI)(
1021 _At_(return, _Success_(return != 0)) _In_opt_ PCWSTR pszServer,
1022 _In_ HWND hWnd,
1023 _In_ PCWSTR pszPortNameIn,
1024 _Out_opt_ PWSTR *ppszPortNameOut);
1025
1026 BOOL
1027 (WINAPI *pfnConfigurePortUI)(
1028 _In_opt_ PCWSTR pName,
1029 _In_ HWND hWnd,
1030 _In_ PCWSTR pPortName);
1031
1032 BOOL
1033 (WINAPI *pfnDeletePortUI)(
1034 _In_opt_ PCWSTR pszServer,
1035 _In_ HWND hWnd,
1036 _In_ PCWSTR pszPortName);
1037
1038 } MONITORUI, *PMONITORUI;
1039
1040 #if (NTDDI_VERSION >= NTDDI_WINXP)
1041
1042 typedef enum {
1043 kMessageBox = 0
1044 } UI_TYPE;
1045
1046 typedef struct {
1047 DWORD cbSize;
1048 LPWSTR pTitle;
1049 LPWSTR pMessage;
1050 DWORD Style;
1051 DWORD dwTimeout;
1052 BOOL bWait;
1053 } MESSAGEBOX_PARAMS, *PMESSAGEBOX_PARAMS;
1054
1055 typedef struct {
1056 UI_TYPE UIType;
1057 MESSAGEBOX_PARAMS MessageBoxParams;
1058 } SHOWUIPARAMS, *PSHOWUIPARAMS;
1059
1060 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1061
1062 #if (NTDDI_VERSION >= NTDDI_WS03)
1063 #ifndef __ATTRIBUTE_INFO_3__
1064 #define __ATTRIBUTE_INFO_3__
1065 typedef struct _ATTRIBUTE_INFO_3 {
1066 DWORD dwJobNumberOfPagesPerSide;
1067 DWORD dwDrvNumberOfPagesPerSide;
1068 DWORD dwNupBorderFlags;
1069 DWORD dwJobPageOrderFlags;
1070 DWORD dwDrvPageOrderFlags;
1071 DWORD dwJobNumberOfCopies;
1072 DWORD dwDrvNumberOfCopies;
1073 DWORD dwColorOptimization;
1074 short dmPrintQuality;
1075 short dmYResolution;
1076 } ATTRIBUTE_INFO_3, *PATTRIBUTE_INFO_3;
1077 #endif /* __ATTRIBUTE_INFO_3__ */
1078 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
1079
1080 #if (NTDDI_VERSION >= NTDDI_VISTA)
1081
1082 typedef BOOL
1083 (CALLBACK *ROUTER_NOTIFY_CALLBACK)(
1084 _In_ DWORD dwCommand,
1085 _In_ PVOID pContext,
1086 _In_ DWORD dwColor,
1087 _In_ PPRINTER_NOTIFY_INFO pNofityInfo,
1088 _In_ DWORD fdwFlags,
1089 _Out_ PDWORD pdwResult);
1090
1091 typedef enum _NOTIFICATION_CALLBACK_COMMANDS {
1092 NOTIFICATION_COMMAND_NOTIFY,
1093 NOTIFICATION_COMMAND_CONTEXT_ACQUIRE,
1094 NOTIFICATION_COMMAND_CONTEXT_RELEASE
1095 } NOTIFICATION_CALLBACK_COMMANDS;
1096
1097 typedef struct _NOTIFICATION_CONFIG_1 {
1098 UINT cbSize;
1099 DWORD fdwFlags;
1100 ROUTER_NOTIFY_CALLBACK pfnNotifyCallback;
1101 PVOID pContext;
1102 } NOTIFICATION_CONFIG_1, *PNOTIFICATION_CONFIG_1;
1103
1104 typedef enum _NOTIFICATION_CONFIG_FLAGS {
1105 NOTIFICATION_CONFIG_CREATE_EVENT = 1 << 0,
1106 NOTIFICATION_CONFIG_REGISTER_CALLBACK = 1 << 1,
1107 NOTIFICATION_CONFIG_EVENT_TRIGGER = 1 << 2,
1108 NOTIFICATION_CONFIG_ASYNC_CHANNEL = 1 << 3
1109 } NOTIFICATION_CONFIG_FLAGS;
1110
1111 typedef struct _SPLCLIENT_INFO_3 {
1112 UINT cbSize;
1113 DWORD dwFlags;
1114 DWORD dwSize;
1115 PWSTR pMachineName;
1116 PWSTR pUserName;
1117 DWORD dwBuildNum;
1118 DWORD dwMajorVersion;
1119 DWORD dwMinorVersion;
1120 WORD wProcessorArchitecture;
1121 UINT64 hSplPrinter;
1122 } SPLCLIENT_INFO_3, *PSPLCLIENT_INFO_3, *LPSPLCLIENT_INFO_3;
1123
1124 #ifndef __ATTRIBUTE_INFO_4__
1125 #define __ATTRIBUTE_INFO_4__
1126
1127 typedef struct _ATTRIBUTE_INFO_4 {
1128 DWORD dwJobNumberOfPagesPerSide;
1129 DWORD dwDrvNumberOfPagesPerSide;
1130 DWORD dwNupBorderFlags;
1131 DWORD dwJobPageOrderFlags;
1132 DWORD dwDrvPageOrderFlags;
1133 DWORD dwJobNumberOfCopies;
1134 DWORD dwDrvNumberOfCopies;
1135 DWORD dwColorOptimization;
1136 short dmPrintQuality;
1137 short dmYResolution;
1138 DWORD dwDuplexFlags;
1139 DWORD dwNupDirection;
1140 DWORD dwBookletFlags;
1141 DWORD dwScalingPercentX;
1142 DWORD dwScalingPercentY;
1143 } ATTRIBUTE_INFO_4, *PATTRIBUTE_INFO_4;
1144
1145 #define REVERSE_PAGES_FOR_REVERSE_DUPLEX (0x00000001)
1146 #define DONT_SEND_EXTRA_PAGES_FOR_DUPLEX (0x00000001 << 1)
1147
1148 #define RIGHT_THEN_DOWN (0x00000001)
1149 #define DOWN_THEN_RIGHT (0x00000001 << 1)
1150 #define LEFT_THEN_DOWN (0x00000001 << 2)
1151 #define DOWN_THEN_LEFT (0x00000001 << 3)
1152
1153 #define BOOKLET_EDGE_LEFT 0x00000000
1154 #define BOOKLET_EDGE_RIGHT 0x00000001
1155
1156 #endif /* __ATTRIBUTE_INFO_4__ */
1157
1158 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1159
1160 #if (OSVER(NTDDI_VERSION) == NTDDI_W2K)
1161 typedef SPLCLIENT_INFO_2_W2K SPLCLIENT_INFO_2, *PSPLCLIENT_INFO_2, *LPSPLCLIENT_INFO_2;
1162 #elif ((OSVER(NTDDI_VERSION) == NTDDI_WINXP) || (OSVER(NTDDI_VERSION) == NTDDI_WS03))
1163 typedef SPLCLIENT_INFO_2_WINXP SPLCLIENT_INFO_2, *PSPLCLIENT_INFO_2, *LPSPLCLIENT_INFO_2;
1164 #else
1165 typedef SPLCLIENT_INFO_2_LONGHORN SPLCLIENT_INFO_2, *PSPLCLIENT_INFO_2, *LPSPLCLIENT_INFO_2;
1166 #endif /* (OSVER(NTDDI_VERSION) == NTDDI_W2K) */
1167
1168 BOOL
1169 WINAPI
1170 InitializePrintProvidor(
1171 _Out_writes_bytes_(cbPrintProvidor) LPPRINTPROVIDOR pPrintProvidor,
1172 _In_ DWORD cbPrintProvidor,
1173 _In_opt_ LPWSTR pFullRegistryPath);
1174
1175 HANDLE
1176 WINAPI
1177 OpenPrintProcessor(
1178 _In_ LPWSTR pPrinterName,
1179 _In_ PPRINTPROCESSOROPENDATA pPrintProcessorOpenData);
1180
1181 BOOL
1182 WINAPI
1183 PrintDocumentOnPrintProcessor(
1184 _In_ HANDLE hPrintProcessor,
1185 _In_ LPWSTR pDocumentName);
1186
1187 BOOL
1188 WINAPI
1189 ClosePrintProcessor(
1190 _Inout_ HANDLE hPrintProcessor);
1191
1192 BOOL
1193 WINAPI
1194 ControlPrintProcessor(
1195 _In_ HANDLE hPrintProcessor,
1196 _In_ DWORD Command);
1197
1198 DWORD
1199 WINAPI
1200 GetPrintProcessorCapabilities(
1201 _In_ LPTSTR pValueName,
1202 _In_ DWORD dwAttributes,
1203 _Out_writes_bytes_(nSize) LPBYTE pData,
1204 _In_ DWORD nSize,
1205 _Out_ LPDWORD pcbNeeded);
1206
1207 BOOL
1208 WINAPI
1209 InitializeMonitor(
1210 _In_ LPWSTR pRegistryRoot);
1211
1212 BOOL
1213 WINAPI
1214 OpenPort(
1215 _In_ LPWSTR pName,
1216 _Out_ PHANDLE pHandle);
1217
1218 BOOL
1219 WINAPI
1220 WritePort(
1221 _In_ HANDLE hPort,
1222 _In_reads_bytes_(cbBuf) LPBYTE pBuffer,
1223 _In_ DWORD cbBuf,
1224 _Out_ LPDWORD pcbWritten);
1225
1226 BOOL
1227 WINAPI
1228 ReadPort(
1229 _In_ HANDLE hPort,
1230 _Out_writes_bytes_(cbBuffer) LPBYTE pBuffer,
1231 _In_ DWORD cbBuffer,
1232 _Out_ LPDWORD pcbRead);
1233
1234 BOOL
1235 WINAPI
1236 ClosePort(
1237 _In_ HANDLE hPort);
1238
1239 BOOL
1240 WINAPI
1241 XcvOpenPort(
1242 _In_ LPCWSTR pszObject,
1243 _In_ ACCESS_MASK GrantedAccess,
1244 _Out_ PHANDLE phXcv);
1245
1246 DWORD
1247 WINAPI
1248 XcvDataPort(
1249 _In_ HANDLE hXcv,
1250 _In_ LPCWSTR pszDataName,
1251 _In_reads_bytes_(cbInputData) PBYTE pInputData,
1252 _In_ DWORD cbInputData,
1253 _Out_writes_bytes_(cbOutputData) PBYTE pOutputData,
1254 _In_ DWORD cbOutputData,
1255 _Out_ PDWORD pcbOutputNeeded);
1256
1257 BOOL
1258 WINAPI
1259 XcvClosePort(
1260 _In_ HANDLE hXcv);
1261
1262 _Success_(return != 0)
1263 BOOL
1264 WINAPI
1265 AddPortUI(
1266 _In_opt_ PCWSTR pszServer,
1267 _In_ HWND hWnd,
1268 _In_ PCWSTR pszMonitorNameIn,
1269 _Out_opt_ PWSTR *ppszPortNameOut);
1270
1271 BOOL
1272 WINAPI
1273 ConfigurePortUI(
1274 _In_ PCWSTR pszServer,
1275 _In_ HWND hWnd,
1276 _In_ PCWSTR pszPortName);
1277
1278 BOOL
1279 WINAPI
1280 DeletePortUI(
1281 _In_ PCWSTR pszServer,
1282 _In_ HWND hWnd,
1283 _In_ PCWSTR pszPortName);
1284
1285 BOOL
1286 WINAPI
1287 SplDeleteSpoolerPortStart(
1288 _In_ PCWSTR pPortName);
1289
1290 BOOL
1291 WINAPI
1292 SplDeleteSpoolerPortEnd(
1293 _In_ PCWSTR pName,
1294 _In_ BOOL bDeletePort);
1295
1296 BOOL
1297 WINAPI
1298 SpoolerCopyFileEvent(
1299 _In_ LPWSTR pszPrinterName,
1300 _In_ LPWSTR pszKey,
1301 _In_ DWORD dwCopyFileEvent);
1302
1303 DWORD
1304 WINAPI
1305 GenerateCopyFilePaths(
1306 _In_ LPCWSTR pszPrinterName,
1307 _In_ LPCWSTR pszDirectory,
1308 _In_ LPBYTE pSplClientInfo,
1309 _In_ DWORD dwLevel,
1310 _Inout_updates_(*pcchSourceDirSize) LPWSTR pszSourceDir,
1311 _Inout_ LPDWORD pcchSourceDirSize,
1312 _Inout_updates_(*pcchTargetDirSize) LPWSTR pszTargetDir,
1313 _Inout_ LPDWORD pcchTargetDirSize,
1314 _In_ DWORD dwFlags);
1315
1316 HANDLE
1317 WINAPI
1318 CreatePrinterIC(
1319 _In_ HANDLE hPrinter,
1320 _In_opt_ LPDEVMODEW pDevMode);
1321
1322 BOOL
1323 WINAPI
1324 PlayGdiScriptOnPrinterIC(
1325 _In_ HANDLE hPrinterIC,
1326 _In_reads_bytes_(cIn) LPBYTE pIn,
1327 _In_ DWORD cIn,
1328 _Out_writes_bytes_(cOut) LPBYTE pOut,
1329 _In_ DWORD cOut,
1330 _In_ DWORD ul);
1331
1332 BOOL WINAPI DeletePrinterIC(_In_ HANDLE hPrinterIC);
1333
1334 BOOL
1335 WINAPI
1336 DevQueryPrint(
1337 _In_ HANDLE hPrinter,
1338 _In_ LPDEVMODEW pDevMode,
1339 _Out_ DWORD *pResID);
1340
1341 HANDLE WINAPI RevertToPrinterSelf(VOID);
1342 BOOL WINAPI ImpersonatePrinterClient(_In_ HANDLE hToken);
1343
1344 BOOL
1345 WINAPI
1346 ReplyPrinterChangeNotification(
1347 _In_ HANDLE hNotify,
1348 _In_ DWORD fdwFlags,
1349 _Out_opt_ PDWORD pdwResult,
1350 _In_opt_ PVOID pPrinterNotifyInfo);
1351
1352 BOOL
1353 WINAPI
1354 ReplyPrinterChangeNotificationEx(
1355 _In_ HANDLE hNotify,
1356 _In_ DWORD dwColor,
1357 _In_ DWORD fdwFlags,
1358 _Out_ PDWORD pdwResult,
1359 _In_ PVOID pPrinterNotifyInfo);
1360
1361 BOOL
1362 WINAPI
1363 PartialReplyPrinterChangeNotification(
1364 _In_ HANDLE hNotify,
1365 _In_opt_ PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc);
1366
1367 PPRINTER_NOTIFY_INFO
1368 WINAPI
1369 RouterAllocPrinterNotifyInfo(
1370 _In_ DWORD cPrinterNotifyInfoData);
1371
1372 BOOL WINAPI RouterFreePrinterNotifyInfo(_In_opt_ PPRINTER_NOTIFY_INFO pInfo);
1373
1374 BOOL
1375 WINAPI
1376 AppendPrinterNotifyInfoData(
1377 _In_ PPRINTER_NOTIFY_INFO pInfoDest,
1378 _In_opt_ PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc,
1379 _In_ DWORD fdwFlags);
1380
1381 DWORD
1382 WINAPI
1383 CallRouterFindFirstPrinterChangeNotification(
1384 _In_ HANDLE hPrinter,
1385 _In_ DWORD fdwFlags,
1386 _In_ DWORD fdwOptions,
1387 _In_ HANDLE hNotify,
1388 _In_ PPRINTER_NOTIFY_OPTIONS pPrinterNotifyOptions);
1389
1390 BOOL
1391 WINAPI
1392 ProvidorFindFirstPrinterChangeNotification(
1393 _In_ HANDLE hPrinter,
1394 _In_ DWORD fdwFlags,
1395 _In_ DWORD fdwOptions,
1396 _In_ HANDLE hNotify,
1397 _In_opt_ PVOID pvReserved0,
1398 _Out_opt_ PVOID pvReserved1);
1399
1400 BOOL WINAPI ProvidorFindClosePrinterChangeNotification(_In_ HANDLE hPrinter);
1401
1402 /* Spooler */
1403 BOOL WINAPI SpoolerFindFirstPrinterChangeNotification(HANDLE hPrinter,
1404 DWORD fdwFlags,
1405 DWORD fdwOptions,
1406 PHANDLE phEvent,
1407 PVOID pPrinterNotifyOptions,
1408 PVOID pvReserved);
1409
1410 BOOL
1411 WINAPI
1412 SpoolerFindNextPrinterChangeNotification(
1413 _In_ HANDLE hPrinter,
1414 _Out_ LPDWORD pfdwChange,
1415 _In_opt_ LPVOID pPrinterNotifyOptions,
1416 _Inout_opt_ LPVOID *ppPrinterNotifyInfo);
1417
1418 VOID WINAPI SpoolerFreePrinterNotifyInfo(_In_ PPRINTER_NOTIFY_INFO pInfo);
1419 BOOL WINAPI SpoolerFindClosePrinterChangeNotification(_In_ HANDLE hPrinter);
1420
1421 /* Port monitor / Language monitor / Print monitor */
1422
1423 LPMONITOR2
1424 WINAPI
1425 InitializePrintMonitor2(
1426 _In_ PMONITORINIT pMonitorInit,
1427 _Out_ PHANDLE phMonitor);
1428
1429 PMONITORUI WINAPI InitializePrintMonitorUI(VOID);
1430 LPMONITOREX WINAPI InitializePrintMonitor(_In_ LPWSTR pRegistryRoot);
1431
1432 BOOL
1433 WINAPI
1434 InitializeMonitorEx(
1435 _In_ LPWSTR pRegistryRoot,
1436 _Out_ LPMONITOR pMonitor);
1437
1438 #if (NTDDI_VERSION >= NTDDI_WINXP)
1439
1440 PBIDI_RESPONSE_CONTAINER
1441 WINAPI
1442 RouterAllocBidiResponseContainer(
1443 _In_ DWORD Count);
1444
1445 PVOID WINAPI RouterAllocBidiMem(_In_ size_t NumBytes);
1446
1447 DWORD
1448 WINAPI
1449 RouterFreeBidiResponseContainer(
1450 _In_ PBIDI_RESPONSE_CONTAINER pData);
1451
1452 VOID WINAPI RouterFreeBidiMem(_In_ PVOID pMemPointer);
1453
1454 BOOL
1455 WINAPI
1456 SplPromptUIInUsersSession(
1457 _In_ HANDLE hPrinter,
1458 _In_ DWORD JobId,
1459 _In_ PSHOWUIPARAMS pUIParams,
1460 _Out_ DWORD *pResponse);
1461
1462 DWORD
1463 WINAPI
1464 SplIsSessionZero(
1465 _In_ HANDLE hPrinter,
1466 _In_ DWORD JobId,
1467 _Out_ BOOL *pIsSessionZero);
1468
1469 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1470
1471 #if (NTDDI_VERSION >= NTDDI_WS03)
1472 BOOL
1473 WINAPI
1474 GetJobAttributes(
1475 _In_ LPWSTR pPrinterName,
1476 _In_ LPDEVMODEW pDevmode,
1477 _Out_ PATTRIBUTE_INFO_3 pAttributeInfo);
1478 #endif
1479
1480 #if (NTDDI_VERSION >= NTDDI_VISTA)
1481
1482 #define FILL_WITH_DEFAULTS 0x1
1483
1484 BOOL
1485 WINAPI
1486 GetJobAttributesEx(
1487 _In_ LPWSTR pPrinterName,
1488 _In_ LPDEVMODEW pDevmode,
1489 _In_ DWORD dwLevel,
1490 _Out_writes_bytes_(nSize) LPBYTE pAttributeInfo,
1491 _In_ DWORD nSize,
1492 _In_ DWORD dwFlags);
1493
1494 BOOL
1495 WINAPI
1496 SpoolerRefreshPrinterChangeNotification(
1497 _In_ HANDLE hPrinter,
1498 _In_ DWORD dwColor,
1499 _In_ PPRINTER_NOTIFY_OPTIONS pOptions,
1500 _Inout_opt_ PPRINTER_NOTIFY_INFO *ppInfo);
1501
1502 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1503
1504 /* FIXME : The following declarations are not present in the official header */
1505
1506 BOOL WINAPI OpenPrinterToken(PHANDLE phToken);
1507 BOOL WINAPI SetPrinterToken(HANDLE hToken);
1508 BOOL WINAPI ClosePrinterToken(HANDLE hToken);
1509 BOOL WINAPI InstallPrintProcessor(HWND hWnd);
1510
1511 #ifdef __cplusplus
1512 }
1513 #endif
1514
1515 #endif /* _WINSPLP_ */