2015-05-06 12:47:20 +00:00
|
|
|
/*
|
2017-09-29 17:18:19 +00:00
|
|
|
* PROJECT: ReactOS Spooler API
|
|
|
|
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
2015-05-06 12:47:20 +00:00
|
|
|
* PURPOSE: Precompiled Header for all source files
|
2017-09-29 17:18:19 +00:00
|
|
|
* COPYRIGHT: Copyright 2015-2017 Colin Finck (colin@reactos.org)
|
2015-05-06 12:47:20 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _PRECOMP_H
|
|
|
|
#define _PRECOMP_H
|
|
|
|
|
|
|
|
#define WIN32_NO_STATUS
|
|
|
|
#include <windef.h>
|
|
|
|
#include <winbase.h>
|
2020-08-04 02:07:58 +00:00
|
|
|
#include <winuser.h>
|
2015-05-06 12:47:20 +00:00
|
|
|
#include <wingdi.h>
|
|
|
|
#include <winreg.h>
|
|
|
|
#include <winspool.h>
|
|
|
|
#include <winspool_c.h>
|
2020-08-04 02:07:58 +00:00
|
|
|
#include <winsplp.h>
|
2020-01-31 23:38:47 +00:00
|
|
|
#include <winddiui.h>
|
2018-01-17 09:13:25 +00:00
|
|
|
#include <ndk/rtlfuncs.h>
|
2020-02-12 18:59:23 +00:00
|
|
|
#include <strsafe.h>
|
2015-05-06 12:47:20 +00:00
|
|
|
|
2017-04-30 15:12:53 +00:00
|
|
|
#include <spoolss.h>
|
2018-01-17 09:13:25 +00:00
|
|
|
#include <marshalling/marshalling.h>
|
2017-04-30 15:12:53 +00:00
|
|
|
|
2020-08-04 04:03:40 +00:00
|
|
|
#include "wspool.h"
|
|
|
|
|
2015-05-06 12:47:20 +00:00
|
|
|
#include <wine/debug.h>
|
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(winspool);
|
|
|
|
|
2020-08-04 02:07:58 +00:00
|
|
|
#define SPOOLER_HANDLE_SIG 'gg'
|
|
|
|
|
[LOCALSPL, WINSPOOL]
Partially implement the whole StartDocPrinter, StartPagePrinter, ReadPrinter, WritePrinter, EndPagePrinter, EndDocPrinter, ClosePrinter group of functions.
They behave very differently based on whether spooled printing is enabled, whether it's a local or remote call, etc. Most information was gained by observing callchains under Windows.
So far, only the spooled path is implemented, the others need more investigation first.
Many other TODOs remain as well, see the comments.
Also make some more comments Doxygen-aware :)
svn path=/branches/colins-printing-for-freedom/; revision=68405
2015-07-16 15:03:47 +00:00
|
|
|
// Structures
|
|
|
|
/*
|
2020-08-04 02:07:58 +00:00
|
|
|
* Describes a handle returned by AddPrinterW or OpenPrinterW.
|
[LOCALSPL, WINSPOOL]
Partially implement the whole StartDocPrinter, StartPagePrinter, ReadPrinter, WritePrinter, EndPagePrinter, EndDocPrinter, ClosePrinter group of functions.
They behave very differently based on whether spooled printing is enabled, whether it's a local or remote call, etc. Most information was gained by observing callchains under Windows.
So far, only the spooled path is implemented, the others need more investigation first.
Many other TODOs remain as well, see the comments.
Also make some more comments Doxygen-aware :)
svn path=/branches/colins-printing-for-freedom/; revision=68405
2015-07-16 15:03:47 +00:00
|
|
|
*/
|
|
|
|
typedef struct _SPOOLER_HANDLE
|
|
|
|
{
|
2020-08-04 02:07:58 +00:00
|
|
|
DWORD_PTR Sig;
|
[LOCALSPL, WINSPOOL]
Partially implement the whole StartDocPrinter, StartPagePrinter, ReadPrinter, WritePrinter, EndPagePrinter, EndDocPrinter, ClosePrinter group of functions.
They behave very differently based on whether spooled printing is enabled, whether it's a local or remote call, etc. Most information was gained by observing callchains under Windows.
So far, only the spooled path is implemented, the others need more investigation first.
Many other TODOs remain as well, see the comments.
Also make some more comments Doxygen-aware :)
svn path=/branches/colins-printing-for-freedom/; revision=68405
2015-07-16 15:03:47 +00:00
|
|
|
BOOL bStartedDoc : 1;
|
2020-08-04 02:07:58 +00:00
|
|
|
BOOL bJob : 1;
|
|
|
|
BOOL bAnsi : 1;
|
|
|
|
BOOL bDocEvent : 1;
|
|
|
|
BOOL bTrayIcon : 1;
|
|
|
|
BOOL bNoColorProfile : 1;
|
|
|
|
BOOL bShared : 1;
|
|
|
|
BOOL bClosed : 1;
|
[LOCALSPL, WINSPOOL]
Partially implement the whole StartDocPrinter, StartPagePrinter, ReadPrinter, WritePrinter, EndPagePrinter, EndDocPrinter, ClosePrinter group of functions.
They behave very differently based on whether spooled printing is enabled, whether it's a local or remote call, etc. Most information was gained by observing callchains under Windows.
So far, only the spooled path is implemented, the others need more investigation first.
Many other TODOs remain as well, see the comments.
Also make some more comments Doxygen-aware :)
svn path=/branches/colins-printing-for-freedom/; revision=68405
2015-07-16 15:03:47 +00:00
|
|
|
DWORD dwJobID;
|
|
|
|
HANDLE hPrinter;
|
|
|
|
HANDLE hSPLFile;
|
2020-08-04 02:07:58 +00:00
|
|
|
DWORD cCount;
|
|
|
|
HANDLE hSpoolFileHandle;
|
|
|
|
DWORD dwOptions;
|
[LOCALSPL, WINSPOOL]
Partially implement the whole StartDocPrinter, StartPagePrinter, ReadPrinter, WritePrinter, EndPagePrinter, EndDocPrinter, ClosePrinter group of functions.
They behave very differently based on whether spooled printing is enabled, whether it's a local or remote call, etc. Most information was gained by observing callchains under Windows.
So far, only the spooled path is implemented, the others need more investigation first.
Many other TODOs remain as well, see the comments.
Also make some more comments Doxygen-aware :)
svn path=/branches/colins-printing-for-freedom/; revision=68405
2015-07-16 15:03:47 +00:00
|
|
|
}
|
|
|
|
SPOOLER_HANDLE, *PSPOOLER_HANDLE;
|
|
|
|
|
|
|
|
// main.c
|
|
|
|
extern HANDLE hProcessHeap;
|
2020-08-04 02:07:58 +00:00
|
|
|
extern CRITICAL_SECTION rtlCritSec;
|
[LOCALSPL, WINSPOOL]
Partially implement the whole StartDocPrinter, StartPagePrinter, ReadPrinter, WritePrinter, EndPagePrinter, EndDocPrinter, ClosePrinter group of functions.
They behave very differently based on whether spooled printing is enabled, whether it's a local or remote call, etc. Most information was gained by observing callchains under Windows.
So far, only the spooled path is implemented, the others need more investigation first.
Many other TODOs remain as well, see the comments.
Also make some more comments Doxygen-aware :)
svn path=/branches/colins-printing-for-freedom/; revision=68405
2015-07-16 15:03:47 +00:00
|
|
|
|
2020-02-12 18:52:34 +00:00
|
|
|
// utils.c
|
2020-05-26 18:21:25 +00:00
|
|
|
DWORD UnicodeToAnsiInPlace(PWSTR pwszField);
|
2020-08-04 02:07:58 +00:00
|
|
|
DWORD UnicodeToAnsiZZInPlace(PWSTR pwszzField);
|
2020-08-26 22:12:20 +00:00
|
|
|
SECURITY_DESCRIPTOR * get_sd(SECURITY_DESCRIPTOR *sd, DWORD *size);
|
2020-08-04 02:07:58 +00:00
|
|
|
LONG WINAPI IntProtectHandle(HANDLE,BOOL);
|
|
|
|
BOOL WINAPI IntUnprotectHandle(HANDLE);
|
2020-08-26 22:12:20 +00:00
|
|
|
VOID UpdateTrayIcon(HANDLE hPrinter, DWORD JobId);
|
2020-02-12 18:52:34 +00:00
|
|
|
|
2020-02-25 07:02:46 +00:00
|
|
|
// devmode.c
|
2020-08-04 02:07:58 +00:00
|
|
|
extern void RosConvertAnsiDevModeToUnicodeDevmode(PDEVMODEA pDevModeInput, PDEVMODEW *pDevModeOutput);
|
2020-02-25 07:02:46 +00:00
|
|
|
|
|
|
|
extern void RosConvertUnicodeDevModeToAnsiDevmode(PDEVMODEW pDevModeInput, PDEVMODEA pDevModeOutput);
|
|
|
|
|
2020-08-04 02:07:58 +00:00
|
|
|
//
|
|
|
|
// [MS-EMF] 2.2.27 UniversalFontId Object
|
|
|
|
//
|
|
|
|
typedef struct _UNIVERSAL_FONT_ID
|
|
|
|
{
|
|
|
|
ULONG CheckSum;
|
|
|
|
ULONG Index;
|
|
|
|
} UNIVERSAL_FONT_ID, *PUNIVERSAL_FONT_ID;
|
|
|
|
|
|
|
|
BOOL WINAPI IsValidDevmodeNoSizeW(PDEVMODEW pDevmode);
|
|
|
|
|
|
|
|
/* RtlCreateUnicodeStringFromAsciiz will return an empty string in the buffer
|
|
|
|
if passed a NULL string. This returns NULLs to the result.
|
|
|
|
*/
|
|
|
|
static inline PWSTR AsciiToUnicode( UNICODE_STRING * usBufferPtr, LPCSTR src )
|
|
|
|
{
|
|
|
|
if ( (src) )
|
|
|
|
{
|
|
|
|
RtlCreateUnicodeStringFromAsciiz(usBufferPtr, src);
|
|
|
|
return usBufferPtr->Buffer;
|
|
|
|
}
|
|
|
|
usBufferPtr->Buffer = NULL; /* so that RtlFreeUnicodeString won't barf */
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2015-05-06 12:47:20 +00:00
|
|
|
#endif
|