kernel32: Add a bunch of tests for protections accepted by VirtualAlloc, make it...
[wine] / include / ddk / winsplp.h
1 /*
2  * Definitions for print provider, monitor, processor and spooler
3  *
4  * Copyright 2005 Detlef Riekenberg
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  *
20  *
21  * "providor" is not a spelling error in this file. It's the real name.
22  *
23  */
24
25 #ifndef _WINSPLP_
26 #define _WINSPLP_
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 /* DEFINES */
33
34 #define PRINTER_NOTIFY_STATUS_ENDPOINT  1
35 #define PRINTER_NOTIFY_STATUS_POLL      2
36 #define PRINTER_NOTIFY_STATUS_INFO      4
37
38
39 #define ROUTER_UNKNOWN      0
40 #define ROUTER_SUCCESS      1
41 #define ROUTER_STOP_ROUTING 2
42
43 /*
44  * WARNING: Many Functions are declared as "BOOL", but return ROUTER_*
45  */
46
47
48 /* TYPES */
49
50 typedef struct _MONITOR {
51  BOOL  (WINAPI *pfnEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
52                 DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
53  BOOL  (WINAPI *pfnOpenPort)(LPWSTR pName, PHANDLE pHandle);
54  BOOL  (WINAPI *pfnOpenPortEx)(LPWSTR pPortName, LPWSTR pPrinterName,
55                 PHANDLE pHandle, struct _MONITOR *pMonitor);
56  BOOL  (WINAPI *pfnStartDocPort)(HANDLE hPort, LPWSTR pPrinterName,
57                 DWORD JobId, DWORD Level, LPBYTE pDocInfo);
58  BOOL  (WINAPI *pfnWritePort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
59                 LPDWORD pcbWritten);
60  BOOL  (WINAPI *pfnReadPort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
61                 LPDWORD pcbRead);
62  BOOL  (WINAPI *pfnEndDocPort)(HANDLE hPort);
63  BOOL  (WINAPI *pfnClosePort)(HANDLE hPort);
64  BOOL  (WINAPI *pfnAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
65  BOOL  (WINAPI *pfnAddPortEx)(LPWSTR pName, DWORD Level, LPBYTE lpBuffer,
66                 LPWSTR lpMonitorName);
67  BOOL  (WINAPI *pfnConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
68  BOOL  (WINAPI *pfnDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
69  BOOL  (WINAPI *pfnGetPrinterDataFromPort)(HANDLE hPort, DWORD ControlID,
70                 LPWSTR pValueName, LPWSTR lpInBuffer, DWORD cbInBuffer,
71                 LPWSTR lpOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbReturned);
72  BOOL  (WINAPI *pfnSetPortTimeOuts)(HANDLE hPort, LPCOMMTIMEOUTS lpCTO,
73                 DWORD reserved);
74  BOOL  (WINAPI *pfnXcvOpenPort)(LPCWSTR pszObject, ACCESS_MASK GrantedAccess, PHANDLE phXcv);
75  DWORD (WINAPI *pfnXcvDataPort)(HANDLE hXcv, LPCWSTR pszDataName,
76                 PBYTE pInputData, DWORD cbInputData,
77                 PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded);
78  BOOL  (WINAPI *pfnXcvClosePort)(HANDLE hXcv);
79 } MONITOR, *LPMONITOR;
80
81 typedef struct _MONITOR2 {
82  DWORD cbSize;
83  BOOL  (WINAPI *pfnEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
84                 DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
85  BOOL  (WINAPI *pfnOpenPort)(LPWSTR pName, PHANDLE pHandle);
86  BOOL  (WINAPI *pfnOpenPortEx)(LPWSTR pPortName, LPWSTR pPrinterName,
87                 PHANDLE pHandle, struct _MONITOR2 *pMonitor2);
88  BOOL  (WINAPI *pfnStartDocPort)(HANDLE hPort, LPWSTR pPrinterName,
89                 DWORD JobId, DWORD Level, LPBYTE pDocInfo);
90  BOOL  (WINAPI *pfnWritePort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
91                 LPDWORD pcbWritten);
92  BOOL  (WINAPI *pfnReadPort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
93                 LPDWORD pcbRead);
94  BOOL  (WINAPI *pfnEndDocPort)(HANDLE hPort);
95  BOOL  (WINAPI *pfnClosePort)(HANDLE hPort);
96  BOOL  (WINAPI *pfnAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
97  BOOL  (WINAPI *pfnAddPortEx)(LPWSTR pName, DWORD Level, LPBYTE lpBuffer,
98                 LPWSTR lpMonitorName);
99  BOOL  (WINAPI *pfnConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
100  BOOL  (WINAPI *pfnDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
101  BOOL  (WINAPI *pfnGetPrinterDataFromPort)(HANDLE hPort, DWORD ControlID,
102                 LPWSTR pValueName, LPWSTR lpInBuffer, DWORD cbInBuffer,
103                 LPWSTR lpOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbReturned);
104  BOOL  (WINAPI *pfnSetPortTimeOuts)(HANDLE hPort, LPCOMMTIMEOUTS lpCTO,
105                 DWORD reserved);
106  BOOL  (WINAPI *pfnXcvOpenPort)(HANDLE hMonitor, LPCWSTR pszObject,
107                 ACCESS_MASK GrantedAccess, PHANDLE phXcv);
108  DWORD (WINAPI *pfnXcvDataPort)(HANDLE hXcv, LPCWSTR pszDataName,
109                 PBYTE pInputData, DWORD cbInputData,
110                 PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded);
111  BOOL  (WINAPI *pfnXcvClosePort)(HANDLE hXcv);
112  /* Additions from MONITOR to MONITOR2 */
113  VOID  (WINAPI *pfnShutdown)(HANDLE hMonitor);
114  DWORD (WINAPI *pfnSendRecvBidiDataFromPort)(HANDLE hPort, DWORD dwAccessBit,
115                 LPCWSTR pAction, PBIDI_REQUEST_CONTAINER pReqData,
116                 PBIDI_RESPONSE_CONTAINER *ppResData);
117 } MONITOR2, *LPMONITOR2, *PMONITOR2;
118
119 typedef struct _MONITOREX {
120  DWORD      dwMonitorSize;
121  MONITOR    Monitor;
122 } MONITOREX, *LPMONITOREX;
123
124 typedef struct _MONITORREG {
125  DWORD cbSize;
126  LONG  (WINAPI *fpCreateKey)(HANDLE hcKey, LPCWSTR pszSubKey, DWORD dwOptions,
127                 REGSAM samDesired, PSECURITY_ATTRIBUTES pSecurityAttributes,
128                 PHANDLE phckResult, PDWORD pdwDisposition, HANDLE hSpooler);
129  LONG  (WINAPI *fpOpenKey)(HANDLE hcKey, LPCWSTR pszSubKey, REGSAM samDesired,
130                 PHANDLE phkResult, HANDLE hSpooler);
131  LONG  (WINAPI *fpCloseKey)(HANDLE hcKey, HANDLE hSpooler);
132  LONG  (WINAPI *fpDeleteKey)(HANDLE hcKey, LPCWSTR pszSubKey, HANDLE hSpooler);
133  LONG  (WINAPI *fpEnumKey)(HANDLE hcKey, DWORD dwIndex, LPWSTR pszName,
134                 PDWORD pcchName, PFILETIME pftLastWriteTime, HANDLE hSpooler);
135  LONG  (WINAPI *fpQueryInfoKey)(HANDLE hcKey, PDWORD pcSubKeys, PDWORD pcbKey,
136                 PDWORD pcValues, PDWORD pcbValue, PDWORD pcbData,
137                 PDWORD pcbSecurityDescriptor, PFILETIME pftLastWriteTime,
138                 HANDLE hSpooler);
139  LONG  (WINAPI *fpSetValue)(HANDLE hcKey, LPCWSTR pszValue, DWORD dwType,
140                 const BYTE* pData, DWORD cbData, HANDLE hSpooler);
141  LONG  (WINAPI *fpDeleteValue)(HANDLE hcKey, LPCWSTR pszValue, HANDLE hSpooler);
142  LONG  (WINAPI *fpEnumValue)(HANDLE hcKey, DWORD dwIndex, LPWSTR pszValue,
143                 PDWORD pcbValue, PDWORD pType, PBYTE pData, PDWORD pcbData,
144                 HANDLE hSpooler);
145  LONG  (WINAPI *fpQueryValue)(HANDLE hcKey, LPCWSTR pszValue, PDWORD pType,
146                 PBYTE pData, PDWORD pcbData, HANDLE hSpooler);
147 } MONITORREG, *PMONITORREG;
148
149 typedef struct _MONITORINIT {
150  DWORD       cbSize;
151  HANDLE      hSpooler;
152  HANDLE      hckRegistryRoot;
153  PMONITORREG pMonitorReg;
154  BOOL        bLocal;
155 } MONITORINIT, *PMONITORINIT;
156
157 typedef struct _MONITORUI {
158  DWORD dwMonitorUISize;
159  BOOL  (WINAPI *pfnAddPortUI)(PCWSTR pszServer, HWND hWnd,
160                 PCWSTR pszPortNameIn, PWSTR *ppszPortNameOut);
161  BOOL  (WINAPI *pfnConfigurePortUI)(PCWSTR pName, HWND hWnd, PCWSTR pPortName);
162  BOOL  (WINAPI *pfnDeletePortUI)(PCWSTR pszServer, HWND hWnd, PCWSTR pszPortName);
163 }MONITORUI, *PMONITORUI;
164
165 typedef struct _PRINTER_NOTIFY_INIT {
166  DWORD  Size;
167  DWORD  Reserved;
168  DWORD  PollTime;
169 } PRINTER_NOTIFY_INIT, *LPPRINTER_NOTIFY_INIT, *PPRINTER_NOTIFY_INIT;
170
171 typedef struct _PRINTPROCESSOROPENDATA {
172  PDEVMODEW pDevMode;
173  LPWSTR    pDatatype;
174  LPWSTR    pParameters;
175  LPWSTR    pDocumentName;
176  DWORD     JobId;
177  LPWSTR    pOutputFile;
178  LPWSTR    pPrinterName;
179 } PRINTPROCESSOROPENDATA, *LPPRINTPROCESSOROPENDATA, *PPRINTPROCESSOROPENDATA;
180
181
182 /*
183  * WARNING: Many Functions are declared as "BOOL", but return ROUTER_*
184  */
185
186 typedef struct _PRINTPROVIDOR {
187  BOOL   (WINAPI *fpOpenPrinter)(LPWSTR lpPrinterName, HANDLE *phPrinter,
188                  LPPRINTER_DEFAULTSW pDefault);
189  BOOL   (WINAPI *fpSetJob)(HANDLE hPrinter, DWORD JobID, DWORD Level,
190                  LPBYTE pJob, DWORD Command);
191  BOOL   (WINAPI *fpGetJob)(HANDLE hPrinter, DWORD JobID, DWORD Level,
192                  LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded);
193  BOOL   (WINAPI *fpEnumJobs)(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs,
194                  DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded,
195                  LPDWORD pcReturned);
196  HANDLE (WINAPI *fpAddPrinter)(LPWSTR pName, DWORD Level, LPBYTE pPrinter);
197  BOOL   (WINAPI *fpDeletePrinter)(HANDLE hPrinter);
198  BOOL   (WINAPI *fpSetPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
199                  DWORD Command);
200  BOOL   (WINAPI *fpGetPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
201                  DWORD cbBuf, LPDWORD pcbNeeded);
202  BOOL   (WINAPI *fpEnumPrinters)(DWORD dwType, LPWSTR lpszName, DWORD dwLevel,
203                  LPBYTE lpbPrinters, DWORD cbBuf, LPDWORD lpdwNeeded,
204                  LPDWORD lpdwReturned);
205  BOOL   (WINAPI *fpAddPrinterDriver)(LPWSTR pName, DWORD Level,
206                  LPBYTE pDriverInfo);
207  BOOL   (WINAPI *fpEnumPrinterDrivers)(LPWSTR pName, LPWSTR pEnvironment,
208                  DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf,
209                  LPDWORD pcbNeeded, LPDWORD pcbReturned);
210  BOOL   (WINAPI *fpGetPrinterDriver)(HANDLE hPrinter, LPWSTR pEnvironment,
211                  DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf,
212                  LPDWORD pcbNeeded);
213  BOOL   (WINAPI *fpGetPrinterDriverDirectory)(LPWSTR pName, LPWSTR pEnvironment,
214                  DWORD Level, LPBYTE pDriverDirectory, DWORD cbBuf,
215                  LPDWORD pcbNeeded);
216  BOOL   (WINAPI *fpDeletePrinterDriver)(LPWSTR pName, LPWSTR pEnvironment,
217                  LPWSTR pDriverName);
218  BOOL   (WINAPI *fpAddPrintProcessor)(LPWSTR pName, LPWSTR pEnvironment,
219                  LPWSTR pPathName, LPWSTR pPrintProcessorName);
220  BOOL   (WINAPI *fpEnumPrintProcessors)(LPWSTR pName, LPWSTR pEnvironment,
221                  DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf,
222                  LPDWORD pcbNeeded, LPDWORD pcbReturned);
223  BOOL   (WINAPI *fpGetPrintProcessorDirectory)(LPWSTR pName, LPWSTR pEnvironment,
224                  DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf,
225                  LPDWORD pcbNeeded);
226  BOOL   (WINAPI *fpDeletePrintProcessor)(LPWSTR pName, LPWSTR pEnvironment,
227                  LPWSTR pPrintProcessorName);
228  BOOL   (WINAPI *fpEnumPrintProcessorDatatypes)(LPWSTR pName,
229                  LPWSTR pPrintProcessorName, DWORD Level, LPBYTE pDatatypes,
230                  DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcbReturned);
231  DWORD  (WINAPI *fpStartDocPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo);
232  BOOL   (WINAPI *fpStartPagePrinter)(HANDLE hPrinter);
233  BOOL   (WINAPI *fpWritePrinter)(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
234                  LPDWORD pcWritten);
235  BOOL   (WINAPI *fpEndPagePrinter)(HANDLE hPrinter);
236  BOOL   (WINAPI *fpAbortPrinter)(HANDLE hPrinter);
237  BOOL   (WINAPI *fpReadPrinter)(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
238                  LPDWORD pNoBytesRead);
239  BOOL   (WINAPI *fpEndDocPrinter)(HANDLE hPrinter);
240  BOOL   (WINAPI *fpAddJob)(HANDLE hPrinter, DWORD Level, LPBYTE pData,
241                  DWORD cbBuf, LPDWORD pcbNeeded);
242  BOOL   (WINAPI *fpScheduleJob)(HANDLE hPrinter, DWORD JobID);
243  DWORD  (WINAPI *fpGetPrinterData)(HANDLE hPrinter, LPWSTR pValueName,
244                  LPDWORD pType, LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);
245  DWORD  (WINAPI *fpSetPrinterData)(HANDLE hPrinter, LPWSTR pValueName,
246                  DWORD Type, LPBYTE pData, DWORD cbData);
247  DWORD  (WINAPI *fpWaitForPrinterChange)(HANDLE hPrinter, DWORD Flags);
248  BOOL   (WINAPI *fpClosePrinter)(HANDLE phPrinter);
249  BOOL   (WINAPI *fpAddForm)(HANDLE hPrinter, DWORD Level, LPBYTE pForm);
250  BOOL   (WINAPI *fpDeleteForm)(HANDLE hPrinter, LPWSTR pFormName);
251  BOOL   (WINAPI *fpGetForm)(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
252                  LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded);
253  BOOL   (WINAPI *fpSetForm)(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
254                  LPBYTE pForm);
255  BOOL   (WINAPI *fpEnumForms)(HANDLE hPrinter, DWORD Level, LPBYTE pForm,
256                  DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
257  BOOL   (WINAPI *fpEnumMonitors)(LPWSTR pName, DWORD Level, LPBYTE pMonitors,
258                  DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
259  BOOL   (WINAPI *fpEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
260                  DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
261  BOOL   (WINAPI *fpAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
262  BOOL   (WINAPI *fpConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
263  BOOL   (WINAPI *fpDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
264  HANDLE (WINAPI *fpCreatePrinterIC)(HANDLE  hPrinter, LPDEVMODEW  pDevMode);
265  BOOL   (WINAPI *fpPlayGdiScriptOnPrinterIC)(HANDLE  hPrinterIC, LPBYTE pIn,
266                  DWORD cIn, LPBYTE pOut, DWORD cOut, DWORD  ul);
267  BOOL   (WINAPI *fpDeletePrinterIC)(HANDLE hPrinterIC);
268  BOOL   (WINAPI *fpAddPrinterConnection)(LPWSTR pName);
269  BOOL   (WINAPI *fpDeletePrinterConnection)(LPWSTR pName);
270  DWORD  (WINAPI *fpPrinterMessageBox)(HANDLE hPrinter, DWORD Error, HWND hWnd,
271                  LPWSTR pText, LPWSTR pCaption, DWORD dwType);
272  BOOL   (WINAPI *fpAddMonitor)(LPWSTR pName, DWORD Level, LPBYTE pMonitors);
273  BOOL   (WINAPI *fpDeleteMonitor)(LPWSTR pName, LPWSTR pEnvironment,
274                  LPWSTR pMonitorName);
275  BOOL   (WINAPI *fpResetPrinter)(HANDLE hPrinter, LPPRINTER_DEFAULTSW pDefault);
276  BOOL   (WINAPI *fpGetPrinterDriverEx)(HANDLE hPrinter, LPWSTR pEnvironment,
277                  DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded,
278                  DWORD dwClientMajorVersion, DWORD dwClientMinorVersion,
279                  PDWORD pdwServerMajorVersion, PDWORD pdwServerMinorVersion);
280  HANDLE (WINAPI *fpFindFirstPrinterChangeNotification)(HANDLE hPrinter,
281                  DWORD fdwFlags, DWORD fdwOptions, LPVOID pPrinterNotifyOptions);
282  BOOL   (WINAPI *fpFindClosePrinterChangeNotification)(HANDLE hChange);
283  BOOL   (WINAPI *fpAddPortEx)(LPWSTR, DWORD, LPBYTE, LPWSTR);
284  BOOL   (WINAPI *fpShutDown)(LPVOID pvReserved);
285  BOOL   (WINAPI *fpRefreshPrinterChangeNotification)(HANDLE hPrinter,
286                  DWORD Reserved, PVOID pvReserved, PVOID pPrinterNotifyInfo);
287  BOOL   (WINAPI *fpOpenPrinterEx)(LPWSTR pPrinterName, LPHANDLE phPrinter,
288                  LPPRINTER_DEFAULTSW pDefault, LPBYTE pClientInfo, DWORD Level);
289  HANDLE (WINAPI *fpAddPrinterEx)(LPWSTR pName, DWORD Level, LPBYTE pPrinter,
290                  LPBYTE pClientInfo, DWORD ClientInfoLevel);
291  BOOL   (WINAPI *fpSetPort)(LPWSTR pName, LPWSTR pPortName, DWORD dwLevel,
292                  LPBYTE pPortInfo);
293  DWORD  (WINAPI *fpEnumPrinterData)( HANDLE hPrinter, DWORD dwIndex,
294                  LPWSTR pValueName, DWORD cbValueName, LPDWORD pcbValueName,
295                  LPDWORD pType, LPBYTE pData, DWORD cbData, LPDWORD pcbData);
296  DWORD  (WINAPI *fpDeletePrinterData)(HANDLE hPrinter, LPWSTR  pValueName);
297  DWORD  (WINAPI *fpClusterSplOpen)(LPCWSTR pszServer, LPCWSTR pszResource,
298                  PHANDLE phSpooler, LPCWSTR pszName, LPCWSTR pszAddress);
299  DWORD  (WINAPI *fpClusterSplClose)(HANDLE hSpooler);
300  DWORD  (WINAPI *fpClusterSplIsAlive)(HANDLE  hSpooler);
301  DWORD  (WINAPI *fpSetPrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
302                  LPCWSTR pValueName, DWORD Type, LPBYTE pData, DWORD cbData);
303  DWORD  (WINAPI *fpGetPrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
304                  LPCWSTR pValueName, LPDWORD pType, LPBYTE pData, DWORD nSize,
305                  LPDWORD pcbNeeded);
306  DWORD  (WINAPI *fpEnumPrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
307                  LPBYTE pEnumValues, DWORD cbEnumValues, LPDWORD pcbEnumValues,
308                  LPDWORD pnEnumValues);
309  DWORD  (WINAPI *fpEnumPrinterKey)(HANDLE hPrinter, LPCWSTR pKeyName,
310                  LPWSTR pSubkey, DWORD cbSubkey, LPDWORD  pcbSubkey);
311  DWORD  (WINAPI *fpDeletePrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
312                  LPCWSTR pValueName);
313  DWORD  (WINAPI *fpDeletePrinterKey)(HANDLE hPrinter, LPCWSTR pKeyName);
314  BOOL   (WINAPI *fpSeekPrinter)(HANDLE hPrinter, LARGE_INTEGER liDistanceToMove,
315                  PLARGE_INTEGER pliNewPointer, DWORD dwMoveMethod, BOOL bWrite);
316  BOOL   (WINAPI *fpDeletePrinterDriverEx)(LPWSTR pName, LPWSTR pEnvironment,
317                  LPWSTR pDriverName, DWORD dwDeleteFlag, DWORD dwVersionNum);
318  BOOL   (WINAPI *fpAddPerMachineConnection)(LPCWSTR pServer,
319                  LPCWSTR pPrinterName, LPCWSTR pPrintServer, LPCWSTR pProvider);
320  BOOL   (WINAPI *fpDeletePerMachineConnection)(LPCWSTR pServer,
321                  LPCWSTR pPrinterName);
322  BOOL   (WINAPI *fpEnumPerMachineConnections)(LPCWSTR pServer,
323                  LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded,
324                  LPDWORD pcReturned);
325  BOOL   (WINAPI *fpXcvData)(HANDLE hXcv, LPCWSTR pszDataName, PBYTE pInputData,
326                  DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData,
327                  PDWORD pcbOutputNeeded, PDWORD pdwStatus);
328  BOOL   (WINAPI *fpAddPrinterDriverEx)(LPWSTR pName, DWORD Level,
329                  LPBYTE pDriverInfo, DWORD  dwFileCopyFlags);
330  BOOL   (WINAPI *fpSplReadPrinter)(HANDLE hPrinter, LPBYTE *pBuf, DWORD cbBuf);
331  BOOL   (WINAPI *fpDriverUnloadComplete)(LPWSTR pDriverFile);
332  BOOL   (WINAPI *fpGetSpoolFileInfo)(HANDLE hPrinter, LPWSTR *pSpoolDir,
333                  LPHANDLE phFile, HANDLE hSpoolerProcess, HANDLE hAppProcess);
334  BOOL   (WINAPI *fpCommitSpoolData)(HANDLE hPrinter, DWORD cbCommit);
335  BOOL   (WINAPI *fpCloseSpoolFileHandle)(HANDLE hPrinter);
336  BOOL   (WINAPI *fpFlushPrinter)(HANDLE hPrinter, LPBYTE pBuf, DWORD cbBuf,
337                  LPDWORD pcWritten, DWORD cSleep);
338  DWORD  (WINAPI *fpSendRecvBidiData)(HANDLE hPort, LPCWSTR pAction,
339                  LPBIDI_REQUEST_CONTAINER pReqData,
340                  LPBIDI_RESPONSE_CONTAINER *ppResData);
341  BOOL   (WINAPI *fpAddDriverCatalog)(HANDLE hPrinter, DWORD dwLevel,
342                  VOID *pvDriverInfCatInfo, DWORD dwCatalogCopyFlags);
343 } PRINTPROVIDOR, *LPPRINTPROVIDOR;
344
345 typedef struct _SPLCLIENT_INFO_1 {
346  DWORD  dwSize;
347  LPWSTR pMachineName;
348  LPWSTR pUserName;
349  DWORD  dwBuildNum;
350  DWORD  dwMajorVersion;
351  DWORD  dwMinorVersion;
352  WORD   wProcessorArchitecture;
353 } SPLCLIENT_INFO_1, *LPSPLCLIENT_INFO_1, *PSPLCLIENT_INFO_1;
354
355 /* DECLARATIONS */
356
357 HANDLE WINAPI CreatePrinterIC(HANDLE hPrinter, LPDEVMODEW pDevMode);
358 BOOL   WINAPI PlayGdiScriptOnPrinterIC(HANDLE hPrinterIC, LPBYTE pIn,
359               DWORD cIn, LPBYTE pOut, DWORD cOut, DWORD ul);
360 BOOL   WINAPI DeletePrinterIC(HANDLE hPrinterIC);
361 BOOL   WINAPI DevQueryPrint(HANDLE hPrinter, LPDEVMODEW pDevMode, DWORD *pResID);
362
363 /* Security and Access */
364 HANDLE WINAPI RevertToPrinterSelf(VOID);
365 BOOL   WINAPI ImpersonatePrinterClient(HANDLE  hToken);
366 BOOL   WINAPI OpenPrinterToken(PHANDLE phToken);
367 BOOL   WINAPI SetPrinterToken(HANDLE hToken);
368 BOOL   WINAPI ClosePrinterToken(HANDLE hToken);
369
370 /* Notification */
371 BOOL   WINAPI ReplyPrinterChangeNotification(HANDLE hNotify, DWORD fdwFlags,
372               PDWORD pdwResult, PVOID pPrinterNotifyInfo);
373 BOOL   WINAPI PartialReplyPrinterChangeNotification(HANDLE hNotify,
374               PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc);
375 PPRINTER_NOTIFY_INFO RouterAllocPrinterNotifyInfo(DWORD cPrinterNotifyInfoData);
376 BOOL   WINAPI RouterFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo);
377 BOOL   WINAPI AppendPrinterNotifyInfoData(PPRINTER_NOTIFY_INFO pInfoDest,
378               PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc, DWORD fdwFlags);
379 DWORD  WINAPI CallRouterFindFirstPrinterChangeNotification(HANDLE hPrinter,
380               DWORD fdwFlags, DWORD fdwOptions, HANDLE hNotify, PVOID pvReserved);
381
382 /* Port monitor / Language monitor / Print monitor */
383 LPMONITOR2  WINAPI InitializePrintMonitor2(PMONITORINIT pMonitorInit,
384                    PHANDLE phMonitor);
385 PMONITORUI  WINAPI InitializePrintMonitorUI(VOID);
386 LPMONITOREX WINAPI InitializePrintMonitor(LPWSTR pRegistryRoot);
387 BOOL        WINAPI InitializeMonitorEx(LPWSTR pRegistryRoot, LPMONITOR pMonitor);
388 BOOL        WINAPI InitializeMonitor(LPWSTR pRegistryRoot);
389
390 BOOL  WINAPI OpenPort(LPWSTR pName, PHANDLE pHandle);
391 BOOL  WINAPI WritePort(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
392              LPDWORD pcbWritten);
393 BOOL  WINAPI ReadPort(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
394              LPDWORD pcbRead);
395 BOOL  WINAPI ClosePort(HANDLE hPort);
396
397 /* Print processor */
398 HANDLE WINAPI OpenPrintProcessor(LPWSTR pPrinterName,
399               PPRINTPROCESSOROPENDATA pPrintProcessorOpenData);
400 BOOL   WINAPI PrintDocumentOnPrintProcessor(HANDLE hPrintProcessor,
401               LPWSTR pDocumentName);
402 BOOL   WINAPI ClosePrintProcessor(HANDLE hPrintProcessor);
403 BOOL   WINAPI ControlPrintProcessor(HANDLE hPrintProcessor, DWORD Command);
404 BOOL   WINAPI InstallPrintProcessor(HWND hWnd);
405
406 /* Print provider */
407 BOOL   WINAPI InitializePrintProvidor(LPPRINTPROVIDOR pPrintProvidor,
408               DWORD cbPrintProvidor, LPWSTR pFullRegistryPath);
409 BOOL   WINAPI ProvidorFindFirstPrinterChangeNotification(HANDLE hPrinter,
410               DWORD fdwFlags, DWORD fdwOptions, HANDLE hNotify,
411               PVOID pvReserved0, PVOID pvReserved1);
412 BOOL   WINAPI ProvidorFindClosePrinterChangeNotification(HANDLE hPrinter);
413
414 /* Spooler */
415 BOOL   WINAPI SpoolerFindFirstPrinterChangeNotification(HANDLE hPrinter,
416               DWORD fdwFlags, DWORD fdwOptions, PHANDLE phEvent,
417               PVOID pPrinterNotifyOptions, PVOID pvReserved);
418 BOOL   WINAPI SpoolerFindNextPrinterChangeNotification(HANDLE hPrinter,
419               LPDWORD pfdwChange, PVOID pvReserved0, PVOID ppPrinterNotifyInfo);
420 VOID   WINAPI SpoolerFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo);
421 BOOL   WINAPI SpoolerFindClosePrinterChangeNotification(HANDLE hPrinter);
422
423 #ifdef __cplusplus
424 } /* extern "C" */
425 #endif
426
427 #endif  /* _WINSPLP_ */