Home | History | Annotate | Download | only in include
      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   WINBOOL (WINAPI *fpOpenPrinter)(PWSTR lpPrinterName, HANDLE *phPrinter,
     90                                PPRINTER_DEFAULTSW pDefault);
     91   WINBOOL (WINAPI *fpSetJob)(HANDLE hPrinter, DWORD JobID, DWORD Level,
     92                           LPBYTE pJob, DWORD Command);
     93   WINBOOL (WINAPI *fpGetJob)(HANDLE hPrinter, DWORD JobID, DWORD Level,
     94                           LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded);
     95   WINBOOL (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   WINBOOL (WINAPI *fpDeletePrinter)(HANDLE hPrinter);
    100   WINBOOL (WINAPI *fpSetPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
    101                               DWORD Command);
    102   WINBOOL (WINAPI *fpGetPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
    103                               DWORD cbBuf, LPDWORD pcbNeeded);
    104   WINBOOL (WINAPI *fpEnumPrinters)(DWORD dwType, LPWSTR lpszName, DWORD dwLevel,
    105                                 LPBYTE lpbPrinters, DWORD cbBuf, LPDWORD lpdwNeeded,
    106                                 LPDWORD lpdwReturned);
    107   WINBOOL (WINAPI *fpAddPrinterDriver)(LPWSTR pName, DWORD Level, LPBYTE pDriverInfo);
    108   WINBOOL (WINAPI *fpEnumPrinterDrivers)(LPWSTR pName, LPWSTR pEnvironment,
    109                                       DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf,
    110                                       LPDWORD pcbNeeded, LPDWORD pcbReturned);
    111   WINBOOL (WINAPI *fpGetPrinterDriver)(HANDLE hPrinter, LPWSTR pEnvironment,
    112                                     DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf,
    113                                     LPDWORD pcbNeeded);
    114   WINBOOL (WINAPI *fpGetPrinterDriverDirectory)(LPWSTR pName, LPWSTR pEnvironment,
    115                                              DWORD Level, LPBYTE pDriverDirectory,
    116                                              DWORD cbBuf, LPDWORD pcbNeeded);
    117   WINBOOL (WINAPI *fpDeletePrinterDriver)(LPWSTR pName, LPWSTR pEnvironment,
    118                                        LPWSTR pDriverName);
    119   WINBOOL (WINAPI *fpAddPrintProcessor)(LPWSTR pName, LPWSTR pEnvironment,
    120                                      LPWSTR pPathName, LPWSTR pPrintProcessorName);
    121   WINBOOL (WINAPI *fpEnumPrintProcessors)(LPWSTR pName, LPWSTR pEnvironment,
    122                                        DWORD Level, LPBYTE pPrintProcessorInfo,
    123                                        DWORD cbBuf, LPDWORD pcbNeeded,
    124                                        LPDWORD pcbReturned);
    125   WINBOOL (WINAPI *fpGetPrintProcessorDirectory)(LPWSTR pName, LPWSTR pEnvironment,
    126                                               DWORD Level, LPBYTE pPrintProcessorInfo,
    127                                               DWORD cbBuf, LPDWORD pcbNeeded);
    128   WINBOOL (WINAPI *fpDeletePrintProcessor)(LPWSTR pName, LPWSTR pEnvironment,
    129                  LPWSTR pPrintProcessorName);
    130   WINBOOL (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   WINBOOL (WINAPI *fpStartPagePrinter)(HANDLE hPrinter);
    137   WINBOOL (WINAPI *fpWritePrinter)(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
    138                                 LPDWORD pcWritten);
    139   WINBOOL (WINAPI *fpEndPagePrinter)(HANDLE hPrinter);
    140   WINBOOL (WINAPI *fpAbortPrinter)(HANDLE hPrinter);
    141   WINBOOL (WINAPI *fpReadPrinter)(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
    142                                LPDWORD pNoBytesRead);
    143   WINBOOL (WINAPI *fpEndDocPrinter)(HANDLE hPrinter);
    144   WINBOOL (WINAPI *fpAddJob)(HANDLE hPrinter, DWORD Level, LPBYTE pData,
    145                           DWORD cbBuf, LPDWORD pcbNeeded);
    146   WINBOOL (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   WINBOOL (WINAPI *fpClosePrinter)(HANDLE phPrinter);
    154   WINBOOL (WINAPI *fpAddForm)(HANDLE hPrinter, DWORD Level, LPBYTE pForm);
    155   WINBOOL (WINAPI *fpDeleteForm)(HANDLE hPrinter, LPWSTR pFormName);
    156   WINBOOL (WINAPI *fpGetForm)(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
    157                            LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded);
    158   WINBOOL (WINAPI *fpSetForm)(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
    159                            LPBYTE pForm);
    160   WINBOOL (WINAPI *fpEnumForms)(HANDLE hPrinter, DWORD Level, LPBYTE pForm,
    161                              DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
    162   WINBOOL (WINAPI *fpEnumMonitors)(LPWSTR pName, DWORD Level, LPBYTE pMonitors,
    163                                 DWORD cbBuf, LPDWORD pcbNeeded,
    164                                 LPDWORD pcReturned);
    165   WINBOOL (WINAPI *fpEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
    166                              DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
    167   WINBOOL (WINAPI *fpAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
    168   WINBOOL (WINAPI *fpConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
    169   WINBOOL (WINAPI *fpDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
    170   HANDLE (WINAPI *fpCreatePrinterIC)(HANDLE hPrinter, LPDEVMODEW pDevMode);
    171   WINBOOL (WINAPI *fpPlayGdiScriptOnPrinterIC)(HANDLE hPrinterIC, LPBYTE pIn,
    172                                             DWORD cIn, LPBYTE pOut, DWORD cOut,
    173                                             DWORD ul);
    174   WINBOOL (WINAPI *fpDeletePrinterIC)(HANDLE hPrinterIC);
    175   WINBOOL (WINAPI *fpAddPrinterConnection)(LPWSTR pName);
    176   WINBOOL (WINAPI *fpDeletePrinterConnection)(LPWSTR pName);
    177   DWORD (WINAPI *fpPrinterMessageBox)(HANDLE hPrinter, DWORD Error, HWND hWnd,
    178                                       LPWSTR pText, LPWSTR pCaption,
    179                                       DWORD dwType);
    180   WINBOOL (WINAPI *fpAddMonitor)(LPWSTR pName, DWORD Level, LPBYTE pMonitors);
    181   WINBOOL (WINAPI *fpDeleteMonitor)(LPWSTR pName, LPWSTR pEnvironment,
    182                                  LPWSTR pMonitorName);
    183   WINBOOL (WINAPI *fpResetPrinter)(HANDLE hPrinter, LPPRINTER_DEFAULTSW pDefault);
    184   WINBOOL (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   WINBOOL (WINAPI *fpFindClosePrinterChangeNotification)(HANDLE hChange);
    196   WINBOOL (WINAPI *fpAddPortEx)(LPWSTR pName, DWORD Level, LPBYTE lpBuffer,
    197                              LPWSTR lpMonitorName);
    198   WINBOOL (WINAPI *fpShutDown)(LPVOID pvReserved);
    199   WINBOOL (WINAPI *fpRefreshPrinterChangeNotification)(HANDLE hPrinter,
    200                                                     DWORD Reserved,
    201                                                     PVOID pvReserved,
    202                                                     PVOID pPrinterNotifyInfo);
    203   WINBOOL (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   WINBOOL (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   WINBOOL (WINAPI *fpSeekPrinter)(HANDLE hPrinter, LARGE_INTEGER liDistanceToMove,
    235                                PLARGE_INTEGER pliNewPointer, DWORD dwMoveMethod,
    236                                WINBOOL bWrite);
    237   WINBOOL (WINAPI *fpDeletePrinterDriverEx)(LPWSTR pName, LPWSTR pEnvironment,
    238                                          LPWSTR pDriverName, DWORD dwDeleteFlag,
    239                                          DWORD dwVersionNum);
    240   WINBOOL (WINAPI *fpAddPerMachineConnection)(LPCWSTR pServer,
    241                                            LPCWSTR pPrinterName, LPCWSTR pPrintServer,
    242                                            LPCWSTR pProvider);
    243   WINBOOL (WINAPI *fpDeletePerMachineConnection)(LPCWSTR pServer,
    244                                               LPCWSTR pPrinterName);
    245   WINBOOL (WINAPI *fpEnumPerMachineConnections)(LPCWSTR pServer,
    246                                              LPBYTE pPrinterEnum, DWORD cbBuf,
    247                                              LPDWORD pcbNeeded,
    248                  LPDWORD pcReturned);
    249   WINBOOL (WINAPI *fpXcvData)(HANDLE hXcv, LPCWSTR pszDataName, PBYTE pInputData,
    250                            DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData,
    251                            PDWORD pcbOutputNeeded, PDWORD pdwStatus);
    252   WINBOOL (WINAPI *fpAddPrinterDriverEx)(LPWSTR pName, DWORD Level,
    253                                       LPBYTE pDriverInfo, DWORD dwFileCopyFlags);
    254   WINBOOL (WINAPI *fpSplReadPrinter)(HANDLE hPrinter, LPBYTE *pBuf, DWORD cbBuf);
    255   WINBOOL (WINAPI *fpDriverUnloadComplete)(LPWSTR pDriverFile);
    256   WINBOOL (WINAPI *fpGetSpoolFileInfo)(HANDLE hPrinter, LPWSTR *pSpoolDir,
    257                                     LPHANDLE phFile, HANDLE hSpoolerProcess,
    258                                     HANDLE hAppProcess);
    259   WINBOOL (WINAPI *fpCommitSpoolData)(HANDLE hPrinter, DWORD cbCommit);
    260   WINBOOL (WINAPI *fpCloseSpoolFileHandle)(HANDLE hPrinter);
    261   WINBOOL (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   WINBOOL (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   WINBOOL bLocal;
    315   LPCWSTR pszServerName;
    316 } MONITORINIT, *PMONITORINIT;
    317 
    318 typedef struct _MONITOR {
    319   WINBOOL (WINAPI *pfnEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
    320                               DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
    321   WINBOOL (WINAPI *pfnOpenPort)(LPWSTR pName, PHANDLE pHandle);
    322   WINBOOL (WINAPI *pfnOpenPortEx)(LPWSTR pPortName, LPWSTR pPrinterName,
    323                                PHANDLE pHandle, struct _MONITOR *pMonitor);
    324   WINBOOL (WINAPI *pfnStartDocPort)(HANDLE hPort, LPWSTR pPrinterName,
    325                                  DWORD JobId, DWORD Level, LPBYTE pDocInfo);
    326   WINBOOL (WINAPI *pfnWritePort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
    327                               LPDWORD pcbWritten);
    328   WINBOOL (WINAPI *pfnReadPort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
    329                              LPDWORD pcbRead);
    330   WINBOOL (WINAPI *pfnEndDocPort)(HANDLE hPort);
    331   WINBOOL (WINAPI *pfnClosePort)(HANDLE hPort);
    332   WINBOOL (WINAPI *pfnAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
    333   WINBOOL (WINAPI *pfnAddPortEx)(LPWSTR pName, DWORD Level, LPBYTE lpBuffer,
    334                               LPWSTR lpMonitorName);
    335   WINBOOL (WINAPI *pfnConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
    336   WINBOOL (WINAPI *pfnDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
    337   WINBOOL (WINAPI *pfnGetPrinterDataFromPort)(HANDLE hPort, DWORD ControlID,
    338                                            LPWSTR pValueName, LPWSTR lpInBuffer,
    339                                            DWORD cbInBuffer, LPWSTR lpOutBuffer,
    340                                            DWORD cbOutBuffer, LPDWORD lpcbReturned);
    341   WINBOOL (WINAPI *pfnSetPortTimeOuts)(HANDLE hPort, LPCOMMTIMEOUTS lpCTO,
    342                                     DWORD reserved);
    343   WINBOOL (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   WINBOOL (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   WINBOOL (WINAPI *pfnEnumPorts)(HANDLE hMonitor, LPWSTR pName, DWORD Level, LPBYTE pPorts,
    359                               DWORD cbBuf, LPDWORD pcbNeeded,
    360                               LPDWORD pcReturned);
    361   WINBOOL (WINAPI *pfnOpenPort)(HANDLE hMonitor, LPWSTR pName, PHANDLE pHandle);
    362   WINBOOL (WINAPI *pfnOpenPortEx)(HANDLE hMonitor, HANDLE hMonitorPort, LPWSTR pPortName, LPWSTR pPrinterName,
    363                                PHANDLE pHandle, struct _MONITOR2 *pMonitor2);
    364   WINBOOL (WINAPI *pfnStartDocPort)(HANDLE hPort, LPWSTR pPrinterName,
    365                                  DWORD JobId, DWORD Level, LPBYTE pDocInfo);
    366   WINBOOL (WINAPI *pfnWritePort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
    367                               LPDWORD pcbWritten);
    368   WINBOOL (WINAPI *pfnReadPort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
    369                              LPDWORD pcbRead);
    370   WINBOOL (WINAPI *pfnEndDocPort)(HANDLE hPort);
    371   WINBOOL (WINAPI *pfnClosePort)(HANDLE hPort);
    372   WINBOOL (WINAPI *pfnAddPort)(HANDLE hMonitor, LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
    373   WINBOOL (WINAPI *pfnAddPortEx)(HANDLE hMonitor, LPWSTR pName, DWORD Level, LPBYTE lpBuffer,
    374                               LPWSTR lpMonitorName);
    375   WINBOOL (WINAPI *pfnConfigurePort)(HANDLE hMonitor, LPWSTR pName, HWND hWnd, LPWSTR pPortName);
    376   WINBOOL (WINAPI *pfnDeletePort)(HANDLE hMonitor, LPWSTR pName, HWND hWnd, LPWSTR pPortName);
    377   WINBOOL (WINAPI *pfnGetPrinterDataFromPort)(HANDLE hPort, DWORD ControlID,
    378                                            LPWSTR pValueName, LPWSTR lpInBuffer,
    379                                            DWORD cbInBuffer, LPWSTR lpOutBuffer,
    380                                            DWORD cbOutBuffer, LPDWORD lpcbReturned);
    381   WINBOOL (WINAPI *pfnSetPortTimeOuts)(HANDLE hPort, LPCOMMTIMEOUTS lpCTO,
    382                                     DWORD reserved);
    383   WINBOOL (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   WINBOOL (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   WINBOOL (WINAPI *pfnAddPortUI)(PCWSTR pszServer, HWND hWnd,
    409                               PCWSTR pszPortNameIn, PWSTR *ppszPortNameOut);
    410   WINBOOL (WINAPI *pfnConfigurePortUI)(PCWSTR pName, HWND hWnd, PCWSTR pPortName);
    411   WINBOOL (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   WINBOOL 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 WINBOOL
    457 (CALLBACK *ROUTER_NOTIFY_CALLBACK)(
    458   DWORD dwCommand,
    459   PVOID pContext,
    460   DWORD dwColor,
    461   PPRINTER_NOTIFY_INFO pNofityInfo,
    462   DWORD fdwFlags,
    463   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 WINBOOL
    543 WINAPI
    544 InitializePrintProvidor(
    545   LPPRINTPROVIDOR pPrintProvidor,
    546   DWORD cbPrintProvidor,
    547   LPWSTR pFullRegistryPath);
    548 
    549 HANDLE
    550 WINAPI
    551 OpenPrintProcessor(
    552   LPWSTR pPrinterName,
    553   PPRINTPROCESSOROPENDATA pPrintProcessorOpenData);
    554 
    555 WINBOOL
    556 WINAPI
    557 PrintDocumentOnPrintProcessor(
    558   HANDLE hPrintProcessor,
    559   LPWSTR pDocumentName);
    560 
    561 WINBOOL
    562 WINAPI
    563 ClosePrintProcessor(
    564   HANDLE hPrintProcessor);
    565 
    566 WINBOOL
    567 WINAPI
    568 ControlPrintProcessor(
    569   HANDLE hPrintProcessor,
    570   DWORD Command);
    571 
    572 DWORD
    573 WINAPI
    574 GetPrintProcessorCapabilities(
    575   LPTSTR pValueName,
    576   DWORD dwAttributes,
    577   LPBYTE pData,
    578   DWORD nSize,
    579   LPDWORD pcbNeeded);
    580 
    581 WINBOOL
    582 WINAPI
    583 InitializeMonitor(
    584   LPWSTR pRegistryRoot);
    585 
    586 WINBOOL
    587 WINAPI
    588 OpenPort(
    589   LPWSTR pName,
    590   PHANDLE pHandle);
    591 
    592 WINBOOL
    593 WINAPI
    594 WritePort(
    595   HANDLE hPort,
    596   LPBYTE pBuffer,
    597   DWORD cbBuf,
    598   LPDWORD pcbWritten);
    599 
    600 WINBOOL
    601 WINAPI
    602 ReadPort(
    603   HANDLE hPort,
    604   LPBYTE pBuffer,
    605   DWORD cbBuffer,
    606   LPDWORD pcbRead);
    607 
    608 WINBOOL
    609 WINAPI
    610 ClosePort(
    611   HANDLE hPort);
    612 
    613 WINBOOL
    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 WINBOOL
    632 WINAPI
    633 XcvClosePort(
    634   HANDLE hXcv);
    635 
    636 WINBOOL
    637 WINAPI
    638 AddPortUI(
    639   PCWSTR pszServer,
    640   HWND hWnd,
    641   PCWSTR pszMonitorNameIn,
    642   PWSTR *ppszPortNameOut);
    643 
    644 WINBOOL
    645 WINAPI
    646 ConfigurePortUI(
    647   PCWSTR pszServer,
    648   HWND hWnd,
    649   PCWSTR pszPortName);
    650 
    651 WINBOOL
    652 WINAPI
    653 DeletePortUI(
    654   PCWSTR pszServer,
    655   HWND hWnd,
    656   PCWSTR pszPortName);
    657 
    658 WINBOOL
    659 WINAPI
    660 SplDeleteSpoolerPortStart(
    661   PCWSTR pPortName);
    662 
    663 WINBOOL
    664 WINAPI
    665 SplDeleteSpoolerPortEnd(
    666   PCWSTR pName,
    667   WINBOOL bDeletePort);
    668 
    669 WINBOOL
    670 WINAPI
    671 SpoolerCopyFileEvent(
    672   LPWSTR pszPrinterName,
    673   LPWSTR pszKey,
    674   DWORD dwCopyFileEvent);
    675 
    676 DWORD
    677 WINAPI
    678 GenerateCopyFilePaths(
    679   LPCWSTR pszPrinterName,
    680   LPCWSTR pszDirectory,
    681   LPBYTE pSplClientInfo,
    682   DWORD dwLevel,
    683   LPWSTR pszSourceDir,
    684   LPDWORD pcchSourceDirSize,
    685   LPWSTR pszTargetDir,
    686   LPDWORD pcchTargetDirSize,
    687   DWORD dwFlags);
    688 
    689 HANDLE WINAPI CreatePrinterIC(HANDLE hPrinter, LPDEVMODEW pDevMode);
    690 WINBOOL WINAPI PlayGdiScriptOnPrinterIC(HANDLE hPrinterIC, LPBYTE pIn,
    691                                      DWORD cIn, LPBYTE pOut, DWORD cOut, DWORD ul);
    692 WINBOOL WINAPI DeletePrinterIC(HANDLE hPrinterIC);
    693 WINBOOL WINAPI DevQueryPrint(HANDLE hPrinter, LPDEVMODEW pDevMode, DWORD *pResID);
    694 HANDLE WINAPI RevertToPrinterSelf(VOID);
    695 WINBOOL WINAPI ImpersonatePrinterClient(HANDLE hToken);
    696 WINBOOL WINAPI ReplyPrinterChangeNotification(HANDLE hNotify, DWORD fdwFlags,
    697                                            PDWORD pdwResult, PVOID pPrinterNotifyInfo);
    698 WINBOOL WINAPI ReplyPrinterChangeNotificationEx(HANDLE hNotify, DWORD dwColor,
    699                                              DWORD fdwFlags, PDWORD pdwResult,
    700                                              PVOID pPrinterNotifyInfo);
    701 WINBOOL WINAPI PartialReplyPrinterChangeNotification(HANDLE hNotify,
    702                                                   PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc);
    703 PPRINTER_NOTIFY_INFO WINAPI RouterAllocPrinterNotifyInfo(DWORD cPrinterNotifyInfoData);
    704 WINBOOL WINAPI RouterFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo);
    705 
    706 WINBOOL 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 WINBOOL WINAPI ProvidorFindFirstPrinterChangeNotification(HANDLE hPrinter,
    715                                                        DWORD fdwFlags,
    716                                                        DWORD fdwOptions,
    717                                                        HANDLE hNotify,
    718                                                        PVOID pvReserved0,
    719                                                        PVOID pvReserved1);
    720 WINBOOL WINAPI ProvidorFindClosePrinterChangeNotification(HANDLE hPrinter);
    721 
    722 /* Spooler */
    723 WINBOOL WINAPI SpoolerFindFirstPrinterChangeNotification(HANDLE hPrinter,
    724                                                       DWORD fdwFlags,
    725                                                       DWORD fdwOptions,
    726                                                       PHANDLE phEvent,
    727                                                       PVOID pPrinterNotifyOptions,
    728                                                       PVOID pvReserved);
    729 WINBOOL WINAPI SpoolerFindNextPrinterChangeNotification(HANDLE hPrinter,
    730                                                      LPDWORD pfdwChange,
    731                                                      PVOID pvReserved0,
    732                                                      PVOID ppPrinterNotifyInfo);
    733 VOID WINAPI SpoolerFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo);
    734 WINBOOL 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 WINBOOL 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 WINBOOL
    751 WINAPI
    752 SplPromptUIInUsersSession(
    753   HANDLE hPrinter,
    754   DWORD JobId,
    755   PSHOWUIPARAMS pUIParams,
    756   DWORD *pResponse);
    757 
    758 DWORD
    759 WINAPI
    760 SplIsSessionZero(
    761   HANDLE hPrinter,
    762   DWORD JobId,
    763   WINBOOL *pIsSessionZero);
    764 
    765 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
    766 
    767 #if (NTDDI_VERSION >= NTDDI_WS03)
    768 WINBOOL
    769 WINAPI
    770 GetJobAttributes(
    771   LPWSTR pPrinterName,
    772   LPDEVMODEW pDevmode,
    773   PATTRIBUTE_INFO_3 pAttributeInfo);
    774 #endif
    775 
    776 #if (NTDDI_VERSION >= NTDDI_VISTA)
    777 
    778 #define FILL_WITH_DEFAULTS   0x1
    779 
    780 WINBOOL
    781 WINAPI
    782 GetJobAttributesEx(
    783   LPWSTR pPrinterName,
    784   LPDEVMODEW pDevmode,
    785   DWORD dwLevel,
    786   LPBYTE pAttributeInfo,
    787   DWORD nSize,
    788   DWORD dwFlags);
    789 
    790 WINBOOL 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 WINBOOL WINAPI OpenPrinterToken(PHANDLE phToken);
    800 WINBOOL WINAPI SetPrinterToken(HANDLE hToken);
    801 WINBOOL WINAPI ClosePrinterToken(HANDLE hToken);
    802 WINBOOL WINAPI InstallPrintProcessor(HWND hWnd);
    803 
    804 #ifdef __cplusplus
    805 }
    806 #endif
    807