[NDK]
[reactos.git] / 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 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 #if (STRICT && (NTDDI_VERSION >= NTDDI_VISTA))
28 #define HKEYMONITOR HKEY
29 #else
30 #define HKEYMONITOR HANDLE
31 #endif
32
33 #define PRINTER_NOTIFY_STATUS_ENDPOINT 1
34 #define PRINTER_NOTIFY_STATUS_POLL 2
35 #define PRINTER_NOTIFY_STATUS_INFO 4
36
37 #define ROUTER_UNKNOWN 0
38 #define ROUTER_SUCCESS 1
39 #define ROUTER_STOP_ROUTING 2
40
41 #if (NTDDI_VERSION >= NTDDI_WINXP)
42 #define MONITOR2_SIZE_WIN2K (sizeof(DWORD) + (sizeof(PVOID)*18))
43 #endif
44
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
50
51 #define COPYFILE_FLAG_CLIENT_SPOOLER 0x00000001
52 #define COPYFILE_FLAG_SERVER_SPOOLER 0x00000002
53
54 #define PRINTER_NOTIFY_INFO_DATA_COMPACT 1
55
56 typedef struct _PRINTER_NOTIFY_INIT {
57 DWORD Size;
58 DWORD Reserved;
59 DWORD PollTime;
60 } PRINTER_NOTIFY_INIT, *LPPRINTER_NOTIFY_INIT, *PPRINTER_NOTIFY_INIT;
61
62 typedef struct _SPLCLIENT_INFO_1 {
63 DWORD dwSize;
64 LPWSTR pMachineName;
65 LPWSTR pUserName;
66 DWORD dwBuildNum;
67 DWORD dwMajorVersion;
68 DWORD dwMinorVersion;
69 WORD wProcessorArchitecture;
70 } SPLCLIENT_INFO_1, *LPSPLCLIENT_INFO_1, *PSPLCLIENT_INFO_1;
71
72 typedef struct _SPLCLIENT_INFO_2_V1{
73 ULONG_PTR hSplPrinter;
74 } SPLCLIENT_INFO_2_W2K;
75
76 typedef struct _SPLCLIENT_INFO_2_V2{
77 #ifdef _WIN64
78 DWORD64 hSplPrinter;
79 #else
80 DWORD32 hSplPrinter;
81 #endif
82 } SPLCLIENT_INFO_2_WINXP;
83
84 typedef struct _SPLCLIENT_INFO_2_V3{
85 UINT64 hSplPrinter;
86 } SPLCLIENT_INFO_2_LONGHORN;
87
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,
97 LPDWORD pcReturned);
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,
101 DWORD Command);
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,
113 LPDWORD pcbNeeded);
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,
118 LPWSTR pDriverName);
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,
138 LPDWORD pcWritten);
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,
149 LPDWORD pcbNeeded);
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,
159 LPBYTE pForm);
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,
164 LPDWORD pcReturned);
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,
173 DWORD ul);
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,
179 DWORD dwType);
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,
192 DWORD fdwFlags,
193 DWORD fdwOptions,
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,
200 DWORD Reserved,
201 PVOID pvReserved,
202 PVOID pPrinterNotifyInfo);
203 BOOL (WINAPI *fpOpenPrinterEx)(LPWSTR pPrinterName, LPHANDLE phPrinter,
204 LPPRINTER_DEFAULTSW pDefault, LPBYTE pClientInfo,
205 DWORD Level);
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,
209 LPBYTE pPortInfo);
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,
217 LPCWSTR pszAddress);
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,
232 LPCWSTR pValueName);
233 DWORD (WINAPI *fpDeletePrinterKey)(HANDLE hPrinter, LPCWSTR pKeyName);
234 BOOL (WINAPI *fpSeekPrinter)(HANDLE hPrinter, LARGE_INTEGER liDistanceToMove,
235 PLARGE_INTEGER pliNewPointer, DWORD dwMoveMethod,
236 BOOL bWrite);
237 BOOL (WINAPI *fpDeletePrinterDriverEx)(LPWSTR pName, LPWSTR pEnvironment,
238 LPWSTR pDriverName, DWORD dwDeleteFlag,
239 DWORD dwVersionNum);
240 BOOL (WINAPI *fpAddPerMachineConnection)(LPCWSTR pServer,
241 LPCWSTR pPrinterName, LPCWSTR pPrintServer,
242 LPCWSTR pProvider);
243 BOOL (WINAPI *fpDeletePerMachineConnection)(LPCWSTR pServer,
244 LPCWSTR pPrinterName);
245 BOOL (WINAPI *fpEnumPerMachineConnections)(LPCWSTR pServer,
246 LPBYTE pPrinterEnum, DWORD cbBuf,
247 LPDWORD pcbNeeded,
248 LPDWORD pcReturned);
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,
258 HANDLE hAppProcess);
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;
269
270 typedef struct _PRINTPROCESSOROPENDATA {
271 PDEVMODEW pDevMode;
272 LPWSTR pDatatype;
273 LPWSTR pParameters;
274 LPWSTR pDocumentName;
275 DWORD JobId;
276 LPWSTR pOutputFile;
277 LPWSTR pPrinterName;
278 } PRINTPROCESSOROPENDATA, *LPPRINTPROCESSOROPENDATA, *PPRINTPROCESSOROPENDATA;
279
280 typedef struct _MONITORREG {
281 DWORD cbSize;
282 LONG (WINAPI *fpCreateKey)(HANDLE hcKey, LPCWSTR pszSubKey, DWORD dwOptions,
283 REGSAM samDesired,
284 PSECURITY_ATTRIBUTES pSecurityAttributes,
285 PHANDLE phckResult, PDWORD pdwDisposition,
286 HANDLE hSpooler);
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,
293 HANDLE hSpooler);
294 LONG (WINAPI *fpQueryInfoKey)(HANDLE hcKey, PDWORD pcSubKeys, PDWORD pcbKey,
295 PDWORD pcValues, PDWORD pcbValue, PDWORD pcbData,
296 PDWORD pcbSecurityDescriptor,
297 PFILETIME pftLastWriteTime,
298 HANDLE hSpooler);
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,
304 HANDLE hSpooler);
305 LONG (WINAPI *fpQueryValue)(HANDLE hcKey, LPCWSTR pszValue, PDWORD pType,
306 PBYTE pData, PDWORD pcbData, HANDLE hSpooler);
307 } MONITORREG, *PMONITORREG;
308
309 typedef struct _MONITORINIT {
310 DWORD cbSize;
311 HANDLE hSpooler;
312 HKEYMONITOR hckRegistryRoot;
313 PMONITORREG pMonitorReg;
314 BOOL bLocal;
315 LPCWSTR pszServerName;
316 } MONITORINIT, *PMONITORINIT;
317
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,
327 LPDWORD pcbWritten);
328 BOOL (WINAPI *pfnReadPort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
329 LPDWORD pcbRead);
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,
342 DWORD reserved);
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;
350
351 typedef struct _MONITOREX {
352 DWORD dwMonitorSize;
353 MONITOR Monitor;
354 } MONITOREX, *LPMONITOREX;
355
356 typedef struct _MONITOR2 {
357 DWORD cbSize;
358 BOOL (WINAPI *pfnEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
359 DWORD cbBuf, LPDWORD pcbNeeded,
360 LPDWORD pcReturned);
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,
367 LPDWORD pcbWritten);
368 BOOL (WINAPI *pfnReadPort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
369 LPDWORD pcbRead);
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,
382 DWORD reserved);
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,
393 LPCWSTR pAction,
394 PBIDI_REQUEST_CONTAINER pReqData,
395 PBIDI_RESPONSE_CONTAINER *ppResData);
396 #endif
397 #if (NTDDI_VERSION >= NTDDI_WIN7)
398 DWORD (WINAPI *pfnNotifyUsedPorts)(HANDLE hMonitor, DWORD cPorts,
399 PCWSTR *ppszPorts);
400
401 DWORD (WINAPI *pfnNotifyUnusedPorts)(HANDLE hMonitor, DWORD cPorts,
402 PCWSTR *ppszPorts);
403 #endif
404 } MONITOR2, *LPMONITOR2, *PMONITOR2;
405
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;
413
414 #if (NTDDI_VERSION >= NTDDI_WINXP)
415
416 typedef enum {
417 kMessageBox = 0
418 } UI_TYPE;
419
420 typedef struct {
421 DWORD cbSize;
422 LPWSTR pTitle;
423 LPWSTR pMessage;
424 DWORD Style;
425 DWORD dwTimeout;
426 BOOL bWait;
427 } MESSAGEBOX_PARAMS, *PMESSAGEBOX_PARAMS;
428
429 typedef struct {
430 UI_TYPE UIType;
431 MESSAGEBOX_PARAMS MessageBoxParams;
432 } SHOWUIPARAMS, *PSHOWUIPARAMS;
433
434 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
435
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;
449 short dmYResolution;
450 } ATTRIBUTE_INFO_3, *PATTRIBUTE_INFO_3;
451 #endif /* __ATTRIBUTE_INFO_3__ */
452 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
453
454 #if (NTDDI_VERSION >= NTDDI_VISTA)
455
456 typedef BOOL
457 (CALLBACK *ROUTER_NOTIFY_CALLBACK)(
458 IN DWORD dwCommand,
459 IN PVOID pContext,
460 IN DWORD dwColor,
461 IN PPRINTER_NOTIFY_INFO pNofityInfo,
462 IN DWORD fdwFlags,
463 OUT PDWORD pdwResult);
464
465 typedef enum _NOTIFICATION_CALLBACK_COMMANDS {
466 NOTIFICATION_COMMAND_NOTIFY,
467 NOTIFICATION_COMMAND_CONTEXT_ACQUIRE,
468 NOTIFICATION_COMMAND_CONTEXT_RELEASE
469 } NOTIFICATION_CALLBACK_COMMANDS;
470
471 typedef struct _NOTIFICATION_CONFIG_1 {
472 UINT cbSize;
473 DWORD fdwFlags;
474 ROUTER_NOTIFY_CALLBACK pfnNotifyCallback;
475 PVOID pContext;
476 } NOTIFICATION_CONFIG_1, *PNOTIFICATION_CONFIG_1;
477
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;
484
485 typedef struct _SPLCLIENT_INFO_3 {
486 UINT cbSize;
487 DWORD dwFlags;
488 DWORD dwSize;
489 PWSTR pMachineName;
490 PWSTR pUserName;
491 DWORD dwBuildNum;
492 DWORD dwMajorVersion;
493 DWORD dwMinorVersion;
494 WORD wProcessorArchitecture;
495 UINT64 hSplPrinter;
496 } SPLCLIENT_INFO_3, *PSPLCLIENT_INFO_3, *LPSPLCLIENT_INFO_3;
497
498 #ifndef __ATTRIBUTE_INFO_4__
499 #define __ATTRIBUTE_INFO_4__
500
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;
511 short dmYResolution;
512 DWORD dwDuplexFlags;
513 DWORD dwNupDirection;
514 DWORD dwBookletFlags;
515 DWORD dwScalingPercentX;
516 DWORD dwScalingPercentY;
517 } ATTRIBUTE_INFO_4, *PATTRIBUTE_INFO_4;
518
519 #define REVERSE_PAGES_FOR_REVERSE_DUPLEX (0x00000001)
520 #define DONT_SEND_EXTRA_PAGES_FOR_DUPLEX (0x00000001 << 1)
521
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)
526
527 #define BOOKLET_EDGE_LEFT 0x00000000
528 #define BOOKLET_EDGE_RIGHT 0x00000001
529
530 #endif /* __ATTRIBUTE_INFO_4__ */
531
532 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
533
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;
538 #else
539 typedef SPLCLIENT_INFO_2_LONGHORN SPLCLIENT_INFO_2, *PSPLCLIENT_INFO_2, *LPSPLCLIENT_INFO_2;
540 #endif /* (OSVER(NTDDI_VERSION) == NTDDI_W2K) */
541
542 BOOL
543 WINAPI
544 InitializePrintProvidor(
545 OUT LPPRINTPROVIDOR pPrintProvidor,
546 IN DWORD cbPrintProvidor,
547 IN LPWSTR pFullRegistryPath OPTIONAL);
548
549 HANDLE
550 WINAPI
551 OpenPrintProcessor(
552 IN LPWSTR pPrinterName,
553 IN PPRINTPROCESSOROPENDATA pPrintProcessorOpenData);
554
555 BOOL
556 WINAPI
557 PrintDocumentOnPrintProcessor(
558 IN HANDLE hPrintProcessor,
559 IN LPWSTR pDocumentName);
560
561 BOOL
562 WINAPI
563 ClosePrintProcessor(
564 IN OUT HANDLE hPrintProcessor);
565
566 BOOL
567 WINAPI
568 ControlPrintProcessor(
569 IN HANDLE hPrintProcessor,
570 IN DWORD Command);
571
572 DWORD
573 WINAPI
574 GetPrintProcessorCapabilities(
575 IN LPTSTR pValueName,
576 IN DWORD dwAttributes,
577 OUT LPBYTE pData,
578 IN DWORD nSize,
579 OUT LPDWORD pcbNeeded);
580
581 BOOL
582 WINAPI
583 InitializeMonitor(
584 IN LPWSTR pRegistryRoot);
585
586 BOOL
587 WINAPI
588 OpenPort(
589 IN LPWSTR pName,
590 OUT PHANDLE pHandle);
591
592 BOOL
593 WINAPI
594 WritePort(
595 HANDLE hPort,
596 LPBYTE pBuffer,
597 DWORD cbBuf,
598 LPDWORD pcbWritten);
599
600 BOOL
601 WINAPI
602 ReadPort(
603 HANDLE hPort,
604 LPBYTE pBuffer,
605 DWORD cbBuffer,
606 LPDWORD pcbRead);
607
608 BOOL
609 WINAPI
610 ClosePort(
611 IN HANDLE hPort);
612
613 BOOL
614 WINAPI
615 XcvOpenPort(
616 LPCWSTR pszObject,
617 ACCESS_MASK GrantedAccess,
618 PHANDLE phXcv);
619
620 DWORD
621 WINAPI
622 XcvDataPort(
623 HANDLE hXcv,
624 LPCWSTR pszDataName,
625 PBYTE pInputData,
626 DWORD cbInputData,
627 PBYTE pOutputData,
628 DWORD cbOutputData,
629 PDWORD pcbOutputNeeded);
630
631 BOOL
632 WINAPI
633 XcvClosePort(
634 IN HANDLE hXcv);
635
636 BOOL
637 WINAPI
638 AddPortUI(
639 IN PCWSTR pszServer OPTIONAL,
640 IN HWND hWnd,
641 IN PCWSTR pszMonitorNameIn,
642 OUT PWSTR *ppszPortNameOut OPTIONAL);
643
644 BOOL
645 WINAPI
646 ConfigurePortUI(
647 IN PCWSTR pszServer,
648 IN HWND hWnd,
649 IN PCWSTR pszPortName);
650
651 BOOL
652 WINAPI
653 DeletePortUI(
654 IN PCWSTR pszServer,
655 IN HWND hWnd,
656 IN PCWSTR pszPortName);
657
658 BOOL
659 WINAPI
660 SplDeleteSpoolerPortStart(
661 IN PCWSTR pPortName);
662
663 BOOL
664 WINAPI
665 SplDeleteSpoolerPortEnd(
666 IN PCWSTR pName,
667 IN BOOL bDeletePort);
668
669 BOOL
670 WINAPI
671 SpoolerCopyFileEvent(
672 IN LPWSTR pszPrinterName,
673 IN LPWSTR pszKey,
674 IN DWORD dwCopyFileEvent);
675
676 DWORD
677 WINAPI
678 GenerateCopyFilePaths(
679 IN LPCWSTR pszPrinterName,
680 IN LPCWSTR pszDirectory,
681 IN LPBYTE pSplClientInfo,
682 IN DWORD dwLevel,
683 IN OUT LPWSTR pszSourceDir,
684 IN OUT LPDWORD pcchSourceDirSize,
685 IN OUT LPWSTR pszTargetDir,
686 IN OUT LPDWORD pcchTargetDirSize,
687 IN DWORD dwFlags);
688
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);
705
706 BOOL WINAPI AppendPrinterNotifyInfoData(PPRINTER_NOTIFY_INFO pInfoDest,
707 PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc,
708 DWORD fdwFlags);
709 DWORD WINAPI CallRouterFindFirstPrinterChangeNotification(HANDLE hPrinter,
710 DWORD fdwFlags,
711 DWORD fdwOptions,
712 HANDLE hNotify,
713 PPRINTER_NOTIFY_OPTIONS pPrinterNotifyOptions);
714 BOOL WINAPI ProvidorFindFirstPrinterChangeNotification(HANDLE hPrinter,
715 DWORD fdwFlags,
716 DWORD fdwOptions,
717 HANDLE hNotify,
718 PVOID pvReserved0,
719 PVOID pvReserved1);
720 BOOL WINAPI ProvidorFindClosePrinterChangeNotification(HANDLE hPrinter);
721
722 /* Spooler */
723 BOOL WINAPI SpoolerFindFirstPrinterChangeNotification(HANDLE hPrinter,
724 DWORD fdwFlags,
725 DWORD fdwOptions,
726 PHANDLE phEvent,
727 PVOID pPrinterNotifyOptions,
728 PVOID pvReserved);
729 BOOL WINAPI SpoolerFindNextPrinterChangeNotification(HANDLE hPrinter,
730 LPDWORD pfdwChange,
731 PVOID pvReserved0,
732 PVOID ppPrinterNotifyInfo);
733 VOID WINAPI SpoolerFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo);
734 BOOL WINAPI SpoolerFindClosePrinterChangeNotification(HANDLE hPrinter);
735
736 /* Port monitor / Language monitor / Print monitor */
737 LPMONITOR2 WINAPI InitializePrintMonitor2(PMONITORINIT pMonitorInit,
738 PHANDLE phMonitor);
739 PMONITORUI WINAPI InitializePrintMonitorUI(VOID);
740 LPMONITOREX WINAPI InitializePrintMonitor(LPWSTR pRegistryRoot);
741 BOOL WINAPI InitializeMonitorEx(LPWSTR pRegistryRoot, LPMONITOR pMonitor);
742
743 #if (NTDDI_VERSION >= NTDDI_WINXP)
744
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);
749
750 BOOL
751 WINAPI
752 SplPromptUIInUsersSession(
753 IN HANDLE hPrinter,
754 IN DWORD JobId,
755 IN PSHOWUIPARAMS pUIParams,
756 OUT DWORD *pResponse);
757
758 DWORD
759 WINAPI
760 SplIsSessionZero(
761 IN HANDLE hPrinter,
762 IN DWORD JobId,
763 OUT BOOL *pIsSessionZero);
764
765 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
766
767 #if (NTDDI_VERSION >= NTDDI_WS03)
768 BOOL
769 WINAPI
770 GetJobAttributes(
771 IN LPWSTR pPrinterName,
772 IN LPDEVMODEW pDevmode,
773 OUT PATTRIBUTE_INFO_3 pAttributeInfo);
774 #endif
775
776 #if (NTDDI_VERSION >= NTDDI_VISTA)
777
778 #define FILL_WITH_DEFAULTS 0x1
779
780 BOOL
781 WINAPI
782 GetJobAttributesEx(
783 IN LPWSTR pPrinterName,
784 IN LPDEVMODEW pDevmode,
785 IN DWORD dwLevel,
786 OUT LPBYTE pAttributeInfo,
787 IN DWORD nSize,
788 IN DWORD dwFlags);
789
790 BOOL WINAPI SpoolerRefreshPrinterChangeNotification(HANDLE hPrinter,
791 DWORD dwColor,
792 PPRINTER_NOTIFY_OPTIONS pOptions,
793 PPRINTER_NOTIFY_INFO *ppInfo);
794
795 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
796
797 /* FIXME : The following declarations are not present in the official header */
798
799 BOOL WINAPI OpenPrinterToken(PHANDLE phToken);
800 BOOL WINAPI SetPrinterToken(HANDLE hToken);
801 BOOL WINAPI ClosePrinterToken(HANDLE hToken);
802 BOOL WINAPI InstallPrintProcessor(HWND hWnd);
803
804 #ifdef __cplusplus
805 }
806 #endif