280 lines
6.1 KiB
C
280 lines
6.1 KiB
C
/******************************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);
|
|
|