303 lines
5.9 KiB
C
303 lines
5.9 KiB
C
|
/******************** Function Prototypes file ***************************
|
||
|
* libproto.h
|
||
|
* Function prototypes for NT printer drivers library. Also includes
|
||
|
* a brief description of the function.
|
||
|
*
|
||
|
* 11:04 on Wed 14 Nov 1990 -by- Lindsay Harris [lindsayh]
|
||
|
*
|
||
|
* Copyright (C) Microsoft Corporation, 1990 - 1992
|
||
|
*
|
||
|
************************************************************************/
|
||
|
|
||
|
#ifndef __LIBPROTO_H__
|
||
|
#define __LIBPROTO_H__
|
||
|
|
||
|
#if defined(NTGDIKM) && !defined(KERNEL_MODE)
|
||
|
#define KERNEL_MODE
|
||
|
#endif
|
||
|
|
||
|
#ifdef NTGDIKM
|
||
|
|
||
|
extern ULONG gulMemID;
|
||
|
#define DbgPrint DrvDbgPrint
|
||
|
#define HeapAlloc(hHeap,Flags,Size) DRVALLOC( Size )
|
||
|
#define HeapFree( hHeap, Flags, VBits ) DRVFREE( VBits )
|
||
|
|
||
|
#ifndef FillMemory
|
||
|
#define FillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
|
||
|
#endif
|
||
|
|
||
|
//#define DRVALLOC(c) EngAllocMem(0, c,gulMemID)
|
||
|
//#define DRVFREE(p) EngFreeMem(p)
|
||
|
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* Until there is proper error logging:-
|
||
|
* WinSetError( "String" );
|
||
|
* The String appears on the debug terminal. A \n is appended.
|
||
|
*/
|
||
|
void WinSetError( LPSTR );
|
||
|
|
||
|
/*
|
||
|
* Function to add a copy of a string to a heap. Returns address of copy
|
||
|
* of string (if successful) or 0 if memory cannot be allocated.
|
||
|
*/
|
||
|
|
||
|
LPSTR StrToHeap( HANDLE, LPSTR );
|
||
|
PWSTR StrToWHeap( HANDLE, LPSTR ); /* Expand to Wide too! */
|
||
|
PWSTR WstrToHeap( HANDLE, PWSTR ); /* WIDE version */
|
||
|
|
||
|
/*
|
||
|
* Convert an ascii style string to WCHAR format, appending it to the
|
||
|
* end of the wchar passed in. Returns value of first parameter.
|
||
|
*/
|
||
|
|
||
|
PWSTR strcat2WChar( PWSTR, LPSTR );
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Convert an ascii style string to WCHAR format, copying it to the
|
||
|
* wchar passed in. Returns value of first parameter.
|
||
|
*/
|
||
|
|
||
|
PWSTR strcpy2WChar( PWSTR, LPSTR );
|
||
|
|
||
|
|
||
|
/*
|
||
|
* The WCHAR world's equivalent of strlen(): returns the number of WCHARs
|
||
|
* in the string passed in.
|
||
|
*/
|
||
|
|
||
|
int wchlen( PWSTR );
|
||
|
|
||
|
/*
|
||
|
* Concatenate a PWSTR to another. Returns address of destination.
|
||
|
*/
|
||
|
|
||
|
PWSTR wchcat( PWSTR, PWSTR );
|
||
|
|
||
|
/*
|
||
|
* Copy a PWSTR to another. Returns address of destination.
|
||
|
*/
|
||
|
|
||
|
PWSTR wchcpy( PWSTR, PWSTR );
|
||
|
|
||
|
PVOID MapFile(PWSTR);
|
||
|
|
||
|
#if NTGDIKM
|
||
|
/*
|
||
|
* check if two strings are identical
|
||
|
*/
|
||
|
|
||
|
BOOL bSameStringW(
|
||
|
PWCHAR pwch1,
|
||
|
PWCHAR pwch2);
|
||
|
|
||
|
/*
|
||
|
* Some system function prototypes have vanished - replace them here.
|
||
|
*/
|
||
|
|
||
|
void DrvDbgPrint( char *, ... );
|
||
|
|
||
|
#if DBG
|
||
|
#define RIP(x) {DrvDbgPrint((PSZ)(x)); EngDebugBreak();}
|
||
|
#define WARNING(s) DrvDbgPrint("warning: %s",(PSZ)(s))
|
||
|
|
||
|
BOOL
|
||
|
SetAllocCounters(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
#else
|
||
|
#define RIP(x)
|
||
|
#define WARNING(s)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
LPVOID
|
||
|
DRVALLOC(
|
||
|
DWORD cbAlloc
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
DRVFREE(
|
||
|
LPVOID pMem
|
||
|
);
|
||
|
|
||
|
#else //NTGDIKM
|
||
|
|
||
|
/*
|
||
|
* Break into the debugger - Ye olde RIP.
|
||
|
*/
|
||
|
VOID DoRip( LPSTR );
|
||
|
|
||
|
#if DBG
|
||
|
|
||
|
#define WARNING(s) DbgPrint("warning: %s",(PSZ)(s))
|
||
|
|
||
|
#ifdef FIREWALLS
|
||
|
#define RIP(x) DoRip( (PSZ)(x) )
|
||
|
#else
|
||
|
#define RIP(x) {DbgPrint((PSZ)(x)); DbgBreakPoint();}
|
||
|
#endif
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define WARNING(s)
|
||
|
#define RIP(x)
|
||
|
|
||
|
#endif //DBG
|
||
|
|
||
|
//
|
||
|
// Define kernel debugger print prototypes and macros.
|
||
|
// These are defined in ntrtl.h which we should include
|
||
|
// instead. For now, redefine them here to avoid breaking
|
||
|
// other components.
|
||
|
//
|
||
|
|
||
|
#if DBG
|
||
|
|
||
|
VOID
|
||
|
NTAPI
|
||
|
DbgBreakPoint(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
ULONG
|
||
|
__cdecl
|
||
|
DbgPrint(
|
||
|
PCH Format,
|
||
|
...
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
PVOID MapFile(PWSTR);
|
||
|
|
||
|
|
||
|
#endif //NTGDIKM
|
||
|
|
||
|
/*
|
||
|
* A simplified write function. Returns TRUE if the WriteFile()
|
||
|
* call returns TRUE and the number of bytes written equals the
|
||
|
* number requested.
|
||
|
*
|
||
|
* bWrite( file_handle, address_of_data, number_of_bytes );
|
||
|
*/
|
||
|
|
||
|
BOOL bWrite( HANDLE, void *, int );
|
||
|
|
||
|
/*
|
||
|
* Function to copy the contents of one file to another. The files
|
||
|
* are referenced via file handles. No positioning is done - that is
|
||
|
* up to the user.
|
||
|
* The second form also allows a byte count to limit the amount of data
|
||
|
* copied.
|
||
|
*/
|
||
|
|
||
|
|
||
|
long lFICopy( HANDLE, HANDLE );
|
||
|
long lFInCopy( HANDLE, HANDLE, long );
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Spooler interaction functions. These allow drivers to call the
|
||
|
* spooler directly, without going through engine stub functions.
|
||
|
*/
|
||
|
|
||
|
BOOL bSplGetFormW( HANDLE, PWSTR, DWORD, BYTE *, DWORD, DWORD * );
|
||
|
|
||
|
|
||
|
DWORD dwSplGetPrinterDataW( HANDLE, PWSTR, BYTE *, DWORD, DWORD * );
|
||
|
|
||
|
|
||
|
BOOL bSplWrite( HANDLE, ULONG, VOID * );
|
||
|
|
||
|
|
||
|
|
||
|
/* Function needed to allow the driver to reach the spooler */
|
||
|
|
||
|
BOOL bImpersonateClient( void );
|
||
|
|
||
|
|
||
|
/************************** HACK ***************************************
|
||
|
* The following function is only required until the DEVMODE contains
|
||
|
* a form name rather than an index. And even then it might be required.
|
||
|
*
|
||
|
***********************************************************************/
|
||
|
|
||
|
char *_IndexToName( int );
|
||
|
|
||
|
//
|
||
|
// COLORADJUSTMENT validating
|
||
|
//
|
||
|
|
||
|
BOOL
|
||
|
ValidateColorAdj(
|
||
|
PCOLORADJUSTMENT pca
|
||
|
);
|
||
|
|
||
|
// Generic devmode conversion routine
|
||
|
|
||
|
LONG
|
||
|
ConvertDevmode(
|
||
|
PDEVMODE pdmIn,
|
||
|
PDEVMODE pdmOut
|
||
|
);
|
||
|
|
||
|
#ifndef KERNEL_MODE
|
||
|
|
||
|
// Copy DEVMODE to an output buffer before return to the
|
||
|
// caller of DrvDocumentProperties
|
||
|
|
||
|
BOOL
|
||
|
ConvertDevmodeOut(
|
||
|
PDEVMODE pdmSrc,
|
||
|
PDEVMODE pdmIn,
|
||
|
PDEVMODE pdmOut
|
||
|
);
|
||
|
|
||
|
// Library routine to handle common cases of DrvConvertDevmode
|
||
|
|
||
|
typedef struct {
|
||
|
|
||
|
WORD dmDriverVersion; // current driver version
|
||
|
WORD dmDriverExtra; // size of current version private devmode
|
||
|
WORD dmDriverVersion351; // 3.51 driver version
|
||
|
WORD dmDriverExtra351; // size of 3.51 version private devmode
|
||
|
|
||
|
} DRIVER_VERSION_INFO, *PDRIVER_VERSION_INFO;
|
||
|
|
||
|
#define CDM_RESULT_FALSE 0
|
||
|
#define CDM_RESULT_TRUE 1
|
||
|
#define CDM_RESULT_NOT_HANDLED 2
|
||
|
|
||
|
INT
|
||
|
CommonDrvConvertDevmode(
|
||
|
PWSTR pPrinterName,
|
||
|
PDEVMODE pdmIn,
|
||
|
PDEVMODE pdmOut,
|
||
|
PLONG pcbNeeded,
|
||
|
DWORD fMode,
|
||
|
PDRIVER_VERSION_INFO pDriverVersions
|
||
|
);
|
||
|
|
||
|
|
||
|
UINT
|
||
|
cdecl
|
||
|
DQPsprintf(
|
||
|
HINSTANCE hInst,
|
||
|
LPWSTR pwBuf,
|
||
|
DWORD cchBuf,
|
||
|
LPDWORD pcchNeeded,
|
||
|
LPWSTR pwszFormat,
|
||
|
...
|
||
|
);
|
||
|
|
||
|
#endif // KERNEL_MODE
|
||
|
|
||
|
#endif // !__LIBPROTO_H__
|