|
|
/*++
Copyright (c) 1991-1993 Microsoft Corporation
Module Name:
RxPrint.h
Abstract:
This contains prototypes for the RxPrint routines.
Author:
Dave Snipp (DaveSn) 16-Apr-1991
Environment:
Notes:
All of the RxPrint APIs are wide-character APIs, regardless of whether or not UNICODE is defined. This allows the net/dosprint/dosprint.c code to use the winspool APIs (which are currently ANSI APIs, despite their prototypes using LPTSTR in some places).
Revision History:
22-Apr-1991 JohnRo Use constants from <lmcons.h>. 14-May-1991 JohnRo Change WORD to DWORD in all parameter lists. Similarly, change PWORD to LPDWORD and PUSHORT to LPDWORD. 18-May-1991 JohnRo Changed SPLERR to be defined as NET_API_STATUS. 22-May-1991 CliffV Added local definitions of PDLEN and DTLEN since they are no longer in lmcons.h. 26-May-1991 JohnRo Use IN, OUT, OPTIONAL, LPVOID, LPTSTR, etc. 18-Jun-1991 JohnRo Deleted RxPrintJobGetId, as it will be an IOCTL rather than a remoted API. 26-Jun-1991 CliffV Used LM2.0 versions of CNLEN, UNLEN, and QNLEN. 16-Jul-1991 JohnRo Estimate bytes needed for print APIs. 16-Jun-1992 JohnRo RAID 10324: net print vs. UNICODE. 08-Feb-1993 JohnRo RAID 10164: Data misalignment error during XsDosPrintQGetInfo(). 07-Apr-1993 JohnRo RAID 5670: "NET PRINT \\server\share" gives err 124 (bad level) on NT.
--*/
#ifndef _RXPRINT_
#define _RXPRINT_
#include <windef.h> // DWORD, LPVOID, LPTSTR, TCHAR, etc.
#include <lmcons.h> // LM20_CNLEN, IN, NET_API_STATUS, etc.
#define SPLENTRY pascal far
/* length for character arrays in structures (excluding zero terminator) */ #define PDLEN 8 /* Print destination length */
#define DTLEN 9 /* Spool file data type */
// /* e.g. PM_Q_STD,PM_Q_RAW */
#define QP_DATATYPE_SIZE 15 /* returned by SplQpQueryDt */
#define DRIV_DEVICENAME_SIZE 31 /* see DRIVDATA struc */
#define DRIV_NAME_SIZE 8 /* name of device driver */
#define PRINTERNAME_SIZE 32 /* max printer name length */
#define FORMNAME_SIZE 31 /* max form name length */
// #define MAXCOMMENTSZ 48 /* queue comment length */
/**INTERNAL_ONLY**/ /* IOctl for RxPrintJobGetId */ #define SPOOL_LMCAT 83
#define SPOOL_LMGetPrintId 0x60
// Used in remdef.h for structure definition to marshall data
#define MAX_DEPENDENT_FILES 64
/**END_INTERNAL**/
typedef NET_API_STATUS SPLERR; /* err */
typedef struct _PRJINFOA { /* prj1 */ WORD uJobId; CHAR szUserName[LM20_UNLEN+1]; CHAR pad_1; CHAR szNotifyName[LM20_CNLEN+1]; CHAR szDataType[DTLEN+1]; LPSTR pszParms; WORD uPosition; WORD fsStatus; LPSTR pszStatus; DWORD ulSubmitted; DWORD ulSize; LPSTR pszComment; } PRJINFOA; typedef struct _PRJINFOW { /* prj1 */ WORD uJobId; WCHAR szUserName[LM20_UNLEN+1]; WCHAR pad_1; WCHAR szNotifyName[LM20_CNLEN+1]; WCHAR szDataType[DTLEN+1]; LPWSTR pszParms; WORD uPosition; WORD fsStatus; LPWSTR pszStatus; DWORD ulSubmitted; DWORD ulSize; LPWSTR pszComment; } PRJINFOW; #ifdef UNICODE
typedef PRJINFOW PRJINFO; #else
typedef PRJINFOA PRJINFO; #endif // UNICODE
typedef PRJINFOA far *PPRJINFOA; typedef PRJINFOW far *PPRJINFOW; #ifdef UNICODE
typedef PPRJINFOW PPRJINFO; #else
typedef PPRJINFOA PPRJINFO; #endif // UNICODE
typedef PRJINFOA near *NPPRJINFOA; typedef PRJINFOW near *NPPRJINFOW; #ifdef UNICODE
typedef NPPRJINFOW NPPRJINFO; #else
typedef NPPRJINFOA NPPRJINFO; #endif // UNICODE
typedef struct _PRJINFO2A { /* prj2 */ WORD uJobId; WORD uPriority; LPSTR pszUserName; WORD uPosition; WORD fsStatus; DWORD ulSubmitted; DWORD ulSize; LPSTR pszComment; LPSTR pszDocument; } PRJINFO2A; typedef struct _PRJINFO2W { /* prj2 */ WORD uJobId; WORD uPriority; LPWSTR pszUserName; WORD uPosition; WORD fsStatus; DWORD ulSubmitted; DWORD ulSize; LPWSTR pszComment; LPWSTR pszDocument; } PRJINFO2W; #ifdef UNICODE
typedef PRJINFO2W PRJINFO2; #else
typedef PRJINFO2A PRJINFO2; #endif // UNICODE
typedef PRJINFO2A far *PPRJINFO2A; typedef PRJINFO2W far *PPRJINFO2W; #ifdef UNICODE
typedef PPRJINFO2W PPRJINFO2; #else
typedef PPRJINFO2A PPRJINFO2; #endif // UNICODE
typedef PRJINFO2A near *NPPRJINFO2A; typedef PRJINFO2W near *NPPRJINFO2W; #ifdef UNICODE
typedef NPPRJINFO2W NPPRJINFO2; #else
typedef NPPRJINFO2A NPPRJINFO2; #endif // UNICODE
typedef struct _PRJINFO3A { /* prj */ WORD uJobId; WORD uPriority; LPSTR pszUserName; WORD uPosition; WORD fsStatus; DWORD ulSubmitted; DWORD ulSize; LPSTR pszComment; LPSTR pszDocument; LPSTR pszNotifyName; LPSTR pszDataType; LPSTR pszParms; LPSTR pszStatus; LPSTR pszQueue; LPSTR pszQProcName; LPSTR pszQProcParms; LPSTR pszDriverName; LPVOID pDriverData; LPSTR pszPrinterName; } PRJINFO3A; typedef struct _PRJINFO3W { /* prj */ WORD uJobId; WORD uPriority; LPWSTR pszUserName; WORD uPosition; WORD fsStatus; DWORD ulSubmitted; DWORD ulSize; LPWSTR pszComment; LPWSTR pszDocument; LPWSTR pszNotifyName; LPWSTR pszDataType; LPWSTR pszParms; LPWSTR pszStatus; LPWSTR pszQueue; LPWSTR pszQProcName; LPWSTR pszQProcParms; LPWSTR pszDriverName; LPVOID pDriverData; LPWSTR pszPrinterName; } PRJINFO3W; #ifdef UNICODE
typedef PRJINFO3W PRJINFO3; #else
typedef PRJINFO3A PRJINFO3; #endif // UNICODE
typedef PRJINFO3A far *PPRJINFO3A; typedef PRJINFO3W far *PPRJINFO3W; #ifdef UNICODE
typedef PPRJINFO3W PPRJINFO3; #else
typedef PPRJINFO3A PPRJINFO3; #endif // UNICODE
typedef PRJINFO3A near *NPPRJINFO3A; typedef PRJINFO3W near *NPPRJINFO3W; #ifdef UNICODE
typedef NPPRJINFO3W NPPRJINFO3; #else
typedef NPPRJINFO3A NPPRJINFO3; #endif // UNICODE
typedef struct _PRDINFOA { /* prd1 */ CHAR szName[PDLEN+1]; CHAR szUserName[LM20_UNLEN+1]; WORD uJobId; WORD fsStatus; LPSTR pszStatus; WORD time; } PRDINFOA; typedef struct _PRDINFOW { /* prd1 */ WCHAR szName[PDLEN+1]; WCHAR szUserName[LM20_UNLEN+1]; WORD uJobId; WORD fsStatus; LPWSTR pszStatus; WORD time; } PRDINFOW; #ifdef UNICODE
typedef PRDINFOW PRDINFO; #else
typedef PRDINFOA PRDINFO; #endif // UNICODE
typedef PRDINFOA far *PPRDINFOA; typedef PRDINFOW far *PPRDINFOW; #ifdef UNICODE
typedef PPRDINFOW PPRDINFO; #else
typedef PPRDINFOA PPRDINFO; #endif // UNICODE
typedef PRDINFOA near *NPPRDINFOA; typedef PRDINFOW near *NPPRDINFOW; #ifdef UNICODE
typedef NPPRDINFOW NPPRDINFO; #else
typedef NPPRDINFOA NPPRDINFO; #endif // UNICODE
typedef struct _PRDINFO3A { /* prd */ LPSTR pszPrinterName; LPSTR pszUserName; LPSTR pszLogAddr; WORD uJobId; WORD fsStatus; LPSTR pszStatus; LPSTR pszComment; LPSTR pszDrivers; WORD time; WORD pad1; } PRDINFO3A; typedef struct _PRDINFO3W { /* prd */ LPWSTR pszPrinterName; LPWSTR pszUserName; LPWSTR pszLogAddr; WORD uJobId; WORD fsStatus; LPWSTR pszStatus; LPWSTR pszComment; LPWSTR pszDrivers; WORD time; WORD pad1; } PRDINFO3W; #ifdef UNICODE
typedef PRDINFO3W PRDINFO3; #else
typedef PRDINFO3A PRDINFO3; #endif // UNICODE
typedef PRDINFO3A far *PPRDINFO3A; typedef PRDINFO3W far *PPRDINFO3W; #ifdef UNICODE
typedef PPRDINFO3W PPRDINFO3; #else
typedef PPRDINFO3A PPRDINFO3; #endif // UNICODE
typedef PRDINFO3A near *NPPRDINFO3A; typedef PRDINFO3W near *NPPRDINFO3W; #ifdef UNICODE
typedef NPPRDINFO3W NPPRDINFO3; #else
typedef NPPRDINFO3A NPPRDINFO3; #endif // UNICODE
typedef struct _PRQINFOA { /* prq1 */ CHAR szName[LM20_QNLEN+1]; CHAR pad_1; WORD uPriority; WORD uStartTime; WORD uUntilTime; LPSTR pszSepFile; LPSTR pszPrProc; LPSTR pszDestinations; LPSTR pszParms; LPSTR pszComment; WORD fsStatus; WORD cJobs; } PRQINFOA; typedef struct _PRQINFOW { /* prq1 */ WCHAR szName[LM20_QNLEN+1]; WCHAR pad_1; WORD uPriority; WORD uStartTime; WORD uUntilTime; LPWSTR pszSepFile; LPWSTR pszPrProc; LPWSTR pszDestinations; LPWSTR pszParms; LPWSTR pszComment; WORD fsStatus; WORD cJobs; } PRQINFOW; #ifdef UNICODE
typedef PRQINFOW PRQINFO; #else
typedef PRQINFOA PRQINFO; #endif // UNICODE
typedef PRQINFOA far *PPRQINFOA; typedef PRQINFOW far *PPRQINFOW; #ifdef UNICODE
typedef PPRQINFOW PPRQINFO; #else
typedef PPRQINFOA PPRQINFO; #endif // UNICODE
typedef PRQINFOA near *NPPRQINFOA; typedef PRQINFOW near *NPPRQINFOW; #ifdef UNICODE
typedef NPPRQINFOW NPPRQINFO; #else
typedef NPPRQINFOA NPPRQINFO; #endif // UNICODE
typedef struct _PRQINFO3A { /* prq */ LPSTR pszName; WORD uPriority; WORD uStartTime; WORD uUntilTime; WORD pad1; LPSTR pszSepFile; LPSTR pszPrProc; LPSTR pszParms; LPSTR pszComment; WORD fsStatus; WORD cJobs; LPSTR pszPrinters; LPSTR pszDriverName; LPVOID pDriverData; } PRQINFO3A; typedef struct _PRQINFO3W { /* prq */ LPWSTR pszName; WORD uPriority; WORD uStartTime; WORD uUntilTime; WORD pad1; LPWSTR pszSepFile; LPWSTR pszPrProc; LPWSTR pszParms; LPWSTR pszComment; WORD fsStatus; WORD cJobs; LPWSTR pszPrinters; LPWSTR pszDriverName; LPVOID pDriverData; } PRQINFO3W; #ifdef UNICODE
typedef PRQINFO3W PRQINFO3; #else
typedef PRQINFO3A PRQINFO3; #endif // UNICODE
typedef PRQINFO3A far *PPRQINFO3A; typedef PRQINFO3W far *PPRQINFO3W; #ifdef UNICODE
typedef PPRQINFO3W PPRQINFO3; #else
typedef PPRQINFO3A PPRQINFO3; #endif // UNICODE
typedef PRQINFO3A near *NPPRQINFO3A; typedef PRQINFO3W near *NPPRQINFO3W; #ifdef UNICODE
typedef NPPRQINFO3W NPPRQINFO3; #else
typedef NPPRQINFO3A NPPRQINFO3; #endif // UNICODE
typedef struct _PRQINFO52A { /* prq */ WORD uVersion; LPSTR pszModelName; LPSTR pszDriverName; LPSTR pszDataFileName; LPSTR pszMonitorName; LPSTR pszDriverPath; LPSTR pszDefaultDataType; LPSTR pszHelpFile; LPSTR pszConfigFile; WORD cDependentNames; LPSTR pszDependentNames[MAX_DEPENDENT_FILES]; } PRQINFO52A; typedef struct _PRQINFO52W { /* prq */ WORD uVersion; LPWSTR pszModelName; LPWSTR pszDriverName; LPWSTR pszDataFileName; LPWSTR pszMonitorName; LPWSTR pszDriverPath; LPWSTR pszDefaultDataType; LPWSTR pszHelpFile; LPWSTR pszConfigFile; WORD cDependentNames; LPWSTR pszDependentNames[MAX_DEPENDENT_FILES]; } PRQINFO52W; #ifdef UNICODE
typedef PRQINFO52W PRQINFO52; #else
typedef PRQINFO52A PRQINFO52; #endif // UNICODE
typedef PRQINFO52A far *PPRQINFO52A; typedef PRQINFO52W far *PPRQINFO52W; #ifdef UNICODE
typedef PPRQINFO52W PPRQINFO52; #else
typedef PPRQINFO52A PPRQINFO52; #endif // UNICODE
typedef PRQINFO52A near *NPPRQINFO52A; typedef PRQINFO52W near *NPPRQINFO52W; #ifdef UNICODE
typedef NPPRQINFO52W NPPRQINFO52; #else
typedef NPPRQINFO52A NPPRQINFO52; #endif // UNICODE
/*
* structure for RxPrintJobGetId */ typedef struct _PRIDINFOA { /* prjid */ WORD uJobId; CHAR szServer[LM20_CNLEN + 1]; CHAR szQName[LM20_QNLEN+1]; CHAR pad_1; } PRIDINFOA; /*
* structure for RxPrintJobGetId */ typedef struct _PRIDINFOW { /* prjid */ WORD uJobId; WCHAR szServer[LM20_CNLEN + 1]; WCHAR szQName[LM20_QNLEN+1]; CHAR pad_1; } PRIDINFOW; #ifdef UNICODE
typedef PRIDINFOW PRIDINFO; #else
typedef PRIDINFOA PRIDINFO; #endif // UNICODE
typedef PRIDINFOA far *PPRIDINFOA; typedef PRIDINFOW far *PPRIDINFOW; #ifdef UNICODE
typedef PPRIDINFOW PPRIDINFO; #else
typedef PPRIDINFOA PPRIDINFO; #endif // UNICODE
typedef PRIDINFOA near *NPPRIDINFOA; typedef PRIDINFOW near *NPPRIDINFOW; #ifdef UNICODE
typedef NPPRIDINFOW NPPRIDINFO; #else
typedef NPPRIDINFOA NPPRIDINFO; #endif // UNICODE
/****************************************************************
* * * Function prototypes * * * ****************************************************************/
SPLERR SPLENTRY RxPrintDestEnum( IN LPTSTR pszServer, IN DWORD uLevel, OUT LPBYTE pbBuf, IN DWORD cbBuf, IN LPDWORD pcReturned, OUT LPDWORD pcTotal );
SPLERR SPLENTRY RxPrintDestControl( IN LPTSTR pszServer, IN LPTSTR pszDevName, IN DWORD uControl );
SPLERR SPLENTRY RxPrintDestGetInfo( IN LPTSTR pszServer, IN LPTSTR pszName, IN DWORD uLevel, OUT LPBYTE pbBuf, IN DWORD cbBuf, OUT LPDWORD pcbNeeded // estimated (probably too large).
);
SPLERR SPLENTRY RxPrintDestAdd( IN LPTSTR pszServer, IN DWORD uLevel, IN LPBYTE pbBuf, IN DWORD cbBuf );
SPLERR SPLENTRY RxPrintDestSetInfo( IN LPTSTR pszServer, IN LPTSTR pszName, IN DWORD uLevel, IN LPBYTE pbBuf, IN DWORD cbBuf, IN DWORD uParmNum );
SPLERR SPLENTRY RxPrintDestDel( IN LPTSTR pszServer, IN LPTSTR pszPrinterName );
SPLERR SPLENTRY RxPrintQEnum( IN LPTSTR pszServer, IN DWORD uLevel, OUT LPBYTE pbBuf, IN DWORD cbBuf, OUT LPDWORD pcReturned, OUT LPDWORD pcTotal );
SPLERR SPLENTRY RxPrintQGetInfo( IN LPTSTR pszServer, IN LPTSTR pszQueueName, IN DWORD uLevel, OUT LPBYTE pbBuf, IN DWORD cbBuf, OUT LPDWORD pcbNeeded // estimated (probably too large).
);
SPLERR SPLENTRY RxPrintQSetInfo( IN LPTSTR pszServer, IN LPTSTR pszQueueName, IN DWORD uLevel, IN LPBYTE pbBuf, IN DWORD cbBuf, IN DWORD uParmNum );
SPLERR SPLENTRY RxPrintQPause( IN LPTSTR pszServer, IN LPTSTR pszQueueName );
SPLERR SPLENTRY RxPrintQContinue( IN LPTSTR pszServer, IN LPTSTR pszQueueName );
SPLERR SPLENTRY RxPrintQPurge( IN LPTSTR pszServer, IN LPTSTR pszQueueName );
SPLERR SPLENTRY RxPrintQAdd( IN LPTSTR pszServer, IN DWORD uLevel, IN LPBYTE pbBuf, IN DWORD cbBuf );
SPLERR SPLENTRY RxPrintQDel( IN LPTSTR pszServer, IN LPTSTR pszQueueName );
SPLERR SPLENTRY RxPrintJobGetInfo( IN LPTSTR pszServer, IN DWORD uJobId, IN DWORD uLevel, OUT LPBYTE pbBuf, IN DWORD cbBuf, OUT LPDWORD pcbNeeded // estimated (probably too large).
);
SPLERR SPLENTRY RxPrintJobSetInfo( IN LPTSTR pszServer, IN DWORD uJobId, IN DWORD uLevel, IN LPBYTE pbBuf, IN DWORD cbBuf, IN DWORD uParmNum );
SPLERR SPLENTRY RxPrintJobPause( IN LPTSTR pszServer, IN DWORD uJobId );
SPLERR SPLENTRY RxPrintJobContinue( IN LPTSTR pszServer, IN DWORD uJobId );
SPLERR SPLENTRY RxPrintJobDel( IN LPTSTR pszServer, IN DWORD uJobId );
SPLERR SPLENTRY RxPrintJobEnum( IN LPTSTR pszServer, IN LPTSTR pszQueueName, IN DWORD uLevel, OUT LPBYTE pbBuf, IN DWORD cbBuf, OUT LPDWORD pcReturned, OUT LPDWORD pcTotal );
/*
* Values for parmnum in RxPrintQSetInfo. */
#define PRQ_PRIORITY_PARMNUM 2
#define PRQ_STARTTIME_PARMNUM 3
#define PRQ_UNTILTIME_PARMNUM 4
#define PRQ_SEPARATOR_PARMNUM 5
#define PRQ_PROCESSOR_PARMNUM 6
#define PRQ_DESTINATIONS_PARMNUM 7
#define PRQ_PARMS_PARMNUM 8
#define PRQ_COMMENT_PARMNUM 9
#define PRQ_PRINTERS_PARMNUM 12
#define PRQ_DRIVERNAME_PARMNUM 13
#define PRQ_DRIVERDATA_PARMNUM 14
#define PRQ_MAXPARMNUM 14
/*
* Print Queue Priority */
#define PRQ_MAX_PRIORITY 1 /* highest priority */
#define PRQ_DEF_PRIORITY 5
#define PRQ_MIN_PRIORITY 9 /* lowest priority */
#define PRQ_NO_PRIORITY 0
/*
* Print queue status bitmask and values. */
#define PRQ_STATUS_MASK 3
#define PRQ_ACTIVE 0
#define PRQ_PAUSED 1
#define PRQ_ERROR 2
#define PRQ_PENDING 3
/*
* Print queue status bits for level 3 */
#define PRQ3_PAUSED 0x1
#define PRQ3_PENDING 0x2
/*
* Values for parmnum in RxPrintJobSetInfo. */
#define PRJ_NOTIFYNAME_PARMNUM 3
#define PRJ_DATATYPE_PARMNUM 4
#define PRJ_PARMS_PARMNUM 5
#define PRJ_POSITION_PARMNUM 6
#define PRJ_COMMENT_PARMNUM 11
#define PRJ_DOCUMENT_PARMNUM 12
#define PRJ_PRIORITY_PARMNUM 14
#define PRJ_PROCPARMS_PARMNUM 16
#define PRJ_DRIVERDATA_PARMNUM 18
#define PRJ_MAXPARMNUM 18
/*
* Bitmap masks for status field of PRJINFO. */
/* 2-7 bits also used in device status */
#define PRJ_QSTATUS 0x0003 /* Bits 0,1 */
#define PRJ_DEVSTATUS 0x0ffc /* 2-11 bits */
#define PRJ_COMPLETE 0x0004 /* Bit 2 */
#define PRJ_INTERV 0x0008 /* Bit 3 */
#define PRJ_ERROR 0x0010 /* Bit 4 */
#define PRJ_DESTOFFLINE 0x0020 /* Bit 5 */
#define PRJ_DESTPAUSED 0x0040 /* Bit 6 */
#define PRJ_NOTIFY 0x0080 /* Bit 7 */
#define PRJ_DESTNOPAPER 0x0100 /* Bit 8 */
#define PRJ_DESTFORMCHG 0x0200 /* BIT 9 */
#define PRJ_DESTCRTCHG 0x0400 /* BIT 10 */
#define PRJ_DESTPENCHG 0x0800 /* BIT 11 */
#define PRJ_DELETED 0x8000 /* Bit 15 */
/*
* Values of PRJ_QSTATUS bits in fsStatus field of PRJINFO. */
#define PRJ_QS_QUEUED 0
#define PRJ_QS_PAUSED 1
#define PRJ_QS_SPOOLING 2
#define PRJ_QS_PRINTING 3
/*
* Print Job Priority */
#define PRJ_MAX_PRIORITY 99 /* lowest priority */
#define PRJ_MIN_PRIORITY 1 /* highest priority */
#define PRJ_NO_PRIORITY 0
/*
* Bitmap masks for status field of PRDINFO. * see PRJ_... for bits 2-11 */
#define PRD_STATUS_MASK 0x0003 /* Bits 0,1 */
#define PRD_DEVSTATUS 0x0ffc /* 2-11 bits */
/*
* Values of PRD_STATUS_MASK bits in fsStatus field of PRDINFO. */
#define PRD_ACTIVE 0
#define PRD_PAUSED 1
/*
* Control codes used in RxPrintDestControl. */
#define PRD_DELETE 0
#define PRD_PAUSE 1
#define PRD_CONT 2
#define PRD_RESTART 3
/*
* Values for parmnum in RxPrintDestSetInfo. */
#define PRD_LOGADDR_PARMNUM 3
#define PRD_COMMENT_PARMNUM 7
#define PRD_DRIVERS_PARMNUM 8
#endif // ndef _RXPRINT_
|