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.
27 #if (STRICT && (NTDDI_VERSION >= NTDDI_VISTA))
28 #define HKEYMONITOR HKEY
30 #define HKEYMONITOR HANDLE
33 #define PRINTER_NOTIFY_STATUS_ENDPOINT 1
34 #define PRINTER_NOTIFY_STATUS_POLL 2
35 #define PRINTER_NOTIFY_STATUS_INFO 4
37 #define ROUTER_UNKNOWN 0
38 #define ROUTER_SUCCESS 1
39 #define ROUTER_STOP_ROUTING 2
41 #if (NTDDI_VERSION >= NTDDI_WINXP)
42 #define MONITOR2_SIZE_WIN2K (sizeof(DWORD) + (sizeof(PVOID)*18))
45 #define COPYFILE_EVENT_SET_PRINTER_DATAEX 1
46 #define COPYFILE_EVENT_DELETE_PRINTER 2
47 #define COPYFILE_EVENT_ADD_PRINTER_CONNECTION 3
48 #define COPYFILE_EVENT_DELETE_PRINTER_CONNECTION 4
49 #define COPYFILE_EVENT_FILES_CHANGED 5
51 #define COPYFILE_FLAG_CLIENT_SPOOLER 0x00000001
52 #define COPYFILE_FLAG_SERVER_SPOOLER 0x00000002
54 #define PRINTER_NOTIFY_INFO_DATA_COMPACT 1
56 typedef struct _PRINTER_NOTIFY_INIT
{
60 } PRINTER_NOTIFY_INIT
, *LPPRINTER_NOTIFY_INIT
, *PPRINTER_NOTIFY_INIT
;
62 typedef struct _SPLCLIENT_INFO_1
{
69 WORD wProcessorArchitecture
;
70 } SPLCLIENT_INFO_1
, *LPSPLCLIENT_INFO_1
, *PSPLCLIENT_INFO_1
;
72 typedef struct _SPLCLIENT_INFO_2_V1
{
73 ULONG_PTR hSplPrinter
;
74 } SPLCLIENT_INFO_2_W2K
;
76 typedef struct _SPLCLIENT_INFO_2_V2
{
82 } SPLCLIENT_INFO_2_WINXP
;
84 typedef struct _SPLCLIENT_INFO_2_V3
{
86 } SPLCLIENT_INFO_2_LONGHORN
;
88 typedef struct _PRINTPROVIDOR
{
89 BOOL (WINAPI
*fpOpenPrinter
)(PWSTR lpPrinterName
, HANDLE
*phPrinter
,
90 PPRINTER_DEFAULTSW pDefault
);
91 BOOL (WINAPI
*fpSetJob
)(HANDLE hPrinter
, DWORD JobID
, DWORD Level
,
92 LPBYTE pJob
, DWORD Command
);
93 BOOL (WINAPI
*fpGetJob
)(HANDLE hPrinter
, DWORD JobID
, DWORD Level
,
94 LPBYTE pJob
, DWORD cbBuf
, LPDWORD pcbNeeded
);
95 BOOL (WINAPI
*fpEnumJobs
)(HANDLE hPrinter
, DWORD FirstJob
, DWORD NoJobs
,
96 DWORD Level
, LPBYTE pJob
, DWORD cbBuf
, LPDWORD pcbNeeded
,
98 HANDLE (WINAPI
*fpAddPrinter
)(LPWSTR pName
, DWORD Level
, LPBYTE pPrinter
);
99 BOOL (WINAPI
*fpDeletePrinter
)(HANDLE hPrinter
);
100 BOOL (WINAPI
*fpSetPrinter
)(HANDLE hPrinter
, DWORD Level
, LPBYTE pPrinter
,
102 BOOL (WINAPI
*fpGetPrinter
)(HANDLE hPrinter
, DWORD Level
, LPBYTE pPrinter
,
103 DWORD cbBuf
, LPDWORD pcbNeeded
);
104 BOOL (WINAPI
*fpEnumPrinters
)(DWORD dwType
, LPWSTR lpszName
, DWORD dwLevel
,
105 LPBYTE lpbPrinters
, DWORD cbBuf
, LPDWORD lpdwNeeded
,
106 LPDWORD lpdwReturned
);
107 BOOL (WINAPI
*fpAddPrinterDriver
)(LPWSTR pName
, DWORD Level
, LPBYTE pDriverInfo
);
108 BOOL (WINAPI
*fpEnumPrinterDrivers
)(LPWSTR pName
, LPWSTR pEnvironment
,
109 DWORD Level
, LPBYTE pDriverInfo
, DWORD cbBuf
,
110 LPDWORD pcbNeeded
, LPDWORD pcbReturned
);
111 BOOL (WINAPI
*fpGetPrinterDriver
)(HANDLE hPrinter
, LPWSTR pEnvironment
,
112 DWORD Level
, LPBYTE pDriverInfo
, DWORD cbBuf
,
114 BOOL (WINAPI
*fpGetPrinterDriverDirectory
)(LPWSTR pName
, LPWSTR pEnvironment
,
115 DWORD Level
, LPBYTE pDriverDirectory
,
116 DWORD cbBuf
, LPDWORD pcbNeeded
);
117 BOOL (WINAPI
*fpDeletePrinterDriver
)(LPWSTR pName
, LPWSTR pEnvironment
,
119 BOOL (WINAPI
*fpAddPrintProcessor
)(LPWSTR pName
, LPWSTR pEnvironment
,
120 LPWSTR pPathName
, LPWSTR pPrintProcessorName
);
121 BOOL (WINAPI
*fpEnumPrintProcessors
)(LPWSTR pName
, LPWSTR pEnvironment
,
122 DWORD Level
, LPBYTE pPrintProcessorInfo
,
123 DWORD cbBuf
, LPDWORD pcbNeeded
,
124 LPDWORD pcbReturned
);
125 BOOL (WINAPI
*fpGetPrintProcessorDirectory
)(LPWSTR pName
, LPWSTR pEnvironment
,
126 DWORD Level
, LPBYTE pPrintProcessorInfo
,
127 DWORD cbBuf
, LPDWORD pcbNeeded
);
128 BOOL (WINAPI
*fpDeletePrintProcessor
)(LPWSTR pName
, LPWSTR pEnvironment
,
129 LPWSTR pPrintProcessorName
);
130 BOOL (WINAPI
*fpEnumPrintProcessorDatatypes
)(LPWSTR pName
,
131 LPWSTR pPrintProcessorName
,
132 DWORD Level
, LPBYTE pDatatypes
,
133 DWORD cbBuf
, LPDWORD pcbNeeded
,
134 LPDWORD pcbReturned
);
135 DWORD (WINAPI
*fpStartDocPrinter
)(HANDLE hPrinter
, DWORD Level
, LPBYTE pDocInfo
);
136 BOOL (WINAPI
*fpStartPagePrinter
)(HANDLE hPrinter
);
137 BOOL (WINAPI
*fpWritePrinter
)(HANDLE hPrinter
, LPVOID pBuf
, DWORD cbBuf
,
139 BOOL (WINAPI
*fpEndPagePrinter
)(HANDLE hPrinter
);
140 BOOL (WINAPI
*fpAbortPrinter
)(HANDLE hPrinter
);
141 BOOL (WINAPI
*fpReadPrinter
)(HANDLE hPrinter
, LPVOID pBuf
, DWORD cbBuf
,
142 LPDWORD pNoBytesRead
);
143 BOOL (WINAPI
*fpEndDocPrinter
)(HANDLE hPrinter
);
144 BOOL (WINAPI
*fpAddJob
)(HANDLE hPrinter
, DWORD Level
, LPBYTE pData
,
145 DWORD cbBuf
, LPDWORD pcbNeeded
);
146 BOOL (WINAPI
*fpScheduleJob
)(HANDLE hPrinter
, DWORD JobID
);
147 DWORD (WINAPI
*fpGetPrinterData
)(HANDLE hPrinter
, LPWSTR pValueName
,
148 LPDWORD pType
, LPBYTE pData
, DWORD nSize
,
150 DWORD (WINAPI
*fpSetPrinterData
)(HANDLE hPrinter
, LPWSTR pValueName
,
151 DWORD Type
, LPBYTE pData
, DWORD cbData
);
152 DWORD (WINAPI
*fpWaitForPrinterChange
)(HANDLE hPrinter
, DWORD Flags
);
153 BOOL (WINAPI
*fpClosePrinter
)(HANDLE phPrinter
);
154 BOOL (WINAPI
*fpAddForm
)(HANDLE hPrinter
, DWORD Level
, LPBYTE pForm
);
155 BOOL (WINAPI
*fpDeleteForm
)(HANDLE hPrinter
, LPWSTR pFormName
);
156 BOOL (WINAPI
*fpGetForm
)(HANDLE hPrinter
, LPWSTR pFormName
, DWORD Level
,
157 LPBYTE pForm
, DWORD cbBuf
, LPDWORD pcbNeeded
);
158 BOOL (WINAPI
*fpSetForm
)(HANDLE hPrinter
, LPWSTR pFormName
, DWORD Level
,
160 BOOL (WINAPI
*fpEnumForms
)(HANDLE hPrinter
, DWORD Level
, LPBYTE pForm
,
161 DWORD cbBuf
, LPDWORD pcbNeeded
, LPDWORD pcReturned
);
162 BOOL (WINAPI
*fpEnumMonitors
)(LPWSTR pName
, DWORD Level
, LPBYTE pMonitors
,
163 DWORD cbBuf
, LPDWORD pcbNeeded
,
165 BOOL (WINAPI
*fpEnumPorts
)(LPWSTR pName
, DWORD Level
, LPBYTE pPorts
,
166 DWORD cbBuf
, LPDWORD pcbNeeded
, LPDWORD pcReturned
);
167 BOOL (WINAPI
*fpAddPort
)(LPWSTR pName
, HWND hWnd
, LPWSTR pMonitorName
);
168 BOOL (WINAPI
*fpConfigurePort
)(LPWSTR pName
, HWND hWnd
, LPWSTR pPortName
);
169 BOOL (WINAPI
*fpDeletePort
)(LPWSTR pName
, HWND hWnd
, LPWSTR pPortName
);
170 HANDLE (WINAPI
*fpCreatePrinterIC
)(HANDLE hPrinter
, LPDEVMODEW pDevMode
);
171 BOOL (WINAPI
*fpPlayGdiScriptOnPrinterIC
)(HANDLE hPrinterIC
, LPBYTE pIn
,
172 DWORD cIn
, LPBYTE pOut
, DWORD cOut
,
174 BOOL (WINAPI
*fpDeletePrinterIC
)(HANDLE hPrinterIC
);
175 BOOL (WINAPI
*fpAddPrinterConnection
)(LPWSTR pName
);
176 BOOL (WINAPI
*fpDeletePrinterConnection
)(LPWSTR pName
);
177 DWORD (WINAPI
*fpPrinterMessageBox
)(HANDLE hPrinter
, DWORD Error
, HWND hWnd
,
178 LPWSTR pText
, LPWSTR pCaption
,
180 BOOL (WINAPI
*fpAddMonitor
)(LPWSTR pName
, DWORD Level
, LPBYTE pMonitors
);
181 BOOL (WINAPI
*fpDeleteMonitor
)(LPWSTR pName
, LPWSTR pEnvironment
,
182 LPWSTR pMonitorName
);
183 BOOL (WINAPI
*fpResetPrinter
)(HANDLE hPrinter
, LPPRINTER_DEFAULTSW pDefault
);
184 BOOL (WINAPI
*fpGetPrinterDriverEx
)(HANDLE hPrinter
, LPWSTR pEnvironment
,
185 DWORD Level
, LPBYTE pDriverInfo
,
186 DWORD cbBuf
, LPDWORD pcbNeeded
,
187 DWORD dwClientMajorVersion
,
188 DWORD dwClientMinorVersion
,
189 PDWORD pdwServerMajorVersion
,
190 PDWORD pdwServerMinorVersion
);
191 HANDLE (WINAPI
*fpFindFirstPrinterChangeNotification
)(HANDLE hPrinter
,
194 LPVOID pPrinterNotifyOptions
);
195 BOOL (WINAPI
*fpFindClosePrinterChangeNotification
)(HANDLE hChange
);
196 BOOL (WINAPI
*fpAddPortEx
)(HANDLE hMonitor
, LPWSTR pName
, DWORD Level
,
197 LPBYTE lpBuffer
, LPWSTR lpMonitorName
);
198 BOOL (WINAPI
*fpShutDown
)(LPVOID pvReserved
);
199 BOOL (WINAPI
*fpRefreshPrinterChangeNotification
)(HANDLE hPrinter
,
202 PVOID pPrinterNotifyInfo
);
203 BOOL (WINAPI
*fpOpenPrinterEx
)(LPWSTR pPrinterName
, LPHANDLE phPrinter
,
204 LPPRINTER_DEFAULTSW pDefault
, LPBYTE pClientInfo
,
206 HANDLE (WINAPI
*fpAddPrinterEx
)(LPWSTR pName
, DWORD Level
, LPBYTE pPrinter
,
207 LPBYTE pClientInfo
, DWORD ClientInfoLevel
);
208 BOOL (WINAPI
*fpSetPort
)(LPWSTR pName
, LPWSTR pPortName
, DWORD dwLevel
,
210 DWORD (WINAPI
*fpEnumPrinterData
)(HANDLE hPrinter
, DWORD dwIndex
,
211 LPWSTR pValueName
, DWORD cbValueName
,
212 LPDWORD pcbValueName
, LPDWORD pType
,
213 LPBYTE pData
, DWORD cbData
, LPDWORD pcbData
);
214 DWORD (WINAPI
*fpDeletePrinterData
)(HANDLE hPrinter
, LPWSTR pValueName
);
215 DWORD (WINAPI
*fpClusterSplOpen
)(LPCWSTR pszServer
, LPCWSTR pszResource
,
216 PHANDLE phSpooler
, LPCWSTR pszName
,
218 DWORD (WINAPI
*fpClusterSplClose
)(HANDLE hSpooler
);
219 DWORD (WINAPI
*fpClusterSplIsAlive
)(HANDLE hSpooler
);
220 DWORD (WINAPI
*fpSetPrinterDataEx
)(HANDLE hPrinter
, LPCWSTR pKeyName
,
221 LPCWSTR pValueName
, DWORD Type
,
222 LPBYTE pData
, DWORD cbData
);
223 DWORD (WINAPI
*fpGetPrinterDataEx
)(HANDLE hPrinter
, LPCWSTR pKeyName
,
224 LPCWSTR pValueName
, LPDWORD pType
,
225 LPBYTE pData
, DWORD nSize
, LPDWORD pcbNeeded
);
226 DWORD (WINAPI
*fpEnumPrinterDataEx
)(HANDLE hPrinter
, LPCWSTR pKeyName
,
227 LPBYTE pEnumValues
, DWORD cbEnumValues
,
228 LPDWORD pcbEnumValues
, LPDWORD pnEnumValues
);
229 DWORD (WINAPI
*fpEnumPrinterKey
)(HANDLE hPrinter
, LPCWSTR pKeyName
,
230 LPWSTR pSubkey
, DWORD cbSubkey
, LPDWORD pcbSubkey
);
231 DWORD (WINAPI
*fpDeletePrinterDataEx
)(HANDLE hPrinter
, LPCWSTR pKeyName
,
233 DWORD (WINAPI
*fpDeletePrinterKey
)(HANDLE hPrinter
, LPCWSTR pKeyName
);
234 BOOL (WINAPI
*fpSeekPrinter
)(HANDLE hPrinter
, LARGE_INTEGER liDistanceToMove
,
235 PLARGE_INTEGER pliNewPointer
, DWORD dwMoveMethod
,
237 BOOL (WINAPI
*fpDeletePrinterDriverEx
)(LPWSTR pName
, LPWSTR pEnvironment
,
238 LPWSTR pDriverName
, DWORD dwDeleteFlag
,
240 BOOL (WINAPI
*fpAddPerMachineConnection
)(LPCWSTR pServer
,
241 LPCWSTR pPrinterName
, LPCWSTR pPrintServer
,
243 BOOL (WINAPI
*fpDeletePerMachineConnection
)(LPCWSTR pServer
,
244 LPCWSTR pPrinterName
);
245 BOOL (WINAPI
*fpEnumPerMachineConnections
)(LPCWSTR pServer
,
246 LPBYTE pPrinterEnum
, DWORD cbBuf
,
249 BOOL (WINAPI
*fpXcvData
)(HANDLE hXcv
, LPCWSTR pszDataName
, PBYTE pInputData
,
250 DWORD cbInputData
, PBYTE pOutputData
, DWORD cbOutputData
,
251 PDWORD pcbOutputNeeded
, PDWORD pdwStatus
);
252 BOOL (WINAPI
*fpAddPrinterDriverEx
)(LPWSTR pName
, DWORD Level
,
253 LPBYTE pDriverInfo
, DWORD dwFileCopyFlags
);
254 BOOL (WINAPI
*fpSplReadPrinter
)(HANDLE hPrinter
, LPBYTE
*pBuf
, DWORD cbBuf
);
255 BOOL (WINAPI
*fpDriverUnloadComplete
)(LPWSTR pDriverFile
);
256 BOOL (WINAPI
*fpGetSpoolFileInfo
)(HANDLE hPrinter
, LPWSTR
*pSpoolDir
,
257 LPHANDLE phFile
, HANDLE hSpoolerProcess
,
259 BOOL (WINAPI
*fpCommitSpoolData
)(HANDLE hPrinter
, DWORD cbCommit
);
260 BOOL (WINAPI
*fpCloseSpoolFileHandle
)(HANDLE hPrinter
);
261 BOOL (WINAPI
*fpFlushPrinter
)(HANDLE hPrinter
, LPBYTE pBuf
, DWORD cbBuf
,
262 LPDWORD pcWritten
, DWORD cSleep
);
263 DWORD (WINAPI
*fpSendRecvBidiData
)(HANDLE hPort
, LPCWSTR pAction
,
264 LPBIDI_REQUEST_CONTAINER pReqData
,
265 LPBIDI_RESPONSE_CONTAINER
*ppResData
);
266 BOOL (WINAPI
*fpAddDriverCatalog
)(HANDLE hPrinter
, DWORD dwLevel
,
267 VOID
*pvDriverInfCatInfo
, DWORD dwCatalogCopyFlags
);
268 } PRINTPROVIDOR
, *LPPRINTPROVIDOR
;
270 typedef struct _PRINTPROCESSOROPENDATA
{
274 LPWSTR pDocumentName
;
278 } PRINTPROCESSOROPENDATA
, *LPPRINTPROCESSOROPENDATA
, *PPRINTPROCESSOROPENDATA
;
280 typedef struct _MONITORREG
{
282 LONG (WINAPI
*fpCreateKey
)(HANDLE hcKey
, LPCWSTR pszSubKey
, DWORD dwOptions
,
284 PSECURITY_ATTRIBUTES pSecurityAttributes
,
285 PHANDLE phckResult
, PDWORD pdwDisposition
,
287 LONG (WINAPI
*fpOpenKey
)(HANDLE hcKey
, LPCWSTR pszSubKey
, REGSAM samDesired
,
288 PHANDLE phkResult
, HANDLE hSpooler
);
289 LONG (WINAPI
*fpCloseKey
)(HANDLE hcKey
, HANDLE hSpooler
);
290 LONG (WINAPI
*fpDeleteKey
)(HANDLE hcKey
, LPCWSTR pszSubKey
, HANDLE hSpooler
);
291 LONG (WINAPI
*fpEnumKey
)(HANDLE hcKey
, DWORD dwIndex
, LPWSTR pszName
,
292 PDWORD pcchName
, PFILETIME pftLastWriteTime
,
294 LONG (WINAPI
*fpQueryInfoKey
)(HANDLE hcKey
, PDWORD pcSubKeys
, PDWORD pcbKey
,
295 PDWORD pcValues
, PDWORD pcbValue
, PDWORD pcbData
,
296 PDWORD pcbSecurityDescriptor
,
297 PFILETIME pftLastWriteTime
,
299 LONG (WINAPI
*fpSetValue
)(HANDLE hcKey
, LPCWSTR pszValue
, DWORD dwType
,
300 const BYTE
* pData
, DWORD cbData
, HANDLE hSpooler
);
301 LONG (WINAPI
*fpDeleteValue
)(HANDLE hcKey
, LPCWSTR pszValue
, HANDLE hSpooler
);
302 LONG (WINAPI
*fpEnumValue
)(HANDLE hcKey
, DWORD dwIndex
, LPWSTR pszValue
,
303 PDWORD pcbValue
, PDWORD pType
, PBYTE pData
, PDWORD pcbData
,
305 LONG (WINAPI
*fpQueryValue
)(HANDLE hcKey
, LPCWSTR pszValue
, PDWORD pType
,
306 PBYTE pData
, PDWORD pcbData
, HANDLE hSpooler
);
307 } MONITORREG
, *PMONITORREG
;
309 typedef struct _MONITORINIT
{
312 HKEYMONITOR hckRegistryRoot
;
313 PMONITORREG pMonitorReg
;
315 LPCWSTR pszServerName
;
316 } MONITORINIT
, *PMONITORINIT
;
318 typedef struct _MONITOR
{
319 BOOL (WINAPI
*pfnEnumPorts
)(LPWSTR pName
, DWORD Level
, LPBYTE pPorts
,
320 DWORD cbBuf
, LPDWORD pcbNeeded
, LPDWORD pcReturned
);
321 BOOL (WINAPI
*pfnOpenPort
)(LPWSTR pName
, PHANDLE pHandle
);
322 BOOL (WINAPI
*pfnOpenPortEx
)(LPWSTR pPortName
, LPWSTR pPrinterName
,
323 PHANDLE pHandle
, struct _MONITOR
*pMonitor
);
324 BOOL (WINAPI
*pfnStartDocPort
)(HANDLE hPort
, LPWSTR pPrinterName
,
325 DWORD JobId
, DWORD Level
, LPBYTE pDocInfo
);
326 BOOL (WINAPI
*pfnWritePort
)(HANDLE hPort
, LPBYTE pBuffer
, DWORD cbBuf
,
328 BOOL (WINAPI
*pfnReadPort
)(HANDLE hPort
, LPBYTE pBuffer
, DWORD cbBuffer
,
330 BOOL (WINAPI
*pfnEndDocPort
)(HANDLE hPort
);
331 BOOL (WINAPI
*pfnClosePort
)(HANDLE hPort
);
332 BOOL (WINAPI
*pfnAddPort
)(LPWSTR pName
, HWND hWnd
, LPWSTR pMonitorName
);
333 BOOL (WINAPI
*pfnAddPortEx
)(LPWSTR pName
, DWORD Level
, LPBYTE lpBuffer
,
334 LPWSTR lpMonitorName
);
335 BOOL (WINAPI
*pfnConfigurePort
)(LPWSTR pName
, HWND hWnd
, LPWSTR pPortName
);
336 BOOL (WINAPI
*pfnDeletePort
)(LPWSTR pName
, HWND hWnd
, LPWSTR pPortName
);
337 BOOL (WINAPI
*pfnGetPrinterDataFromPort
)(HANDLE hPort
, DWORD ControlID
,
338 LPWSTR pValueName
, LPWSTR lpInBuffer
,
339 DWORD cbInBuffer
, LPWSTR lpOutBuffer
,
340 DWORD cbOutBuffer
, LPDWORD lpcbReturned
);
341 BOOL (WINAPI
*pfnSetPortTimeOuts
)(HANDLE hPort
, LPCOMMTIMEOUTS lpCTO
,
343 BOOL (WINAPI
*pfnXcvOpenPort
)(LPCWSTR pszObject
, ACCESS_MASK GrantedAccess
, PHANDLE phXcv
);
344 DWORD (WINAPI
*pfnXcvDataPort
)(HANDLE hXcv
, LPCWSTR pszDataName
,
345 PBYTE pInputData
, DWORD cbInputData
,
346 PBYTE pOutputData
, DWORD cbOutputData
,
347 PDWORD pcbOutputNeeded
);
348 BOOL (WINAPI
*pfnXcvClosePort
)(HANDLE hXcv
);
349 } MONITOR
, *LPMONITOR
;
351 typedef struct _MONITOREX
{
354 } MONITOREX
, *LPMONITOREX
;
356 typedef struct _MONITOR2
{
358 BOOL (WINAPI
*pfnEnumPorts
)(LPWSTR pName
, DWORD Level
, LPBYTE pPorts
,
359 DWORD cbBuf
, LPDWORD pcbNeeded
,
361 BOOL (WINAPI
*pfnOpenPort
)(LPWSTR pName
, PHANDLE pHandle
);
362 BOOL (WINAPI
*pfnOpenPortEx
)(LPWSTR pPortName
, LPWSTR pPrinterName
,
363 PHANDLE pHandle
, struct _MONITOR2
*pMonitor2
);
364 BOOL (WINAPI
*pfnStartDocPort
)(HANDLE hPort
, LPWSTR pPrinterName
,
365 DWORD JobId
, DWORD Level
, LPBYTE pDocInfo
);
366 BOOL (WINAPI
*pfnWritePort
)(HANDLE hPort
, LPBYTE pBuffer
, DWORD cbBuf
,
368 BOOL (WINAPI
*pfnReadPort
)(HANDLE hPort
, LPBYTE pBuffer
, DWORD cbBuffer
,
370 BOOL (WINAPI
*pfnEndDocPort
)(HANDLE hPort
);
371 BOOL (WINAPI
*pfnClosePort
)(HANDLE hPort
);
372 BOOL (WINAPI
*pfnAddPort
)(LPWSTR pName
, HWND hWnd
, LPWSTR pMonitorName
);
373 BOOL (WINAPI
*pfnAddPortEx
)(LPWSTR pName
, DWORD Level
, LPBYTE lpBuffer
,
374 LPWSTR lpMonitorName
);
375 BOOL (WINAPI
*pfnConfigurePort
)(LPWSTR pName
, HWND hWnd
, LPWSTR pPortName
);
376 BOOL (WINAPI
*pfnDeletePort
)(LPWSTR pName
, HWND hWnd
, LPWSTR pPortName
);
377 BOOL (WINAPI
*pfnGetPrinterDataFromPort
)(HANDLE hPort
, DWORD ControlID
,
378 LPWSTR pValueName
, LPWSTR lpInBuffer
,
379 DWORD cbInBuffer
, LPWSTR lpOutBuffer
,
380 DWORD cbOutBuffer
, LPDWORD lpcbReturned
);
381 BOOL (WINAPI
*pfnSetPortTimeOuts
)(HANDLE hPort
, LPCOMMTIMEOUTS lpCTO
,
383 BOOL (WINAPI
*pfnXcvOpenPort
)(HANDLE hMonitor
, LPCWSTR pszObject
,
384 ACCESS_MASK GrantedAccess
, PHANDLE phXcv
);
385 DWORD (WINAPI
*pfnXcvDataPort
)(HANDLE hXcv
, LPCWSTR pszDataName
,
386 PBYTE pInputData
, DWORD cbInputData
,
387 PBYTE pOutputData
, DWORD cbOutputData
,
388 PDWORD pcbOutputNeeded
);
389 BOOL (WINAPI
*pfnXcvClosePort
)(HANDLE hXcv
);
390 VOID (WINAPI
*pfnShutdown
)(HANDLE hMonitor
);
391 #if (NTDDI_VERSION >= NTDDI_WINXP)
392 DWORD (WINAPI
*pfnSendRecvBidiDataFromPort
)(HANDLE hPort
, DWORD dwAccessBit
,
394 PBIDI_REQUEST_CONTAINER pReqData
,
395 PBIDI_RESPONSE_CONTAINER
*ppResData
);
397 #if (NTDDI_VERSION >= NTDDI_WIN7)
398 DWORD (WINAPI
*pfnNotifyUsedPorts
)(HANDLE hMonitor
, DWORD cPorts
,
401 DWORD (WINAPI
*pfnNotifyUnusedPorts
)(HANDLE hMonitor
, DWORD cPorts
,
404 } MONITOR2
, *LPMONITOR2
, *PMONITOR2
;
406 typedef struct _MONITORUI
{
407 DWORD dwMonitorUISize
;
408 BOOL (WINAPI
*pfnAddPortUI
)(PCWSTR pszServer
, HWND hWnd
,
409 PCWSTR pszPortNameIn
, PWSTR
*ppszPortNameOut
);
410 BOOL (WINAPI
*pfnConfigurePortUI
)(PCWSTR pName
, HWND hWnd
, PCWSTR pPortName
);
411 BOOL (WINAPI
*pfnDeletePortUI
)(PCWSTR pszServer
, HWND hWnd
, PCWSTR pszPortName
);
412 } MONITORUI
, *PMONITORUI
;
414 #if (NTDDI_VERSION >= NTDDI_WINXP)
427 } MESSAGEBOX_PARAMS
, *PMESSAGEBOX_PARAMS
;
431 MESSAGEBOX_PARAMS MessageBoxParams
;
432 } SHOWUIPARAMS
, *PSHOWUIPARAMS
;
434 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
436 #if (NTDDI_VERSION >= NTDDI_WS03)
437 #ifndef __ATTRIBUTE_INFO_3__
438 #define __ATTRIBUTE_INFO_3__
439 typedef struct _ATTRIBUTE_INFO_3
{
440 DWORD dwJobNumberOfPagesPerSide
;
441 DWORD dwDrvNumberOfPagesPerSide
;
442 DWORD dwNupBorderFlags
;
443 DWORD dwJobPageOrderFlags
;
444 DWORD dwDrvPageOrderFlags
;
445 DWORD dwJobNumberOfCopies
;
446 DWORD dwDrvNumberOfCopies
;
447 DWORD dwColorOptimization
;
448 short dmPrintQuality
;
450 } ATTRIBUTE_INFO_3
, *PATTRIBUTE_INFO_3
;
451 #endif /* __ATTRIBUTE_INFO_3__ */
452 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
454 #if (NTDDI_VERSION >= NTDDI_VISTA)
457 (CALLBACK
*ROUTER_NOTIFY_CALLBACK
)(
461 IN PPRINTER_NOTIFY_INFO pNofityInfo
,
463 OUT PDWORD pdwResult
);
465 typedef enum _NOTIFICATION_CALLBACK_COMMANDS
{
466 NOTIFICATION_COMMAND_NOTIFY
,
467 NOTIFICATION_COMMAND_CONTEXT_ACQUIRE
,
468 NOTIFICATION_COMMAND_CONTEXT_RELEASE
469 } NOTIFICATION_CALLBACK_COMMANDS
;
471 typedef struct _NOTIFICATION_CONFIG_1
{
474 ROUTER_NOTIFY_CALLBACK pfnNotifyCallback
;
476 } NOTIFICATION_CONFIG_1
, *PNOTIFICATION_CONFIG_1
;
478 typedef enum _NOTIFICATION_CONFIG_FLAGS
{
479 NOTIFICATION_CONFIG_CREATE_EVENT
= 1 << 0,
480 NOTIFICATION_CONFIG_REGISTER_CALLBACK
= 1 << 1,
481 NOTIFICATION_CONFIG_EVENT_TRIGGER
= 1 << 2,
482 NOTIFICATION_CONFIG_ASYNC_CHANNEL
= 1 << 3
483 } NOTIFICATION_CONFIG_FLAGS
;
485 typedef struct _SPLCLIENT_INFO_3
{
492 DWORD dwMajorVersion
;
493 DWORD dwMinorVersion
;
494 WORD wProcessorArchitecture
;
496 } SPLCLIENT_INFO_3
, *PSPLCLIENT_INFO_3
, *LPSPLCLIENT_INFO_3
;
498 #ifndef __ATTRIBUTE_INFO_4__
499 #define __ATTRIBUTE_INFO_4__
501 typedef struct _ATTRIBUTE_INFO_4
{
502 DWORD dwJobNumberOfPagesPerSide
;
503 DWORD dwDrvNumberOfPagesPerSide
;
504 DWORD dwNupBorderFlags
;
505 DWORD dwJobPageOrderFlags
;
506 DWORD dwDrvPageOrderFlags
;
507 DWORD dwJobNumberOfCopies
;
508 DWORD dwDrvNumberOfCopies
;
509 DWORD dwColorOptimization
;
510 short dmPrintQuality
;
513 DWORD dwNupDirection
;
514 DWORD dwBookletFlags
;
515 DWORD dwScalingPercentX
;
516 DWORD dwScalingPercentY
;
517 } ATTRIBUTE_INFO_4
, *PATTRIBUTE_INFO_4
;
519 #define REVERSE_PAGES_FOR_REVERSE_DUPLEX (0x00000001)
520 #define DONT_SEND_EXTRA_PAGES_FOR_DUPLEX (0x00000001 << 1)
522 #define RIGHT_THEN_DOWN (0x00000001)
523 #define DOWN_THEN_RIGHT (0x00000001 << 1)
524 #define LEFT_THEN_DOWN (0x00000001 << 2)
525 #define DOWN_THEN_LEFT (0x00000001 << 3)
527 #define BOOKLET_EDGE_LEFT 0x00000000
528 #define BOOKLET_EDGE_RIGHT 0x00000001
530 #endif /* __ATTRIBUTE_INFO_4__ */
532 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
534 #if (OSVER(NTDDI_VERSION) == NTDDI_W2K)
535 typedef SPLCLIENT_INFO_2_W2K SPLCLIENT_INFO_2
, *PSPLCLIENT_INFO_2
, *LPSPLCLIENT_INFO_2
;
536 #elif ((OSVER(NTDDI_VERSION) == NTDDI_WINXP) || (OSVER(NTDDI_VERSION) == NTDDI_WS03))
537 typedef SPLCLIENT_INFO_2_WINXP SPLCLIENT_INFO_2
, *PSPLCLIENT_INFO_2
, *LPSPLCLIENT_INFO_2
;
539 typedef SPLCLIENT_INFO_2_LONGHORN SPLCLIENT_INFO_2
, *PSPLCLIENT_INFO_2
, *LPSPLCLIENT_INFO_2
;
540 #endif /* (OSVER(NTDDI_VERSION) == NTDDI_W2K) */
544 InitializePrintProvidor(
545 OUT LPPRINTPROVIDOR pPrintProvidor
,
546 IN DWORD cbPrintProvidor
,
547 IN LPWSTR pFullRegistryPath OPTIONAL
);
552 IN LPWSTR pPrinterName
,
553 IN PPRINTPROCESSOROPENDATA pPrintProcessorOpenData
);
557 PrintDocumentOnPrintProcessor(
558 IN HANDLE hPrintProcessor
,
559 IN LPWSTR pDocumentName
);
564 IN OUT HANDLE hPrintProcessor
);
568 ControlPrintProcessor(
569 IN HANDLE hPrintProcessor
,
574 GetPrintProcessorCapabilities(
575 IN LPTSTR pValueName
,
576 IN DWORD dwAttributes
,
579 OUT LPDWORD pcbNeeded
);
584 IN LPWSTR pRegistryRoot
);
590 OUT PHANDLE pHandle
);
617 ACCESS_MASK GrantedAccess
,
629 PDWORD pcbOutputNeeded
);
639 IN PCWSTR pszServer OPTIONAL
,
641 IN PCWSTR pszMonitorNameIn
,
642 OUT PWSTR
*ppszPortNameOut OPTIONAL
);
649 IN PCWSTR pszPortName
);
656 IN PCWSTR pszPortName
);
660 SplDeleteSpoolerPortStart(
661 IN PCWSTR pPortName
);
665 SplDeleteSpoolerPortEnd(
667 IN BOOL bDeletePort
);
671 SpoolerCopyFileEvent(
672 IN LPWSTR pszPrinterName
,
674 IN DWORD dwCopyFileEvent
);
678 GenerateCopyFilePaths(
679 IN LPCWSTR pszPrinterName
,
680 IN LPCWSTR pszDirectory
,
681 IN LPBYTE pSplClientInfo
,
683 IN OUT LPWSTR pszSourceDir
,
684 IN OUT LPDWORD pcchSourceDirSize
,
685 IN OUT LPWSTR pszTargetDir
,
686 IN OUT LPDWORD pcchTargetDirSize
,
689 HANDLE WINAPI
CreatePrinterIC(HANDLE hPrinter
, LPDEVMODEW pDevMode
);
690 BOOL WINAPI
PlayGdiScriptOnPrinterIC(HANDLE hPrinterIC
, LPBYTE pIn
,
691 DWORD cIn
, LPBYTE pOut
, DWORD cOut
, DWORD ul
);
692 BOOL WINAPI
DeletePrinterIC(HANDLE hPrinterIC
);
693 BOOL WINAPI
DevQueryPrint(HANDLE hPrinter
, LPDEVMODEW pDevMode
, DWORD
*pResID
);
694 HANDLE WINAPI
RevertToPrinterSelf(VOID
);
695 BOOL WINAPI
ImpersonatePrinterClient(HANDLE hToken
);
696 BOOL WINAPI
ReplyPrinterChangeNotification(HANDLE hNotify
, DWORD fdwFlags
,
697 PDWORD pdwResult
, PVOID pPrinterNotifyInfo
);
698 BOOL WINAPI
ReplyPrinterChangeNotificationEx(HANDLE hNotify
, DWORD dwColor
,
699 DWORD fdwFlags
, PDWORD pdwResult
,
700 PVOID pPrinterNotifyInfo
);
701 BOOL WINAPI
PartialReplyPrinterChangeNotification(HANDLE hNotify
,
702 PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc
);
703 PPRINTER_NOTIFY_INFO WINAPI
RouterAllocPrinterNotifyInfo(DWORD cPrinterNotifyInfoData
);
704 BOOL WINAPI
RouterFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo
);
706 BOOL WINAPI
AppendPrinterNotifyInfoData(PPRINTER_NOTIFY_INFO pInfoDest
,
707 PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc
,
709 DWORD WINAPI
CallRouterFindFirstPrinterChangeNotification(HANDLE hPrinter
,
713 PPRINTER_NOTIFY_OPTIONS pPrinterNotifyOptions
);
714 BOOL WINAPI
ProvidorFindFirstPrinterChangeNotification(HANDLE hPrinter
,
720 BOOL WINAPI
ProvidorFindClosePrinterChangeNotification(HANDLE hPrinter
);
723 BOOL WINAPI
SpoolerFindFirstPrinterChangeNotification(HANDLE hPrinter
,
727 PVOID pPrinterNotifyOptions
,
729 BOOL WINAPI
SpoolerFindNextPrinterChangeNotification(HANDLE hPrinter
,
732 PVOID ppPrinterNotifyInfo
);
733 VOID WINAPI
SpoolerFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo
);
734 BOOL WINAPI
SpoolerFindClosePrinterChangeNotification(HANDLE hPrinter
);
736 /* Port monitor / Language monitor / Print monitor */
737 LPMONITOR2 WINAPI
InitializePrintMonitor2(PMONITORINIT pMonitorInit
,
739 PMONITORUI WINAPI
InitializePrintMonitorUI(VOID
);
740 LPMONITOREX WINAPI
InitializePrintMonitor(LPWSTR pRegistryRoot
);
741 BOOL WINAPI
InitializeMonitorEx(LPWSTR pRegistryRoot
, LPMONITOR pMonitor
);
743 #if (NTDDI_VERSION >= NTDDI_WINXP)
745 PBIDI_RESPONSE_CONTAINER WINAPI
RouterAllocBidiResponseContainer(DWORD Count
);
746 PVOID WINAPI
RouterAllocBidiMem(size_t NumBytes
);
747 DWORD WINAPI
RouterFreeBidiResponseContainer(PBIDI_RESPONSE_CONTAINER pData
);
748 VOID WINAPI
RouterFreeBidiMem(PVOID pMemPointer
);
752 SplPromptUIInUsersSession(
755 IN PSHOWUIPARAMS pUIParams
,
756 OUT DWORD
*pResponse
);
763 OUT BOOL
*pIsSessionZero
);
765 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
767 #if (NTDDI_VERSION >= NTDDI_WS03)
771 IN LPWSTR pPrinterName
,
772 IN LPDEVMODEW pDevmode
,
773 OUT PATTRIBUTE_INFO_3 pAttributeInfo
);
776 #if (NTDDI_VERSION >= NTDDI_VISTA)
778 #define FILL_WITH_DEFAULTS 0x1
783 IN LPWSTR pPrinterName
,
784 IN LPDEVMODEW pDevmode
,
786 OUT LPBYTE pAttributeInfo
,
790 BOOL WINAPI
SpoolerRefreshPrinterChangeNotification(HANDLE hPrinter
,
792 PPRINTER_NOTIFY_OPTIONS pOptions
,
793 PPRINTER_NOTIFY_INFO
*ppInfo
);
795 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
797 /* FIXME : The following declarations are not present in the official header */
799 BOOL WINAPI
OpenPrinterToken(PHANDLE phToken
);
800 BOOL WINAPI
SetPrinterToken(HANDLE hToken
);
801 BOOL WINAPI
ClosePrinterToken(HANDLE hToken
);
802 BOOL WINAPI
InstallPrintProcessor(HWND hWnd
);