|
|
/******************************Module*Header*******************************\
* Module Name: ntgdispl.h * * Created: 21-Feb-1995 10:05:31 * Author: Eric Kutter [erick] * * Copyright (c) Microsoft Corporation. All rights reserved. * \**************************************************************************/
#define GDISPOOL_API 0x80000000
#ifndef W32KAPI
#define W32KAPI DECLSPEC_ADDRSAFE
#endif
// NON-API GDISPOOL calls must NOT have MSB set
#define GDISPOOL_TERMINATETHREAD 0x00000000
#define GDISPOOL_INPUT2SMALL 0x00000001
#define GDISPOOL_GETPATHNAME 0x00000002
#define GDISPOOL_UNLOADDRIVER_COMPLETE 0x00000003
// API GDISPOOL messages MUST have MSB set
#define GDISPOOL_WRITE 0x80000000
#define GDISPOOL_OPENPRINTER 0x80000001
#define GDISPOOL_CLOSEPRINTER 0x80000002
#define GDISPOOL_ABORTPRINTER 0x80000003
#define GDISPOOL_STARTDOCPRINTER 0x80000004
#define GDISPOOL_STARTPAGEPRINTER 0x80000005
#define GDISPOOL_ENDPAGEPRINTER 0x80000006
#define GDISPOOL_ENDDOCPRINTER 0x80000007
#define GDISPOOL_GETPRINTERDRIVER 0x80000008
#define GDISPOOL_GETPRINTERDATA 0x80000009
#define GDISPOOL_SETPRINTERDATA 0x8000000a
#define GDISPOOL_ENUMFORMS 0x8000000b
#define GDISPOOL_GETFORM 0x8000000c
#define GDISPOOL_GETPRINTER 0x8000000d
DECLARE_HANDLE(HSPOOLOBJ);
/*********************************Class************************************\
* SPOOLESC * * structure used to communicate between the kernel and spooler process * * * History: * 27-Mar-1995 -by- Eric Kutter [erick] * Wrote it. \**************************************************************************/
typedef struct _SPOOLESC { ULONG cj; // size of this structure including ajData[]
ULONG iMsg; // message index GDISPOOL_...
HANDLE hSpool; // spoolss spooler handle
ULONG cjOut; // required size of output buffer
HSPOOLOBJ hso; // kernel spool obj
ULONG ulRet; // return value from spooler API
BYTE ajData[1]; } SPOOLESC, *PSPOOLESC;
/****************************************************************************
* GREOPENPRINTER * GRESTARTDOCPRINTER * GREWRITEPRINTER * GREGETPRINTERDATA * * The following structures are used package up the data unique to each * spooler API * * * History: * 5/1/1995 by Gerrit van Wingerden [gerritv] * Wrote it. *****************************************************************************/
typedef struct _GREOPENPRINTER { LONG cj; LONG cjName; LONG cjDatatype; LONG cjDevMode; PRINTER_DEFAULTSW pd; LONG alData[1];
} GREOPENPRINTER;
typedef struct _GREGETPRINTERDRIVER { LONG cj; LONG cjEnv; DWORD dwLevel; LONG cjData; LONG alData[1]; } GREGETPRINTERDRIVER;
typedef struct _GRESTARTDOCPRINTER { LONG cj; LONG cjDocName; LONG cjOutputFile; HANDLE hFile; DWORD TargetProcessID; LONG cjDatatype; LONG cjData; LONG alData[1]; } GRESTARTDOCPRINTER;
typedef struct _GREWRITEPRINTER { LONG cj; PULONG pUserModeData; ULONG cjUserModeData; LONG cjData; LONG alData[1]; } GREWRITEPRINTER;
typedef struct _GREGETPRINTERDATA { LONG cj; LONG cjValueName; DWORD dwType; DWORD dwNeeded; LONG cjData; LONG alData[1]; } GREGETPRINTERDATA;
typedef struct _GRESETPRINTERDATA { LONG cj; LONG cjType; LONG cjPrinterData; DWORD dwType; LONG alData[1]; } GRESETPRINTERDATA;
typedef struct _GREENUMFORMS { LONG cj; DWORD dwLevel; LONG cjData; LONG nForms; LONG alData[1]; } GREENUMFORMS;
typedef struct _GREGETPRINTER { LONG cj; DWORD dwLevel; LONG cjData; LONG alData[1]; } GREGETPRINTER;
typedef struct _GREGETFORM { LONG cj; LONG cjFormName; DWORD dwLevel; LONG cjData; LONG alData[1]; } GREGETFORM;
typedef struct _GREINPUT2SMALL { LONG cj; DWORD dwNeeded; BYTE *pjPsm; } GREINPUT2SMALL;
typedef struct _GETPATHNAME { LONG cj; WCHAR awcPath[MAX_PATH+1]; } GREGETPATHNAME;
/**************************************************************************\
* * gre internal spooler entry points * \**************************************************************************/
ULONG GreGetSpoolMessage(PSPOOLESC, PBYTE, ULONG, PULONG, ULONG);
BOOL WINAPI GreEnumFormsW( HANDLE hSpool, GREENUMFORMS *pEnumForms, GREENUMFORMS *pEnumFormsReturn, LONG cjOut );
BOOL GreGenericW( HANDLE hSpool, PULONG pX, PULONG pXReturn, LONG cjOut, LONG MessageID, ULONG ulFlag );
BOOL WINAPI GreGetPrinterDriverW( HANDLE hSpool, GREGETPRINTERDRIVER *pGetPrinterDriver, GREGETPRINTERDRIVER *pGetPrinterDriverReturn, LONG cjOut );
DWORD GreStartDocPrinterW( HANDLE hSpool, GRESTARTDOCPRINTER *pStartDocPrinter, GRESTARTDOCPRINTER *pStartDocPrinterReturn );
BOOL WINAPI GreOpenPrinterW( GREOPENPRINTER *pOpenPrinter, LPHANDLE phPrinter);
ULONG GreWritePrinter( HANDLE hSpool, GREWRITEPRINTER *pWritePrinter);
BOOL GrePrinterDriverUnloadW( LPWSTR pDriverName);
W32KAPI BOOL APIENTRY NtGdiInitSpool();
W32KAPI ULONG APIENTRY NtGdiGetSpoolMessage( PSPOOLESC psesc, ULONG cjMsg, PULONG pulOut, ULONG cjOut);
ULONG APIENTRY SendSimpleMessage( HANDLE hSpool, ULONG iMsg, DWORD dwSpoolInstance);
BOOL APIENTRY GdiInitSpool();
ULONG APIENTRY GdiGetSpoolMessage( PSPOOLESC psesc, ULONG cjMsg, PULONG pulOut, ULONG cjOut);
ULONG APIENTRY GdiSpoolEsc( HANDLE hSpool, ULONG iMsg, PBYTE pjIn, ULONG cjIn, PBYTE pjOut, ULONG cjOut);
|