summaryrefslogtreecommitdiffstats
path: root/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winsplp.h
blob: 4af7d1d4bc6faa754eae5ab77cd9fff13c34e441 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
/*
 * Definitions for print provider, monitor, processor and spooler
 *
 * Copyright 2005 Detlef Riekenberg
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 *
 *
 * "providor" is not a spelling error in this file. It's the real name.
 *
 */

/*
 * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
 * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
 * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
 * a choice of LGPL license versions is made available with the language indicating
 * that LGPLv2 or any later version may be used, or where a choice of which version
 * of the LGPL is applied is otherwise unspecified.
 */

#ifndef _WINSPLP_
#define _WINSPLP_

#ifdef __cplusplus
extern "C" {
#endif

/* DEFINES */

#define PRINTER_NOTIFY_STATUS_ENDPOINT  1
#define PRINTER_NOTIFY_STATUS_POLL      2
#define PRINTER_NOTIFY_STATUS_INFO      4


#define ROUTER_UNKNOWN      0
#define ROUTER_SUCCESS      1
#define ROUTER_STOP_ROUTING 2

/*
 * WARNING: Many Functions are declared as "BOOL", but return ROUTER_*
 */


/* TYPES */

typedef struct _MONITOR {
 BOOL  (WINAPI *pfnEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
                DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
 BOOL  (WINAPI *pfnOpenPort)(LPWSTR pName, PHANDLE pHandle);
 BOOL  (WINAPI *pfnOpenPortEx)(LPWSTR pPortName, LPWSTR pPrinterName,
                PHANDLE pHandle, struct _MONITOR *pMonitor);
 BOOL  (WINAPI *pfnStartDocPort)(HANDLE hPort, LPWSTR pPrinterName,
                DWORD JobId, DWORD Level, LPBYTE pDocInfo);
 BOOL  (WINAPI *pfnWritePort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
                LPDWORD pcbWritten);
 BOOL  (WINAPI *pfnReadPort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
                LPDWORD pcbRead);
 BOOL  (WINAPI *pfnEndDocPort)(HANDLE hPort);
 BOOL  (WINAPI *pfnClosePort)(HANDLE hPort);
 BOOL  (WINAPI *pfnAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
 BOOL  (WINAPI *pfnAddPortEx)(LPWSTR pName, DWORD Level, LPBYTE lpBuffer,
                LPWSTR lpMonitorName);
 BOOL  (WINAPI *pfnConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
 BOOL  (WINAPI *pfnDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
 BOOL  (WINAPI *pfnGetPrinterDataFromPort)(HANDLE hPort, DWORD ControlID,
                LPWSTR pValueName, LPWSTR lpInBuffer, DWORD cbInBuffer,
                LPWSTR lpOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbReturned);
 BOOL  (WINAPI *pfnSetPortTimeOuts)(HANDLE hPort, LPCOMMTIMEOUTS lpCTO,
                DWORD reserved);
 BOOL  (WINAPI *pfnXcvOpenPort)(LPCWSTR pszObject, ACCESS_MASK GrantedAccess, PHANDLE phXcv);
 DWORD (WINAPI *pfnXcvDataPort)(HANDLE hXcv, LPCWSTR pszDataName,
                PBYTE pInputData, DWORD cbInputData,
                PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded);
 BOOL  (WINAPI *pfnXcvClosePort)(HANDLE hXcv);
} MONITOR, *LPMONITOR;

typedef struct _MONITOR2 {
 DWORD cbSize;
 BOOL  (WINAPI *pfnEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
                DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
 BOOL  (WINAPI *pfnOpenPort)(LPWSTR pName, PHANDLE pHandle);
 BOOL  (WINAPI *pfnOpenPortEx)(LPWSTR pPortName, LPWSTR pPrinterName,
                PHANDLE pHandle, struct _MONITOR2 *pMonitor2);
 BOOL  (WINAPI *pfnStartDocPort)(HANDLE hPort, LPWSTR pPrinterName,
                DWORD JobId, DWORD Level, LPBYTE pDocInfo);
 BOOL  (WINAPI *pfnWritePort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
                LPDWORD pcbWritten);
 BOOL  (WINAPI *pfnReadPort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
                LPDWORD pcbRead);
 BOOL  (WINAPI *pfnEndDocPort)(HANDLE hPort);
 BOOL  (WINAPI *pfnClosePort)(HANDLE hPort);
 BOOL  (WINAPI *pfnAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
 BOOL  (WINAPI *pfnAddPortEx)(LPWSTR pName, DWORD Level, LPBYTE lpBuffer,
                LPWSTR lpMonitorName);
 BOOL  (WINAPI *pfnConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
 BOOL  (WINAPI *pfnDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
 BOOL  (WINAPI *pfnGetPrinterDataFromPort)(HANDLE hPort, DWORD ControlID,
                LPWSTR pValueName, LPWSTR lpInBuffer, DWORD cbInBuffer,
                LPWSTR lpOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbReturned);
 BOOL  (WINAPI *pfnSetPortTimeOuts)(HANDLE hPort, LPCOMMTIMEOUTS lpCTO,
                DWORD reserved);
 BOOL  (WINAPI *pfnXcvOpenPort)(HANDLE hMonitor, LPCWSTR pszObject,
                ACCESS_MASK GrantedAccess, PHANDLE phXcv);
 DWORD (WINAPI *pfnXcvDataPort)(HANDLE hXcv, LPCWSTR pszDataName,
                PBYTE pInputData, DWORD cbInputData,
                PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded);
 BOOL  (WINAPI *pfnXcvClosePort)(HANDLE hXcv);
 /* Additions from MONITOR to MONITOR2 */
 VOID  (WINAPI *pfnShutdown)(HANDLE hMonitor);
 DWORD (WINAPI *pfnSendRecvBidiDataFromPort)(HANDLE hPort, DWORD dwAccessBit,
                LPCWSTR pAction, PBIDI_REQUEST_CONTAINER pReqData,
                PBIDI_RESPONSE_CONTAINER *ppResData);
} MONITOR2, *LPMONITOR2, *PMONITOR2;

typedef struct _MONITOREX {
 DWORD      dwMonitorSize;
 MONITOR    Monitor;
} MONITOREX, *LPMONITOREX;

typedef struct _MONITORREG {
 DWORD cbSize;
 LONG  (WINAPI *fpCreateKey)(HANDLE hcKey, LPCWSTR pszSubKey, DWORD dwOptions,
                REGSAM samDesired, PSECURITY_ATTRIBUTES pSecurityAttributes,
                PHANDLE phckResult, PDWORD pdwDisposition, HANDLE hSpooler);
 LONG  (WINAPI *fpOpenKey)(HANDLE hcKey, LPCWSTR pszSubKey, REGSAM samDesired,
                PHANDLE phkResult, HANDLE hSpooler);
 LONG  (WINAPI *fpCloseKey)(HANDLE hcKey, HANDLE hSpooler);
 LONG  (WINAPI *fpDeleteKey)(HANDLE hcKey, LPCWSTR pszSubKey, HANDLE hSpooler);
 LONG  (WINAPI *fpEnumKey)(HANDLE hcKey, DWORD dwIndex, LPWSTR pszName,
                PDWORD pcchName, PFILETIME pftLastWriteTime, HANDLE hSpooler);
 LONG  (WINAPI *fpQueryInfoKey)(HANDLE hcKey, PDWORD pcSubKeys, PDWORD pcbKey,
                PDWORD pcValues, PDWORD pcbValue, PDWORD pcbData,
                PDWORD pcbSecurityDescriptor, PFILETIME pftLastWriteTime,
                HANDLE hSpooler);
 LONG  (WINAPI *fpSetValue)(HANDLE hcKey, LPCWSTR pszValue, DWORD dwType,
                const BYTE* pData, DWORD cbData, HANDLE hSpooler);
 LONG  (WINAPI *fpDeleteValue)(HANDLE hcKey, LPCWSTR pszValue, HANDLE hSpooler);
 LONG  (WINAPI *fpEnumValue)(HANDLE hcKey, DWORD dwIndex, LPWSTR pszValue,
                PDWORD pcbValue, PDWORD pType, PBYTE pData, PDWORD pcbData,
                HANDLE hSpooler);
 LONG  (WINAPI *fpQueryValue)(HANDLE hcKey, LPCWSTR pszValue, PDWORD pType,
                PBYTE pData, PDWORD pcbData, HANDLE hSpooler);
} MONITORREG, *PMONITORREG;

typedef struct _MONITORINIT {
 DWORD       cbSize;
 HANDLE      hSpooler;
 HANDLE      hckRegistryRoot;
 PMONITORREG pMonitorReg;
 BOOL        bLocal;
} MONITORINIT, *PMONITORINIT;

typedef struct _MONITORUI {
 DWORD dwMonitorUISize;
 BOOL  (WINAPI *pfnAddPortUI)(PCWSTR pszServer, HWND hWnd,
                PCWSTR pszPortNameIn, PWSTR *ppszPortNameOut);
 BOOL  (WINAPI *pfnConfigurePortUI)(PCWSTR pName, HWND hWnd, PCWSTR pPortName);
 BOOL  (WINAPI *pfnDeletePortUI)(PCWSTR pszServer, HWND hWnd, PCWSTR pszPortName);
}MONITORUI, *PMONITORUI;

typedef struct _PRINTER_NOTIFY_INIT {
 DWORD  Size;
 DWORD  Reserved;
 DWORD  PollTime;
} PRINTER_NOTIFY_INIT, *LPPRINTER_NOTIFY_INIT, *PPRINTER_NOTIFY_INIT;

typedef struct _PRINTPROCESSOROPENDATA {
 PDEVMODEW pDevMode;
 LPWSTR    pDatatype;
 LPWSTR    pParameters;
 LPWSTR    pDocumentName;
 DWORD     JobId;
 LPWSTR    pOutputFile;
 LPWSTR    pPrinterName;
} PRINTPROCESSOROPENDATA, *LPPRINTPROCESSOROPENDATA, *PPRINTPROCESSOROPENDATA;


/*
 * WARNING: Many Functions are declared as "BOOL", but return ROUTER_*
 */

typedef struct _PRINTPROVIDOR {
 BOOL   (WINAPI *fpOpenPrinter)(LPWSTR lpPrinterName, HANDLE *phPrinter,
                 LPPRINTER_DEFAULTSW pDefault);
 BOOL   (WINAPI *fpSetJob)(HANDLE hPrinter, DWORD JobID, DWORD Level,
                 LPBYTE pJob, DWORD Command);
 BOOL   (WINAPI *fpGetJob)(HANDLE hPrinter, DWORD JobID, DWORD Level,
                 LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded);
 BOOL   (WINAPI *fpEnumJobs)(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs,
                 DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded,
                 LPDWORD pcReturned);
 HANDLE (WINAPI *fpAddPrinter)(LPWSTR pName, DWORD Level, LPBYTE pPrinter);
 BOOL   (WINAPI *fpDeletePrinter)(HANDLE hPrinter);
 BOOL   (WINAPI *fpSetPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
                 DWORD Command);
 BOOL   (WINAPI *fpGetPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
                 DWORD cbBuf, LPDWORD pcbNeeded);
 BOOL   (WINAPI *fpEnumPrinters)(DWORD dwType, LPWSTR lpszName, DWORD dwLevel,
                 LPBYTE lpbPrinters, DWORD cbBuf, LPDWORD lpdwNeeded,
                 LPDWORD lpdwReturned);
 BOOL   (WINAPI *fpAddPrinterDriver)(LPWSTR pName, DWORD Level,
                 LPBYTE pDriverInfo);
 BOOL   (WINAPI *fpEnumPrinterDrivers)(LPWSTR pName, LPWSTR pEnvironment,
                 DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf,
                 LPDWORD pcbNeeded, LPDWORD pcbReturned);
 BOOL   (WINAPI *fpGetPrinterDriver)(HANDLE hPrinter, LPWSTR pEnvironment,
                 DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf,
                 LPDWORD pcbNeeded);
 BOOL   (WINAPI *fpGetPrinterDriverDirectory)(LPWSTR pName, LPWSTR pEnvironment,
                 DWORD Level, LPBYTE pDriverDirectory, DWORD cbBuf,
                 LPDWORD pcbNeeded);
 BOOL   (WINAPI *fpDeletePrinterDriver)(LPWSTR pName, LPWSTR pEnvironment,
                 LPWSTR pDriverName);
 BOOL   (WINAPI *fpAddPrintProcessor)(LPWSTR pName, LPWSTR pEnvironment,
                 LPWSTR pPathName, LPWSTR pPrintProcessorName);
 BOOL   (WINAPI *fpEnumPrintProcessors)(LPWSTR pName, LPWSTR pEnvironment,
                 DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf,
                 LPDWORD pcbNeeded, LPDWORD pcbReturned);
 BOOL   (WINAPI *fpGetPrintProcessorDirectory)(LPWSTR pName, LPWSTR pEnvironment,
                 DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf,
                 LPDWORD pcbNeeded);
 BOOL   (WINAPI *fpDeletePrintProcessor)(LPWSTR pName, LPWSTR pEnvironment,
                 LPWSTR pPrintProcessorName);
 BOOL   (WINAPI *fpEnumPrintProcessorDatatypes)(LPWSTR pName,
                 LPWSTR pPrintProcessorName, DWORD Level, LPBYTE pDatatypes,
                 DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcbReturned);
 DWORD  (WINAPI *fpStartDocPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo);
 BOOL   (WINAPI *fpStartPagePrinter)(HANDLE hPrinter);
 BOOL   (WINAPI *fpWritePrinter)(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
                 LPDWORD pcWritten);
 BOOL   (WINAPI *fpEndPagePrinter)(HANDLE hPrinter);
 BOOL   (WINAPI *fpAbortPrinter)(HANDLE hPrinter);
 BOOL   (WINAPI *fpReadPrinter)(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
                 LPDWORD pNoBytesRead);
 BOOL   (WINAPI *fpEndDocPrinter)(HANDLE hPrinter);
 BOOL   (WINAPI *fpAddJob)(HANDLE hPrinter, DWORD Level, LPBYTE pData,
                 DWORD cbBuf, LPDWORD pcbNeeded);
 BOOL   (WINAPI *fpScheduleJob)(HANDLE hPrinter, DWORD JobID);
 DWORD  (WINAPI *fpGetPrinterData)(HANDLE hPrinter, LPWSTR pValueName,
                 LPDWORD pType, LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);
 DWORD  (WINAPI *fpSetPrinterData)(HANDLE hPrinter, LPWSTR pValueName,
                 DWORD Type, LPBYTE pData, DWORD cbData);
 DWORD  (WINAPI *fpWaitForPrinterChange)(HANDLE hPrinter, DWORD Flags);
 BOOL   (WINAPI *fpClosePrinter)(HANDLE phPrinter);
 BOOL   (WINAPI *fpAddForm)(HANDLE hPrinter, DWORD Level, LPBYTE pForm);
 BOOL   (WINAPI *fpDeleteForm)(HANDLE hPrinter, LPWSTR pFormName);
 BOOL   (WINAPI *fpGetForm)(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
                 LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded);
 BOOL   (WINAPI *fpSetForm)(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
                 LPBYTE pForm);
 BOOL   (WINAPI *fpEnumForms)(HANDLE hPrinter, DWORD Level, LPBYTE pForm,
                 DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
 BOOL   (WINAPI *fpEnumMonitors)(LPWSTR pName, DWORD Level, LPBYTE pMonitors,
                 DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
 BOOL   (WINAPI *fpEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
                 DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
 BOOL   (WINAPI *fpAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
 BOOL   (WINAPI *fpConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
 BOOL   (WINAPI *fpDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
 HANDLE (WINAPI *fpCreatePrinterIC)(HANDLE  hPrinter, LPDEVMODEW  pDevMode);
 BOOL   (WINAPI *fpPlayGdiScriptOnPrinterIC)(HANDLE  hPrinterIC, LPBYTE pIn,
                 DWORD cIn, LPBYTE pOut, DWORD cOut, DWORD  ul);
 BOOL   (WINAPI *fpDeletePrinterIC)(HANDLE hPrinterIC);
 BOOL   (WINAPI *fpAddPrinterConnection)(LPWSTR pName);
 BOOL   (WINAPI *fpDeletePrinterConnection)(LPWSTR pName);
 DWORD  (WINAPI *fpPrinterMessageBox)(HANDLE hPrinter, DWORD Error, HWND hWnd,
                 LPWSTR pText, LPWSTR pCaption, DWORD dwType);
 BOOL   (WINAPI *fpAddMonitor)(LPWSTR pName, DWORD Level, LPBYTE pMonitors);
 BOOL   (WINAPI *fpDeleteMonitor)(LPWSTR pName, LPWSTR pEnvironment,
                 LPWSTR pMonitorName);
 BOOL   (WINAPI *fpResetPrinter)(HANDLE hPrinter, LPPRINTER_DEFAULTSW pDefault);
 BOOL   (WINAPI *fpGetPrinterDriverEx)(HANDLE hPrinter, LPWSTR pEnvironment,
                 DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded,
                 DWORD dwClientMajorVersion, DWORD dwClientMinorVersion,
                 PDWORD pdwServerMajorVersion, PDWORD pdwServerMinorVersion);
 HANDLE (WINAPI *fpFindFirstPrinterChangeNotification)(HANDLE hPrinter,
                 DWORD fdwFlags, DWORD fdwOptions, LPVOID pPrinterNotifyOptions);
 BOOL   (WINAPI *fpFindClosePrinterChangeNotification)(HANDLE hChange);
 BOOL   (WINAPI *fpAddPortEx)(LPWSTR, DWORD, LPBYTE, LPWSTR);
 BOOL   (WINAPI *fpShutDown)(LPVOID pvReserved);
 BOOL   (WINAPI *fpRefreshPrinterChangeNotification)(HANDLE hPrinter,
                 DWORD Reserved, PVOID pvReserved, PVOID pPrinterNotifyInfo);
 BOOL   (WINAPI *fpOpenPrinterEx)(LPWSTR pPrinterName, LPHANDLE phPrinter,
                 LPPRINTER_DEFAULTSW pDefault, LPBYTE pClientInfo, DWORD Level);
 HANDLE (WINAPI *fpAddPrinterEx)(LPWSTR pName, DWORD Level, LPBYTE pPrinter,
                 LPBYTE pClientInfo, DWORD ClientInfoLevel);
 BOOL   (WINAPI *fpSetPort)(LPWSTR pName, LPWSTR pPortName, DWORD dwLevel,
                 LPBYTE pPortInfo);
 DWORD  (WINAPI *fpEnumPrinterData)( HANDLE hPrinter, DWORD dwIndex,
                 LPWSTR pValueName, DWORD cbValueName, LPDWORD pcbValueName,
                 LPDWORD pType, LPBYTE pData, DWORD cbData, LPDWORD pcbData);
 DWORD  (WINAPI *fpDeletePrinterData)(HANDLE hPrinter, LPWSTR  pValueName);
 DWORD  (WINAPI *fpClusterSplOpen)(LPCWSTR pszServer, LPCWSTR pszResource,
                 PHANDLE phSpooler, LPCWSTR pszName, LPCWSTR pszAddress);
 DWORD  (WINAPI *fpClusterSplClose)(HANDLE hSpooler);
 DWORD  (WINAPI *fpClusterSplIsAlive)(HANDLE  hSpooler);
 DWORD  (WINAPI *fpSetPrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
                 LPCWSTR pValueName, DWORD Type, LPBYTE pData, DWORD cbData);
 DWORD  (WINAPI *fpGetPrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
                 LPCWSTR pValueName, LPDWORD pType, LPBYTE pData, DWORD nSize,
                 LPDWORD pcbNeeded);
 DWORD  (WINAPI *fpEnumPrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
                 LPBYTE pEnumValues, DWORD cbEnumValues, LPDWORD pcbEnumValues,
                 LPDWORD pnEnumValues);
 DWORD  (WINAPI *fpEnumPrinterKey)(HANDLE hPrinter, LPCWSTR pKeyName,
                 LPWSTR pSubkey, DWORD cbSubkey, LPDWORD  pcbSubkey);
 DWORD  (WINAPI *fpDeletePrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
                 LPCWSTR pValueName);
 DWORD  (WINAPI *fpDeletePrinterKey)(HANDLE hPrinter, LPCWSTR pKeyName);
 BOOL   (WINAPI *fpSeekPrinter)(HANDLE hPrinter, LARGE_INTEGER liDistanceToMove,
                 PLARGE_INTEGER pliNewPointer, DWORD dwMoveMethod, BOOL bWrite);
 BOOL   (WINAPI *fpDeletePrinterDriverEx)(LPWSTR pName, LPWSTR pEnvironment,
                 LPWSTR pDriverName, DWORD dwDeleteFlag, DWORD dwVersionNum);
 BOOL   (WINAPI *fpAddPerMachineConnection)(LPCWSTR pServer,
                 LPCWSTR pPrinterName, LPCWSTR pPrintServer, LPCWSTR pProvider);
 BOOL   (WINAPI *fpDeletePerMachineConnection)(LPCWSTR pServer,
                 LPCWSTR pPrinterName);
 BOOL   (WINAPI *fpEnumPerMachineConnections)(LPCWSTR pServer,
                 LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded,
                 LPDWORD pcReturned);
 BOOL   (WINAPI *fpXcvData)(HANDLE hXcv, LPCWSTR pszDataName, PBYTE pInputData,
                 DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData,
                 PDWORD pcbOutputNeeded, PDWORD pdwStatus);
 BOOL   (WINAPI *fpAddPrinterDriverEx)(LPWSTR pName, DWORD Level,
                 LPBYTE pDriverInfo, DWORD  dwFileCopyFlags);
 BOOL   (WINAPI *fpSplReadPrinter)(HANDLE hPrinter, LPBYTE *pBuf, DWORD cbBuf);
 BOOL   (WINAPI *fpDriverUnloadComplete)(LPWSTR pDriverFile);
 BOOL   (WINAPI *fpGetSpoolFileInfo)(HANDLE hPrinter, LPWSTR *pSpoolDir,
                 LPHANDLE phFile, HANDLE hSpoolerProcess, HANDLE hAppProcess);
 BOOL   (WINAPI *fpCommitSpoolData)(HANDLE hPrinter, DWORD cbCommit);
 BOOL   (WINAPI *fpCloseSpoolFileHandle)(HANDLE hPrinter);
 BOOL   (WINAPI *fpFlushPrinter)(HANDLE hPrinter, LPBYTE pBuf, DWORD cbBuf,
                 LPDWORD pcWritten, DWORD cSleep);
 DWORD  (WINAPI *fpSendRecvBidiData)(HANDLE hPort, LPCWSTR pAction,
                 LPBIDI_REQUEST_CONTAINER pReqData,
                 LPBIDI_RESPONSE_CONTAINER *ppResData);
 BOOL   (WINAPI *fpAddDriverCatalog)(HANDLE hPrinter, DWORD dwLevel,
                 VOID *pvDriverInfCatInfo, DWORD dwCatalogCopyFlags);
} PRINTPROVIDOR, *LPPRINTPROVIDOR;

typedef struct _SPLCLIENT_INFO_1 {
 DWORD  dwSize;
 LPWSTR pMachineName;
 LPWSTR pUserName;
 DWORD  dwBuildNum;
 DWORD  dwMajorVersion;
 DWORD  dwMinorVersion;
 WORD   wProcessorArchitecture;
} SPLCLIENT_INFO_1, *LPSPLCLIENT_INFO_1, *PSPLCLIENT_INFO_1;

/* DECLARATIONS */

HANDLE WINAPI CreatePrinterIC(HANDLE hPrinter, LPDEVMODEW pDevMode);
BOOL   WINAPI PlayGdiScriptOnPrinterIC(HANDLE hPrinterIC, LPBYTE pIn,
              DWORD cIn, LPBYTE pOut, DWORD cOut, DWORD ul);
BOOL   WINAPI DeletePrinterIC(HANDLE hPrinterIC);
BOOL   WINAPI DevQueryPrint(HANDLE hPrinter, LPDEVMODEW pDevMode, DWORD *pResID);

/* Security and Access */
HANDLE WINAPI RevertToPrinterSelf(VOID);
BOOL   WINAPI ImpersonatePrinterClient(HANDLE  hToken);
BOOL   WINAPI OpenPrinterToken(PHANDLE phToken);
BOOL   WINAPI SetPrinterToken(HANDLE hToken);
BOOL   WINAPI ClosePrinterToken(HANDLE hToken);

/* Notification */
BOOL   WINAPI ReplyPrinterChangeNotification(HANDLE hNotify, DWORD fdwFlags,
              PDWORD pdwResult, PVOID pPrinterNotifyInfo);
BOOL   WINAPI PartialReplyPrinterChangeNotification(HANDLE hNotify,
              PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc);
PPRINTER_NOTIFY_INFO RouterAllocPrinterNotifyInfo(DWORD cPrinterNotifyInfoData);
BOOL   WINAPI RouterFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo);
BOOL   WINAPI AppendPrinterNotifyInfoData(PPRINTER_NOTIFY_INFO pInfoDest,
              PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc, DWORD fdwFlags);
DWORD  WINAPI CallRouterFindFirstPrinterChangeNotification(HANDLE hPrinter,
              DWORD fdwFlags, DWORD fdwOptions, HANDLE hNotify, PVOID pvReserved);

/* Port monitor / Language monitor / Print monitor */
LPMONITOR2  WINAPI InitializePrintMonitor2(PMONITORINIT pMonitorInit,
                   PHANDLE phMonitor);
PMONITORUI  WINAPI InitializePrintMonitorUI(VOID);
LPMONITOREX WINAPI InitializePrintMonitor(LPWSTR pRegistryRoot);
BOOL        WINAPI InitializeMonitorEx(LPWSTR pRegistryRoot, LPMONITOR pMonitor);
BOOL        WINAPI InitializeMonitor(LPWSTR pRegistryRoot);

BOOL  WINAPI OpenPort(LPWSTR pName, PHANDLE pHandle);
BOOL  WINAPI WritePort(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
             LPDWORD pcbWritten);
BOOL  WINAPI ReadPort(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
             LPDWORD pcbRead);
BOOL  WINAPI ClosePort(HANDLE hPort);

/* Print processor */
HANDLE WINAPI OpenPrintProcessor(LPWSTR pPrinterName,
              PPRINTPROCESSOROPENDATA pPrintProcessorOpenData);
BOOL   WINAPI PrintDocumentOnPrintProcessor(HANDLE hPrintProcessor,
              LPWSTR pDocumentName);
BOOL   WINAPI ClosePrintProcessor(HANDLE hPrintProcessor);
BOOL   WINAPI ControlPrintProcessor(HANDLE hPrintProcessor, DWORD Command);
BOOL   WINAPI InstallPrintProcessor(HWND hWnd);

/* Print provider */
BOOL   WINAPI InitializePrintProvidor(LPPRINTPROVIDOR pPrintProvidor,
              DWORD cbPrintProvidor, LPWSTR pFullRegistryPath);
BOOL   WINAPI ProvidorFindFirstPrinterChangeNotification(HANDLE hPrinter,
              DWORD fdwFlags, DWORD fdwOptions, HANDLE hNotify,
              PVOID pvReserved0, PVOID pvReserved1);
BOOL   WINAPI ProvidorFindClosePrinterChangeNotification(HANDLE hPrinter);

/* Spooler */
BOOL   WINAPI SpoolerFindFirstPrinterChangeNotification(HANDLE hPrinter,
              DWORD fdwFlags, DWORD fdwOptions, PHANDLE phEvent,
              PVOID pPrinterNotifyOptions, PVOID pvReserved);
BOOL   WINAPI SpoolerFindNextPrinterChangeNotification(HANDLE hPrinter,
              LPDWORD pfdwChange, PVOID pvReserved0, PVOID ppPrinterNotifyInfo);
VOID   WINAPI SpoolerFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo);
BOOL   WINAPI SpoolerFindClosePrinterChangeNotification(HANDLE hPrinter);

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif  /* _WINSPLP_ */