4 * This file is part of the ReactOS PSDK package.
7 * Created by Amine Khaldi.
9 * THIS SOFTWARE IS NOT COPYRIGHTED
11 * This source code is offered for use in the public domain. You may
12 * use, modify or distribute it freely.
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.
30 #if (STRICT && (NTDDI_VERSION >= NTDDI_VISTA))
31 #define HKEYMONITOR HKEY
33 #define HKEYMONITOR HANDLE
36 #define PRINTER_NOTIFY_STATUS_ENDPOINT 1
37 #define PRINTER_NOTIFY_STATUS_POLL 2
38 #define PRINTER_NOTIFY_STATUS_INFO 4
40 #define ROUTER_UNKNOWN 0
41 #define ROUTER_SUCCESS 1
42 #define ROUTER_STOP_ROUTING 2
44 #if (NTDDI_VERSION >= NTDDI_WINXP)
45 #define MONITOR2_SIZE_WIN2K (sizeof(DWORD) + (sizeof(PVOID)*18))
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
54 #define COPYFILE_FLAG_CLIENT_SPOOLER 0x00000001
55 #define COPYFILE_FLAG_SERVER_SPOOLER 0x00000002
57 #define PRINTER_NOTIFY_INFO_DATA_COMPACT 1
59 typedef struct _PRINTER_NOTIFY_INIT
{
63 } PRINTER_NOTIFY_INIT
, *LPPRINTER_NOTIFY_INIT
, *PPRINTER_NOTIFY_INIT
;
65 typedef struct _SPLCLIENT_INFO_1
{
72 WORD wProcessorArchitecture
;
73 } SPLCLIENT_INFO_1
, *LPSPLCLIENT_INFO_1
, *PSPLCLIENT_INFO_1
;
75 typedef struct _SPLCLIENT_INFO_2_V1
{
76 ULONG_PTR hSplPrinter
;
77 } SPLCLIENT_INFO_2_W2K
;
79 typedef struct _SPLCLIENT_INFO_2_V2
{
85 } SPLCLIENT_INFO_2_WINXP
;
87 typedef struct _SPLCLIENT_INFO_2_V3
{
89 } SPLCLIENT_INFO_2_LONGHORN
;
91 typedef struct _PRINTPROVIDOR
{
94 (WINAPI
*fpOpenPrinter
)(
95 _In_opt_ PWSTR lpPrinterName
,
96 _Out_ HANDLE
*phPrinter
,
97 _In_opt_ PPRINTER_DEFAULTSW pDefault
);
101 _In_ HANDLE hPrinter
,
104 _In_reads_opt_(_Inexpressible_(0)) LPBYTE pJob
,
109 _In_ HANDLE hPrinter
,
112 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pJob
,
114 _Out_ LPDWORD pcbNeeded
);
117 (WINAPI
*fpEnumJobs
)(
118 _In_ HANDLE hPrinter
,
122 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pJob
,
124 _Out_ LPDWORD pcbNeeded
,
125 _Out_ LPDWORD pcReturned
);
128 (WINAPI
*fpAddPrinter
)(
129 _In_opt_ LPWSTR pName
,
131 _In_reads_(_Inexpressible_(0)) LPBYTE pPrinter
);
133 BOOL (WINAPI
*fpDeletePrinter
)(_In_ HANDLE hPrinter
);
136 (WINAPI
*fpSetPrinter
)(
137 _In_ HANDLE hPrinter
,
139 _In_reads_(_Inexpressible_(0)) LPBYTE pPrinter
,
143 (WINAPI
*fpGetPrinter
)(
144 _In_ HANDLE hPrinter
,
146 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pPrinter
,
148 _Out_ LPDWORD pcbNeeded
);
151 (WINAPI
*fpEnumPrinters
)(
153 _In_opt_ LPWSTR lpszName
,
155 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE lpbPrinters
,
157 _Out_ LPDWORD lpdwNeeded
,
158 _Out_ LPDWORD lpdwReturned
);
161 (WINAPI
*fpAddPrinterDriver
)(
162 _In_opt_ LPWSTR pName
,
164 _In_reads_(_Inexpressible_(0)) LPBYTE pDriverInfo
);
167 (WINAPI
*fpEnumPrinterDrivers
)(
168 _In_opt_ LPWSTR pName
,
169 _In_opt_ LPWSTR pEnvironment
,
171 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pDriverInfo
,
173 _Out_ LPDWORD pcbNeeded
,
174 _Out_ LPDWORD pcbReturned
);
177 (WINAPI
*fpGetPrinterDriver
)(
178 _In_ HANDLE hPrinter
,
179 _In_opt_ LPWSTR pEnvironment
,
181 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pDriverInfo
,
183 _Out_ LPDWORD pcbNeeded
);
186 (WINAPI
*fpGetPrinterDriverDirectory
)(
187 _In_opt_ LPWSTR pName
,
188 _In_opt_ LPWSTR pEnvironment
,
190 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pDriverDirectory
,
192 _Out_ LPDWORD pcbNeeded
);
195 (WINAPI
*fpDeletePrinterDriver
)(
196 _In_opt_ LPWSTR pName
,
197 _In_opt_ LPWSTR pEnvironment
,
198 _In_ LPWSTR pDriverName
);
201 (WINAPI
*fpAddPrintProcessor
)(
202 _In_opt_ LPWSTR pName
,
203 _In_opt_ LPWSTR pEnvironment
,
204 _In_ LPWSTR pPathName
,
205 _In_ LPWSTR pPrintProcessorName
);
208 (WINAPI
*fpEnumPrintProcessors
)(
209 _In_opt_ LPWSTR pName
,
210 _In_opt_ LPWSTR pEnvironment
,
212 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pPrintProcessorInfo
,
214 _Out_ LPDWORD pcbNeeded
,
215 _Out_ LPDWORD pcbReturned
);
218 (WINAPI
*fpGetPrintProcessorDirectory
)(
219 _In_opt_ LPWSTR pName
,
220 _In_opt_ LPWSTR pEnvironment
,
222 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pPrintProcessorInfo
,
224 _In_ LPDWORD pcbNeeded
);
227 (WINAPI
*fpDeletePrintProcessor
)(
228 _In_opt_ LPWSTR pName
,
229 _In_opt_ LPWSTR pEnvironment
,
230 _In_ LPWSTR pPrintProcessorName
);
233 (WINAPI
*fpEnumPrintProcessorDatatypes
)(
234 _In_opt_ LPWSTR pName
,
235 _In_ LPWSTR pPrintProcessorName
,
237 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pDatatypes
,
239 _Out_ LPDWORD pcbNeeded
,
240 _Out_ LPDWORD pcbReturned
);
243 (WINAPI
*fpStartDocPrinter
)(
244 _In_ HANDLE hPrinter
,
246 _In_reads_(_Inexpressible_(0)) LPBYTE pDocInfo
);
248 BOOL (WINAPI
*fpStartPagePrinter
)(_In_ HANDLE hPrinter
);
251 (WINAPI
*fpWritePrinter
)(
252 _In_ HANDLE hPrinter
,
253 _In_reads_bytes_(cbBuf
) LPVOID pBuf
,
255 _Out_ LPDWORD pcWritten
);
257 BOOL (WINAPI
*fpEndPagePrinter
)(_In_ HANDLE hPrinter
);
259 BOOL (WINAPI
*fpAbortPrinter
)(_In_ HANDLE hPrinter
);
262 (WINAPI
*fpReadPrinter
)(
263 _In_ HANDLE hPrinter
,
264 _Out_writes_bytes_to_opt_(cbBuf
, *pNoBytesRead
) LPVOID pBuf
,
266 _Out_ LPDWORD pNoBytesRead
);
268 BOOL (WINAPI
*fpEndDocPrinter
)(_In_ HANDLE hPrinter
);
272 _In_ HANDLE hPrinter
,
274 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pData
,
276 _Out_ LPDWORD pcbNeeded
);
278 BOOL (WINAPI
*fpScheduleJob
)(_In_ HANDLE hPrinter
, _In_ DWORD JobID
);
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
,
287 _Out_ LPDWORD pcbNeeded
);
290 (WINAPI
*fpSetPrinterData
)(
291 _In_ HANDLE hPrinter
,
292 _In_ LPWSTR pValueName
,
294 _In_reads_bytes_(cbData
) LPBYTE pData
,
298 (WINAPI
*fpWaitForPrinterChange
)(
299 _In_ HANDLE hPrinter
,
302 BOOL (WINAPI
*fpClosePrinter
)(_In_ HANDLE phPrinter
);
306 _In_ HANDLE hPrinter
,
308 _In_reads_(_Inexpressible_(0)) LPBYTE pForm
);
310 BOOL (WINAPI
*fpDeleteForm
)(_In_ HANDLE hPrinter
, _In_ LPWSTR pFormName
);
314 _In_ HANDLE hPrinter
,
315 _In_ LPWSTR pFormName
,
317 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pForm
,
319 _Out_ LPDWORD pcbNeeded
);
323 _In_ HANDLE hPrinter
,
324 _In_ LPWSTR pFormName
,
326 _In_reads_(_Inexpressible_(0)) LPBYTE pForm
);
329 (WINAPI
*fpEnumForms
)(
330 _In_ HANDLE hPrinter
,
332 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pForm
,
334 _Out_ LPDWORD pcbNeeded
,
335 _Out_ LPDWORD pcReturned
);
338 (WINAPI
*fpEnumMonitors
)(
339 _In_opt_ LPWSTR pName
,
341 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pMonitors
,
343 _Out_ LPDWORD pcbNeeded
,
344 _Out_ LPDWORD pcReturned
);
347 (WINAPI
*fpEnumPorts
)(
348 _In_opt_ LPWSTR pName
,
350 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pPorts
,
352 _Out_ LPDWORD pcbNeeded
,
353 _Out_ LPDWORD pcReturned
);
357 _In_opt_ LPWSTR pName
,
359 _In_ LPWSTR pMonitorName
);
362 (WINAPI
*fpConfigurePort
)(
363 _In_opt_ LPWSTR pName
,
365 _In_ LPWSTR pPortName
);
368 (WINAPI
*fpDeletePort
)(
369 _In_opt_ LPWSTR pName
,
371 _In_ LPWSTR pPortName
);
374 (WINAPI
*fpCreatePrinterIC
)(
375 _In_ HANDLE hPrinter
,
376 _In_opt_ LPDEVMODEW pDevMode
);
379 (WINAPI
*fpPlayGdiScriptOnPrinterIC
)(
380 _In_ HANDLE hPrinterIC
,
381 _In_reads_bytes_(cIn
) LPBYTE pIn
,
383 _Out_writes_bytes_(cOut
) LPBYTE pOut
,
387 BOOL (WINAPI
*fpDeletePrinterIC
)(_In_ HANDLE hPrinterIC
);
389 BOOL (WINAPI
*fpAddPrinterConnection
)(_In_ LPWSTR pName
);
391 BOOL (WINAPI
*fpDeletePrinterConnection
)(_In_ LPWSTR pName
);
394 (WINAPI
*fpPrinterMessageBox
)(
395 _In_ HANDLE hPrinter
,
399 _In_ LPWSTR pCaption
,
403 (WINAPI
*fpAddMonitor
)(
404 _In_opt_ LPWSTR pName
,
406 _In_reads_(_Inexpressible_(0)) LPBYTE pMonitors
);
409 (WINAPI
*fpDeleteMonitor
)(
411 _In_opt_ LPWSTR pEnvironment
,
412 _In_ LPWSTR pMonitorName
);
415 (WINAPI
*fpResetPrinter
)(
416 _In_ HANDLE hPrinter
,
417 _In_ LPPRINTER_DEFAULTSW pDefault
);
420 (WINAPI
*fpGetPrinterDriverEx
)(
421 _In_ HANDLE hPrinter
,
422 _In_opt_ LPWSTR pEnvironment
,
424 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pDriverInfo
,
426 _Out_ LPDWORD pcbNeeded
,
427 _In_ DWORD dwClientMajorVersion
,
428 _In_ DWORD dwClientMinorVersion
,
429 _Out_ PDWORD pdwServerMajorVersion
,
430 _Out_ PDWORD pdwServerMinorVersion
);
432 HANDLE (WINAPI
*fpFindFirstPrinterChangeNotification
)(HANDLE hPrinter
,
435 LPVOID pPrinterNotifyOptions
);
437 BOOL (WINAPI
*fpFindClosePrinterChangeNotification
)(_In_ HANDLE hChange
);
440 (WINAPI
*fpAddPortEx
)(
441 _In_opt_ LPWSTR pName
,
443 _In_reads_(_Inexpressible_(0)) LPBYTE lpBuffer
,
444 _In_ LPWSTR lpMonitorName
);
446 BOOL (WINAPI
*fpShutDown
)(_In_opt_ LPVOID pvReserved
);
449 (WINAPI
*fpRefreshPrinterChangeNotification
)(
450 _In_ HANDLE hPrinter
,
452 _In_opt_ PVOID pvReserved
,
453 _In_ PVOID pPrinterNotifyInfo
);
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
,
464 (WINAPI
*fpAddPrinterEx
)(
465 _In_opt_ LPWSTR pName
,
467 _In_reads_(_Inexpressible_(0)) LPBYTE pPrinter
,
468 _In_reads_opt_(_Inexpressible_(0)) LPBYTE pClientInfo
,
469 _In_ DWORD ClientInfoLevel
);
473 _In_opt_ LPWSTR pName
,
474 _In_ LPWSTR pPortName
,
476 _In_reads_(_Inexpressible_(0)) LPBYTE pPortInfo
);
479 (WINAPI
*fpEnumPrinterData
)(
480 _In_ HANDLE hPrinter
,
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
,
488 _Out_ LPDWORD pcbData
);
491 (WINAPI
*fpDeletePrinterData
)(
492 _In_ HANDLE hPrinter
,
493 _In_ LPWSTR pValueName
);
496 (WINAPI
*fpClusterSplOpen
)(
497 _In_ LPCWSTR pszServer
,
498 _In_ LPCWSTR pszResource
,
499 _Out_ PHANDLE phSpooler
,
500 _In_ LPCWSTR pszName
,
501 _In_ LPCWSTR pszAddress
);
503 DWORD (WINAPI
*fpClusterSplClose
)(_In_ HANDLE hSpooler
);
505 DWORD (WINAPI
*fpClusterSplIsAlive
)(_In_ HANDLE hSpooler
);
508 (WINAPI
*fpSetPrinterDataEx
)(
509 _In_ HANDLE hPrinter
,
510 _In_ LPCWSTR pKeyName
,
511 _In_ LPCWSTR pValueName
,
513 _In_reads_bytes_(cbData
) LPBYTE pData
,
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
,
524 _Out_ LPDWORD pcbNeeded
);
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
);
536 (WINAPI
*fpEnumPrinterKey
)(
537 _In_ HANDLE hPrinter
,
538 _In_ LPCWSTR pKeyName
,
539 _Out_writes_bytes_to_opt_(cbSubkey
, *pcbSubkey
) LPWSTR pSubkey
,
541 _Out_ LPDWORD pcbSubkey
);
544 (WINAPI
*fpDeletePrinterDataEx
)(
545 _In_ HANDLE hPrinter
,
546 _In_ LPCWSTR pKeyName
,
547 _In_ LPCWSTR pValueName
);
550 (WINAPI
*fpDeletePrinterKey
)(
551 _In_ HANDLE hPrinter
,
552 _In_ LPCWSTR pKeyName
);
555 (WINAPI
*fpSeekPrinter
)(
556 _In_ HANDLE hPrinter
,
557 _In_ LARGE_INTEGER liDistanceToMove
,
558 _Out_ PLARGE_INTEGER pliNewPointer
,
559 _In_ DWORD dwMoveMethod
,
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
);
571 (WINAPI
*fpAddPerMachineConnection
)(
572 _In_opt_ LPCWSTR pServer
,
573 _In_ LPCWSTR pPrinterName
,
574 _In_ LPCWSTR pPrintServer
,
575 _In_ LPCWSTR pProvider
);
578 (WINAPI
*fpDeletePerMachineConnection
)(
579 _In_opt_ LPCWSTR pServer
,
580 _In_ LPCWSTR pPrinterName
);
583 (WINAPI
*fpEnumPerMachineConnections
)(
584 _In_opt_ LPCWSTR pServer
,
585 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pPrinterEnum
,
587 _Out_ LPDWORD pcbNeeded
,
588 _Out_ LPDWORD pcReturned
);
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
);
602 (WINAPI
*fpAddPrinterDriverEx
)(
603 _In_opt_ LPWSTR pName
,
605 _In_reads_(_Inexpressible_(0)) LPBYTE pDriverInfo
,
606 _In_ DWORD dwFileCopyFlags
);
609 (WINAPI
*fpSplReadPrinter
)(
610 _In_ HANDLE hPrinter
,
611 _Out_writes_bytes_(cbBuf
) LPBYTE
*pBuf
,
614 BOOL (WINAPI
*fpDriverUnloadComplete
)(_In_ LPWSTR pDriverFile
);
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
);
624 BOOL (WINAPI
*fpCommitSpoolData
)(_In_ HANDLE hPrinter
, _In_ DWORD cbCommit
);
626 BOOL (WINAPI
*fpCloseSpoolFileHandle
)(_In_ HANDLE hPrinter
);
629 (WINAPI
*fpFlushPrinter
)(
630 _In_ HANDLE hPrinter
,
631 _In_reads_bytes_(cbBuf
) LPBYTE pBuf
,
633 _Out_ LPDWORD pcWritten
,
637 (WINAPI
*fpSendRecvBidiData
)(
639 _In_ LPCWSTR pAction
,
640 _In_ LPBIDI_REQUEST_CONTAINER pReqData
,
641 _Outptr_ LPBIDI_RESPONSE_CONTAINER
*ppResData
);
643 BOOL (WINAPI
*fpAddDriverCatalog
)(HANDLE hPrinter
, DWORD dwLevel
,
644 VOID
*pvDriverInfCatInfo
, DWORD dwCatalogCopyFlags
);
645 } PRINTPROVIDOR
, *LPPRINTPROVIDOR
;
647 typedef struct _PRINTPROCESSOROPENDATA
{
651 LPWSTR pDocumentName
;
655 } PRINTPROCESSOROPENDATA
, *LPPRINTPROCESSOROPENDATA
, *PPRINTPROCESSOROPENDATA
;
657 typedef struct _MONITORREG
{
661 (WINAPI
*fpCreateKey
)(
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
);
674 _In_ LPCWSTR pszSubKey
,
675 _In_ REGSAM samDesired
,
676 _Out_ PHANDLE phkResult
,
677 _In_ HANDLE hSpooler
);
679 LONG (WINAPI
*fpCloseKey
)(_In_ HANDLE hcKey
, _In_ HANDLE hSpooler
);
682 (WINAPI
*fpDeleteKey
)(
684 _In_ LPCWSTR pszSubKey
,
685 _In_ HANDLE hSpooler
);
691 _Inout_updates_to_(*pcchName
, *pcchName
) LPWSTR pszName
,
692 _Inout_ PDWORD pcchName
,
693 _Out_opt_ PFILETIME pftLastWriteTime
,
694 _In_ HANDLE hSpooler
);
697 (WINAPI
*fpQueryInfoKey
)(
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
);
709 (WINAPI
*fpSetValue
)(
711 _In_ LPCWSTR pszValue
,
713 _In_reads_bytes_(cbData
) const BYTE
*pData
,
715 _In_ HANDLE hSpooler
);
718 (WINAPI
*fpDeleteValue
)(
720 _In_ LPCWSTR pszValue
,
721 _In_ HANDLE hSpooler
);
724 (WINAPI
*fpEnumValue
)(
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
);
735 (WINAPI
*fpQueryValue
)(
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
);
743 } MONITORREG
, *PMONITORREG
;
745 typedef struct _MONITORINIT
{
748 HKEYMONITOR hckRegistryRoot
;
749 PMONITORREG pMonitorReg
;
751 LPCWSTR pszServerName
;
752 } MONITORINIT
, *PMONITORINIT
;
754 typedef struct _MONITOR
{
757 (WINAPI
*pfnEnumPorts
)(
758 _In_opt_ LPWSTR pName
,
760 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pPorts
,
762 _Out_ LPDWORD pcbNeeded
,
763 _Out_ LPDWORD pcReturned
);
765 BOOL (WINAPI
*pfnOpenPort
)(_In_ LPWSTR pName
, _Out_ PHANDLE pHandle
);
768 (WINAPI
*pfnOpenPortEx
)(
769 _In_ LPWSTR pPortName
,
770 _In_ LPWSTR pPrinterName
,
771 _Out_ PHANDLE pHandle
,
772 _In_
struct _MONITOR
*pMonitor
);
775 (WINAPI
*pfnStartDocPort
)(
777 _In_ LPWSTR pPrinterName
,
780 _In_reads_(_Inexpressible_(0)) LPBYTE pDocInfo
);
783 (WINAPI
*pfnWritePort
)(
785 _In_reads_bytes_(cbBuf
) LPBYTE pBuffer
,
787 _Out_ LPDWORD pcbWritten
);
790 (WINAPI
*pfnReadPort
)(
792 _Out_writes_bytes_to_(cbBuffer
, *pcbRead
) LPBYTE pBuffer
,
794 _Out_ LPDWORD pcbRead
);
796 BOOL (WINAPI
*pfnEndDocPort
)(_In_ HANDLE hPort
);
798 BOOL (WINAPI
*pfnClosePort
)(_In_ HANDLE hPort
);
801 (WINAPI
*pfnAddPort
)(
804 _In_ LPWSTR pMonitorName
);
807 (WINAPI
*pfnAddPortEx
)(
810 _In_reads_(_Inexpressible_(0)) LPBYTE lpBuffer
,
811 _In_ LPWSTR lpMonitorName
);
814 (WINAPI
*pfnConfigurePort
)(
817 _In_ LPWSTR pPortName
);
820 (WINAPI
*pfnDeletePort
)(
823 _In_ LPWSTR pPortName
);
826 (WINAPI
*pfnGetPrinterDataFromPort
)(
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
);
837 (WINAPI
*pfnSetPortTimeOuts
)(
839 _In_ LPCOMMTIMEOUTS lpCTO
,
840 _In_ DWORD reserved
);
843 (WINAPI
*pfnXcvOpenPort
)(
844 _In_ LPCWSTR pszObject
,
845 _In_ ACCESS_MASK GrantedAccess
,
846 _Out_ PHANDLE phXcv
);
849 (WINAPI
*pfnXcvDataPort
)(
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
);
858 BOOL (WINAPI
*pfnXcvClosePort
)(_In_ HANDLE hXcv
);
860 } MONITOR
, *LPMONITOR
;
862 typedef struct _MONITOREX
{
865 } MONITOREX
, *LPMONITOREX
;
867 typedef struct _MONITOR2
{
871 (WINAPI
*pfnEnumPorts
)(
872 _In_ HANDLE hMonitor
,
873 _In_opt_ LPWSTR pName
,
875 _Out_writes_bytes_to_opt_(cbBuf
, *pcbNeeded
) LPBYTE pPorts
,
877 _Out_ LPDWORD pcbNeeded
,
878 _Out_ LPDWORD pcReturned
);
881 (WINAPI
*pfnOpenPort
)(
882 _In_ HANDLE hMonitor
,
884 _Out_ PHANDLE pHandle
);
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
);
896 (WINAPI
*pfnStartDocPort
)(
898 _In_ LPWSTR pPrinterName
,
901 _In_reads_(_Inexpressible_(0)) LPBYTE pDocInfo
);
904 (WINAPI
*pfnWritePort
)(
906 _In_reads_bytes_(cbBuf
) LPBYTE pBuffer
,
908 _Out_ LPDWORD pcbWritten
);
911 (WINAPI
*pfnReadPort
)(
913 _Out_writes_bytes_to_opt_(cbBuffer
, *pcbRead
) LPBYTE pBuffer
,
915 _Out_ LPDWORD pcbRead
);
917 BOOL (WINAPI
*pfnEndDocPort
)(_In_ HANDLE hPort
);
919 BOOL (WINAPI
*pfnClosePort
)(_In_ HANDLE hPort
);
922 (WINAPI
*pfnAddPort
)(
923 _In_ HANDLE hMonitor
,
926 _In_ LPWSTR pMonitorName
);
929 (WINAPI
*pfnAddPortEx
)(
930 _In_ HANDLE hMonitor
,
933 _In_reads_(_Inexpressible_(0)) LPBYTE lpBuffer
,
934 _In_ LPWSTR lpMonitorName
);
937 (WINAPI
*pfnConfigurePort
)(
938 _In_ HANDLE hMonitor
,
941 _In_ LPWSTR pPortName
);
944 (WINAPI
*pfnDeletePort
)(
945 _In_ HANDLE hMonitor
,
948 _In_ LPWSTR pPortName
);
951 (WINAPI
*pfnGetPrinterDataFromPort
)(
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
);
962 (WINAPI
*pfnSetPortTimeOuts
)(
964 _In_ LPCOMMTIMEOUTS lpCTO
,
965 _In_ DWORD reserved
);
968 (WINAPI
*pfnXcvOpenPort
)(
969 _In_ HANDLE hMonitor
,
970 _In_ LPCWSTR pszObject
,
971 _In_ ACCESS_MASK GrantedAccess
,
972 _Out_ PHANDLE phXcv
);
975 (WINAPI
*pfnXcvDataPort
)(
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
);
984 BOOL (WINAPI
*pfnXcvClosePort
)(_In_ HANDLE hXcv
);
986 VOID (WINAPI
*pfnShutdown
)(_In_ HANDLE hMonitor
);
988 #if (NTDDI_VERSION >= NTDDI_WINXP)
990 (WINAPI
*pfnSendRecvBidiDataFromPort
)(
992 _In_ DWORD dwAccessBit
,
993 _In_ LPCWSTR pAction
,
994 _In_ PBIDI_REQUEST_CONTAINER pReqData
,
995 _Outptr_ PBIDI_RESPONSE_CONTAINER
*ppResData
);
998 #if (NTDDI_VERSION >= NTDDI_WIN7)
1001 (WINAPI
*pfnNotifyUsedPorts
)(
1002 _In_ HANDLE hMonitor
,
1004 _In_reads_(cPorts
) PCWSTR
*ppszPorts
);
1007 (WINAPI
*pfnNotifyUnusedPorts
)(
1008 _In_ HANDLE hMonitor
,
1010 _In_reads_(cPorts
) PCWSTR
*ppszPorts
);
1014 } MONITOR2
, *LPMONITOR2
, *PMONITOR2
;
1016 typedef struct _MONITORUI
{
1017 DWORD dwMonitorUISize
;
1020 (WINAPI
*pfnAddPortUI
)(
1021 _At_(return, _Success_(return != 0)) _In_opt_ PCWSTR pszServer
,
1023 _In_ PCWSTR pszPortNameIn
,
1024 _Out_opt_ PWSTR
*ppszPortNameOut
);
1027 (WINAPI
*pfnConfigurePortUI
)(
1028 _In_opt_ PCWSTR pName
,
1030 _In_ PCWSTR pPortName
);
1033 (WINAPI
*pfnDeletePortUI
)(
1034 _In_opt_ PCWSTR pszServer
,
1036 _In_ PCWSTR pszPortName
);
1038 } MONITORUI
, *PMONITORUI
;
1040 #if (NTDDI_VERSION >= NTDDI_WINXP)
1053 } MESSAGEBOX_PARAMS
, *PMESSAGEBOX_PARAMS
;
1057 MESSAGEBOX_PARAMS MessageBoxParams
;
1058 } SHOWUIPARAMS
, *PSHOWUIPARAMS
;
1060 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
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) */
1080 #if (NTDDI_VERSION >= NTDDI_VISTA)
1083 (CALLBACK
*ROUTER_NOTIFY_CALLBACK
)(
1084 _In_ DWORD dwCommand
,
1085 _In_ PVOID pContext
,
1087 _In_ PPRINTER_NOTIFY_INFO pNofityInfo
,
1088 _In_ DWORD fdwFlags
,
1089 _Out_ PDWORD pdwResult
);
1091 typedef enum _NOTIFICATION_CALLBACK_COMMANDS
{
1092 NOTIFICATION_COMMAND_NOTIFY
,
1093 NOTIFICATION_COMMAND_CONTEXT_ACQUIRE
,
1094 NOTIFICATION_COMMAND_CONTEXT_RELEASE
1095 } NOTIFICATION_CALLBACK_COMMANDS
;
1097 typedef struct _NOTIFICATION_CONFIG_1
{
1100 ROUTER_NOTIFY_CALLBACK pfnNotifyCallback
;
1102 } NOTIFICATION_CONFIG_1
, *PNOTIFICATION_CONFIG_1
;
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
;
1111 typedef struct _SPLCLIENT_INFO_3
{
1118 DWORD dwMajorVersion
;
1119 DWORD dwMinorVersion
;
1120 WORD wProcessorArchitecture
;
1122 } SPLCLIENT_INFO_3
, *PSPLCLIENT_INFO_3
, *LPSPLCLIENT_INFO_3
;
1124 #ifndef __ATTRIBUTE_INFO_4__
1125 #define __ATTRIBUTE_INFO_4__
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
;
1145 #define REVERSE_PAGES_FOR_REVERSE_DUPLEX (0x00000001)
1146 #define DONT_SEND_EXTRA_PAGES_FOR_DUPLEX (0x00000001 << 1)
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)
1153 #define BOOKLET_EDGE_LEFT 0x00000000
1154 #define BOOKLET_EDGE_RIGHT 0x00000001
1156 #endif /* __ATTRIBUTE_INFO_4__ */
1158 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
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
;
1165 typedef SPLCLIENT_INFO_2_LONGHORN SPLCLIENT_INFO_2
, *PSPLCLIENT_INFO_2
, *LPSPLCLIENT_INFO_2
;
1166 #endif /* (OSVER(NTDDI_VERSION) == NTDDI_W2K) */
1170 InitializePrintProvidor(
1171 _Out_writes_bytes_(cbPrintProvidor
) LPPRINTPROVIDOR pPrintProvidor
,
1172 _In_ DWORD cbPrintProvidor
,
1173 _In_opt_ LPWSTR pFullRegistryPath
);
1178 _In_ LPWSTR pPrinterName
,
1179 _In_ PPRINTPROCESSOROPENDATA pPrintProcessorOpenData
);
1183 PrintDocumentOnPrintProcessor(
1184 _In_ HANDLE hPrintProcessor
,
1185 _In_ LPWSTR pDocumentName
);
1189 ClosePrintProcessor(
1190 _Inout_ HANDLE hPrintProcessor
);
1194 ControlPrintProcessor(
1195 _In_ HANDLE hPrintProcessor
,
1196 _In_ DWORD Command
);
1200 GetPrintProcessorCapabilities(
1201 _In_ LPTSTR pValueName
,
1202 _In_ DWORD dwAttributes
,
1203 _Out_writes_bytes_(nSize
) LPBYTE pData
,
1205 _Out_ LPDWORD pcbNeeded
);
1210 _In_ LPWSTR pRegistryRoot
);
1216 _Out_ PHANDLE pHandle
);
1222 _In_reads_bytes_(cbBuf
) LPBYTE pBuffer
,
1224 _Out_ LPDWORD pcbWritten
);
1230 _Out_writes_bytes_(cbBuffer
) LPBYTE pBuffer
,
1231 _In_ DWORD cbBuffer
,
1232 _Out_ LPDWORD pcbRead
);
1242 _In_ LPCWSTR pszObject
,
1243 _In_ ACCESS_MASK GrantedAccess
,
1244 _Out_ PHANDLE phXcv
);
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
);
1262 _Success_(return != 0)
1266 _In_opt_ PCWSTR pszServer
,
1268 _In_ PCWSTR pszMonitorNameIn
,
1269 _Out_opt_ PWSTR
*ppszPortNameOut
);
1274 _In_ PCWSTR pszServer
,
1276 _In_ PCWSTR pszPortName
);
1281 _In_ PCWSTR pszServer
,
1283 _In_ PCWSTR pszPortName
);
1287 SplDeleteSpoolerPortStart(
1288 _In_ PCWSTR pPortName
);
1292 SplDeleteSpoolerPortEnd(
1294 _In_ BOOL bDeletePort
);
1298 SpoolerCopyFileEvent(
1299 _In_ LPWSTR pszPrinterName
,
1301 _In_ DWORD dwCopyFileEvent
);
1305 GenerateCopyFilePaths(
1306 _In_ LPCWSTR pszPrinterName
,
1307 _In_ LPCWSTR pszDirectory
,
1308 _In_ LPBYTE pSplClientInfo
,
1310 _Inout_updates_(*pcchSourceDirSize
) LPWSTR pszSourceDir
,
1311 _Inout_ LPDWORD pcchSourceDirSize
,
1312 _Inout_updates_(*pcchTargetDirSize
) LPWSTR pszTargetDir
,
1313 _Inout_ LPDWORD pcchTargetDirSize
,
1314 _In_ DWORD dwFlags
);
1319 _In_ HANDLE hPrinter
,
1320 _In_opt_ LPDEVMODEW pDevMode
);
1324 PlayGdiScriptOnPrinterIC(
1325 _In_ HANDLE hPrinterIC
,
1326 _In_reads_bytes_(cIn
) LPBYTE pIn
,
1328 _Out_writes_bytes_(cOut
) LPBYTE pOut
,
1332 BOOL WINAPI
DeletePrinterIC(_In_ HANDLE hPrinterIC
);
1337 _In_ HANDLE hPrinter
,
1338 _In_ LPDEVMODEW pDevMode
,
1339 _Out_ DWORD
*pResID
);
1341 HANDLE WINAPI
RevertToPrinterSelf(VOID
);
1342 BOOL WINAPI
ImpersonatePrinterClient(_In_ HANDLE hToken
);
1346 ReplyPrinterChangeNotification(
1347 _In_ HANDLE hNotify
,
1348 _In_ DWORD fdwFlags
,
1349 _Out_opt_ PDWORD pdwResult
,
1350 _In_opt_ PVOID pPrinterNotifyInfo
);
1354 ReplyPrinterChangeNotificationEx(
1355 _In_ HANDLE hNotify
,
1357 _In_ DWORD fdwFlags
,
1358 _Out_ PDWORD pdwResult
,
1359 _In_ PVOID pPrinterNotifyInfo
);
1363 PartialReplyPrinterChangeNotification(
1364 _In_ HANDLE hNotify
,
1365 _In_opt_ PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc
);
1367 PPRINTER_NOTIFY_INFO
1369 RouterAllocPrinterNotifyInfo(
1370 _In_ DWORD cPrinterNotifyInfoData
);
1372 BOOL WINAPI
RouterFreePrinterNotifyInfo(_In_opt_ PPRINTER_NOTIFY_INFO pInfo
);
1376 AppendPrinterNotifyInfoData(
1377 _In_ PPRINTER_NOTIFY_INFO pInfoDest
,
1378 _In_opt_ PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc
,
1379 _In_ DWORD fdwFlags
);
1383 CallRouterFindFirstPrinterChangeNotification(
1384 _In_ HANDLE hPrinter
,
1385 _In_ DWORD fdwFlags
,
1386 _In_ DWORD fdwOptions
,
1387 _In_ HANDLE hNotify
,
1388 _In_ PPRINTER_NOTIFY_OPTIONS pPrinterNotifyOptions
);
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
);
1400 BOOL WINAPI
ProvidorFindClosePrinterChangeNotification(_In_ HANDLE hPrinter
);
1403 BOOL WINAPI
SpoolerFindFirstPrinterChangeNotification(HANDLE hPrinter
,
1407 PVOID pPrinterNotifyOptions
,
1412 SpoolerFindNextPrinterChangeNotification(
1413 _In_ HANDLE hPrinter
,
1414 _Out_ LPDWORD pfdwChange
,
1415 _In_opt_ LPVOID pPrinterNotifyOptions
,
1416 _Inout_opt_ LPVOID
*ppPrinterNotifyInfo
);
1418 VOID WINAPI
SpoolerFreePrinterNotifyInfo(_In_ PPRINTER_NOTIFY_INFO pInfo
);
1419 BOOL WINAPI
SpoolerFindClosePrinterChangeNotification(_In_ HANDLE hPrinter
);
1421 /* Port monitor / Language monitor / Print monitor */
1425 InitializePrintMonitor2(
1426 _In_ PMONITORINIT pMonitorInit
,
1427 _Out_ PHANDLE phMonitor
);
1429 PMONITORUI WINAPI
InitializePrintMonitorUI(VOID
);
1430 LPMONITOREX WINAPI
InitializePrintMonitor(_In_ LPWSTR pRegistryRoot
);
1434 InitializeMonitorEx(
1435 _In_ LPWSTR pRegistryRoot
,
1436 _Out_ LPMONITOR pMonitor
);
1438 #if (NTDDI_VERSION >= NTDDI_WINXP)
1440 PBIDI_RESPONSE_CONTAINER
1442 RouterAllocBidiResponseContainer(
1445 PVOID WINAPI
RouterAllocBidiMem(_In_
size_t NumBytes
);
1449 RouterFreeBidiResponseContainer(
1450 _In_ PBIDI_RESPONSE_CONTAINER pData
);
1452 VOID WINAPI
RouterFreeBidiMem(_In_ PVOID pMemPointer
);
1456 SplPromptUIInUsersSession(
1457 _In_ HANDLE hPrinter
,
1459 _In_ PSHOWUIPARAMS pUIParams
,
1460 _Out_ DWORD
*pResponse
);
1465 _In_ HANDLE hPrinter
,
1467 _Out_ BOOL
*pIsSessionZero
);
1469 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1471 #if (NTDDI_VERSION >= NTDDI_WS03)
1475 _In_ LPWSTR pPrinterName
,
1476 _In_ LPDEVMODEW pDevmode
,
1477 _Out_ PATTRIBUTE_INFO_3 pAttributeInfo
);
1480 #if (NTDDI_VERSION >= NTDDI_VISTA)
1482 #define FILL_WITH_DEFAULTS 0x1
1487 _In_ LPWSTR pPrinterName
,
1488 _In_ LPDEVMODEW pDevmode
,
1490 _Out_writes_bytes_(nSize
) LPBYTE pAttributeInfo
,
1492 _In_ DWORD dwFlags
);
1496 SpoolerRefreshPrinterChangeNotification(
1497 _In_ HANDLE hPrinter
,
1499 _In_ PPRINTER_NOTIFY_OPTIONS pOptions
,
1500 _Inout_opt_ PPRINTER_NOTIFY_INFO
*ppInfo
);
1502 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1504 /* FIXME : The following declarations are not present in the official header */
1506 BOOL WINAPI
OpenPrinterToken(PHANDLE phToken
);
1507 BOOL WINAPI
SetPrinterToken(HANDLE hToken
);
1508 BOOL WINAPI
ClosePrinterToken(HANDLE hToken
);
1509 BOOL WINAPI
InstallPrintProcessor(HWND hWnd
);
1515 #endif /* _WINSPLP_ */