/*++ 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 . 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 // DWORD, LPVOID, LPTSTR, TCHAR, etc. #include // 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_