Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1258 lines
29 KiB

/*++
Copyright (c) 1990 - 1996 Microsoft Corporation
All rights reserved
Module Name:
winspool.idl
Abstract:
A very simple interface which is part of an RPC application (client and
server) demonstrating how to use RPC on NT.
Author:
mikemon 12-10-90 Created.
Environment:
User Mode -Win32
Revision History:
--*/
[
uuid(12345678-1234-ABCD-EF00-0123456789AB),
version(1.0),
#ifdef __midl
ms_union,
#endif // __midl
endpoint("mscn_np:[\\pipe\\spoolss]"),
pointer_default(unique)
]
interface winspool
{
import "import.idl";
#include "..\inc\ntfytab.h"
typedef WORD TABLE;
typedef struct _NOTIFY_ATTRIB_TABLE {
WORD Attrib;
TABLE Table;
} NOTIFY_ATTRIB_TABLE, *PNOTIFY_ATTRIB_TABLE;
typedef [context_handle] void *PRINTER_HANDLE;
typedef [context_handle] void *GDI_HANDLE;
typedef [handle] wchar_t *STRING_HANDLE;
typedef [string] wchar_t *SPL_STRING;
typedef struct _PORT_VAR_CONTAINER {
DWORD cbMonitorData;
[size_is(cbMonitorData), unique] LPBYTE pMonitorData;
} PORT_VAR_CONTAINER, *PPORT_VAR_CONTAINER, *LPPORT_VAR_CONTAINER;
typedef struct _PORT_CONTAINER {
DWORD Level;
[switch_is(Level)] union {
[case(1)]
LPPORT_INFO_1W pPortInfo1;
[case(2)]
LPPORT_INFO_2W pPortInfo2;
[case(3)]
LPPORT_INFO_3W pPortInfo3;
[case((DWORD)-1)]
LPPORT_INFO_FFW pPortInfoFF;
} PortInfo;
} PORT_CONTAINER, *PPORT_CONTAINER, *LPPORT_CONTAINER;
typedef struct _DEVMODE_CONTAINER {
DWORD cbBuf;
[size_is(cbBuf), unique] LPBYTE pDevMode;
} DEVMODE_CONTAINER, *PDEVMODE_CONTAINER, *LPDEVMODE_CONTAINER;
typedef struct _SECURITY_CONTAINER {
DWORD cbBuf;
[size_is(cbBuf), unique] LPBYTE pSecurity;
} SECURITY_CONTAINER, *PSECURITY_CONTAINER, *LPSECURITY_CONTAINER;
typedef struct _PRINTER_CONTAINER {
DWORD Level;
[switch_is(Level)] union {
[case(0)]
LPPRINTER_INFO_STRESSW pPrinterInfoStress;
[case(1)]
LPPRINTER_INFO_1W pPrinterInfo1;
[case(2)]
LPPRINTER_INFO_2W pPrinterInfo2;
[case(3)]
LPPRINTER_INFO_3 pPrinterInfo3;
[case(4)]
LPPRINTER_INFO_4W pPrinterInfo0;
[case(5)]
LPPRINTER_INFO_5W pPrinterInfo5;
[case(6)]
LPPRINTER_INFO_6 pPrinterInfo6;
[case(7)]
LPPRINTER_INFO_7W pPrinterInfo7;
[case(8)]
LPPRINTER_INFO_8W pPrinterInfo8;
[case(9)]
LPPRINTER_INFO_9W pPrinterInfo9;
} PrinterInfo;
} PRINTER_CONTAINER, *PPRINTER_CONTAINER, *LPPRINTER_CONTAINER;
typedef struct _JOB_CONTAINER {
DWORD Level;
[switch_is(Level)] union {
[case(1)]
JOB_INFO_1W *Level1;
[case(2)]
JOB_INFO_2W *Level2;
[case(3)]
JOB_INFO_3 *Level3;
} JobInfo;
} JOB_CONTAINER, *PJOB_CONTAINER, *LPJOB_CONTAINER;
// To handle dependentFiles field which is a list of strings
// -- MuhuntS
typedef struct _RPC_DRIVER_INFO_3W {
DWORD cVersion;
SPL_STRING pName;
SPL_STRING pEnvironment;
SPL_STRING pDriverPath;
SPL_STRING pDataFile;
SPL_STRING pConfigFile;
SPL_STRING pHelpFile;
SPL_STRING pMonitorName;
SPL_STRING pDefaultDataType;
DWORD cchDependentFiles;
[size_is(cchDependentFiles), unique] WCHAR *pDependentFiles;
} RPC_DRIVER_INFO_3W, *PRPC_DRIVER_INFO_3W, *LPRPC_DRIVER_INFO_3W;
typedef struct _RPC_DRIVER_INFO_4W {
DWORD cVersion;
SPL_STRING pName;
SPL_STRING pEnvironment;
SPL_STRING pDriverPath;
SPL_STRING pDataFile;
SPL_STRING pConfigFile;
SPL_STRING pHelpFile;
SPL_STRING pMonitorName;
SPL_STRING pDefaultDataType;
DWORD cchDependentFiles;
[size_is(cchDependentFiles), unique] WCHAR *pDependentFiles;
DWORD cchPreviousNames;
[size_is(cchPreviousNames), unique] WCHAR *pszzPreviousNames;
} RPC_DRIVER_INFO_4W, *PRPC_DRIVER_INFO_4W, *LPRPC_DRIVER_INFO_4W;
typedef struct _RPC_DRIVER_INFO_6W {
DWORD cVersion;
SPL_STRING pName;
SPL_STRING pEnvironment;
SPL_STRING pDriverPath;
SPL_STRING pDataFile;
SPL_STRING pConfigFile;
SPL_STRING pHelpFile;
SPL_STRING pMonitorName;
SPL_STRING pDefaultDataType;
DWORD cchDependentFiles;
[size_is(cchDependentFiles), unique] WCHAR *pDependentFiles;
DWORD cchPreviousNames;
[size_is(cchPreviousNames), unique] WCHAR *pszzPreviousNames;
FILETIME ftDriverDate;
DWORDLONG dwlDriverVersion;
SPL_STRING pMfgName;
SPL_STRING pOEMUrl;
SPL_STRING pHardwareID;
SPL_STRING pProvider;
} RPC_DRIVER_INFO_6W, *PRPC_DRIVER_INFO_6W, *LPRPC_DRIVER_INFO_6W;
typedef struct _DRIVER_CONTAINER {
DWORD Level;
[switch_is(Level)] union {
[case(1)]
LPDRIVER_INFO_1W Level1;
[case(2)]
LPDRIVER_INFO_2W Level2;
[case(3)]
LPRPC_DRIVER_INFO_3W Level3;
[case(4)]
LPRPC_DRIVER_INFO_4W Level4;
[case(6)]
LPRPC_DRIVER_INFO_6W Level6;
} DriverInfo;
} DRIVER_CONTAINER, *PDRIVER_CONTAINER, *LPDRIVER_CONTAINER;
typedef struct _RPC_DRIVER_INFCAT_INFO_1 {
[string, ref] wchar_t *pszCatPath;
[string, unique] wchar_t *pszCatNameOnSystem;
} RPC_DRIVER_INFCAT_INFO_1, *PRPC_DRIVER_INFCAT_INFO_1, *LPRPC_DRIVER_INFCAT_INFO_1;
typedef struct _RPC_DRIVER_INFCAT_INFO_2 {
[string, ref] wchar_t *pszCatPath;
[string, ref] wchar_t *pszInfPath;
[string, unique] wchar_t *pszSrcLoc;
DWORD dwMediaType;
DWORD dwCopyStyle;
} RPC_DRIVER_INFCAT_INFO_2, *PRPC_DRIVER_INFCAT_INFO_2, *LPRPC_DRIVER_INFCAT_INFO_2;
typedef struct _DRIVER_INFCAT_CONTAINER {
DWORD dwLevel;
[switch_is(dwLevel)] union {
[case(1)]
LPRPC_DRIVER_INFCAT_INFO_1 pDriverInfCatInfo1;
[case(2)]
LPRPC_DRIVER_INFCAT_INFO_2 pDriverInfCatInfo2;
} DriverInfCatInfo;
} DRIVER_INFCAT_CONTAINER, *PDRIVER_INFCAT_CONTAINER, *LPDRIVER_INFCAT_CONTAINER;
typedef struct _DOC_INFO_CONTAINER {
DWORD Level;
[switch_is(Level)] union {
[case(1)]
LPDOC_INFO_1W pDocInfo1;
} DocInfo;
} DOC_INFO_CONTAINER, *PDOC_INFO_CONTAINER, *LPDOC_INFO_CONTAINER;
typedef struct _FORM_CONTAINER {
DWORD Level;
[switch_is(Level)] union {
[case(1)]
LPFORM_INFO_1W pFormInfo1;
} FormInfo;
} FORM_CONTAINER, *PFORM_CONTAINER, *LPFORM_CONTAINER;
typedef struct _MONITOR_CONTAINER {
DWORD Level;
[switch_is(Level)] union {
[case(1)]
LPMONITOR_INFO_1W pMonitorInfo1;
[case(2)]
LPMONITOR_INFO_2W pMonitorInfo2;
} MonitorInfo;
} MONITOR_CONTAINER, *PMONITOR_CONTAINER, *LPMONITOR_CONTAINER;
typedef struct _RPC_PROVIDOR_INFO_2W {
DWORD cchOrder;
[size_is(cchOrder), unique] WCHAR *pOrder;
} RPC_PROVIDOR_INFO_2W, *PRPC_PROVIDOR_INFO_2W, *LPRPC_PROVIDOR_INFO_2W;
typedef struct _PROVIDOR_CONTAINER {
DWORD Level;
[switch_is(Level)] union {
[case(1)]
LPPROVIDOR_INFO_1W pProvidorInfo1;
[case(2)]
LPRPC_PROVIDOR_INFO_2W pRpcProvidorInfo2;
} ProvidorInfo;
} PROVIDOR_CONTAINER, *PPROVIDOR_CONTAINER, *LPPROVIDOR_CONTAINER;
typedef struct _SPLCLIENT_CONTAINER {
DWORD Level;
[switch_is(Level)] union {
[case(1)]
LPSPLCLIENT_INFO_1 pClientInfo1;
[case(2)]
LPSPLCLIENT_INFO_2 pClientInfo2;
} ClientInfo;
} SPLCLIENT_CONTAINER, *PSPLCLIENT_CONTAINER, *LPSPLCLIENT_CONTAINER;
typedef struct _FILE_INFO_CONTAINER {
DWORD Level;
[switch_is(Level)] union {
[case(1)]
SPOOL_FILE_INFO_1 *Level1;
[default];
} FileInfo;
} FILE_INFO_CONTAINER, *PFILE_INFO_CONTAINER, *LPFILE_INFO_CONTAINER;
typedef struct _STRING_CONTAINER {
DWORD cbBuf;
[size_is(cbBuf/2), unique] LPWSTR pszString;
} STRING_CONTAINER, *PSTRING_CONTAINER;
typedef struct _RPC_BINARY_CONTAINER {
DWORD cbBuf;
[size_is(cbBuf), unique] LPBYTE pszString;
} RPC_BINARY_CONTAINER, *PRPC_BINARY_CONTAINER;
typedef struct _SYSTEMTIME_CONTAINER {
DWORD cbBuf;
PSYSTEMTIME pSystemTime;
} SYSTEMTIME_CONTAINER, *PSYSTEMTIME_CONTAINER;
typedef struct _RPC_V2_NOTIFY_OPTIONS_TYPE {
WORD Type;
WORD Reserved0;
DWORD Reserved1;
DWORD Reserved2;
DWORD Count;
[size_is(Count), unique] PWORD pFields;
} RPC_V2_NOTIFY_OPTIONS_TYPE, *PRPC_V2_NOTIFY_OPTIONS_TYPE;
typedef struct _RPC_V2_NOTIFY_OPTIONS {
DWORD Version;
DWORD Reserved;
DWORD Count;
[size_is(Count), unique] PRPC_V2_NOTIFY_OPTIONS_TYPE pTypes;
} RPC_V2_NOTIFY_OPTIONS, *PRPC_V2_NOTIFY_OPTIONS;
typedef [switch_type(DWORD)] union _RPC_V2_NOTIFY_INFO_DATA_DATA {
[case(TABLE_STRING)]
STRING_CONTAINER String;
[case(TABLE_DWORD)]
DWORD dwData[2];
[case(TABLE_TIME)]
SYSTEMTIME_CONTAINER SystemTime;
[case(TABLE_DEVMODE)]
DEVMODE_CONTAINER DevMode;
[case(TABLE_SECURITYDESCRIPTOR)]
SECURITY_CONTAINER SecurityDescriptor;
} RPC_V2_NOTIFY_INFO_DATA_DATA, *PRPC_V2_NOTIFY_INFO_DATA_DATA;
typedef struct _RPC_V2_NOTIFY_INFO_DATA {
WORD Type;
WORD Field;
DWORD Reserved;
DWORD Id;
[switch_is(Reserved & 0xffff)] RPC_V2_NOTIFY_INFO_DATA_DATA Data;
} RPC_V2_NOTIFY_INFO_DATA, *PRPC_V2_NOTIFY_INFO_DATA;
typedef struct _RPC_V2_NOTIFY_INFO {
DWORD Version;
DWORD Flags;
DWORD Count;
[size_is(Count), unique] RPC_V2_NOTIFY_INFO_DATA aData[];
} RPC_V2_NOTIFY_INFO, *PRPC_V2_NOTIFY_INFO;
typedef [switch_type(DWORD)] union _RPC_V2_UREPLY_PRINTER {
[case (REPLY_PRINTER_CHANGE)]
PRPC_V2_NOTIFY_INFO pInfo;
} RPC_V2_UREPLY_PRINTER, *PRPC_V2_UREPLY_PRINTER;
DWORD
RpcEnumPrinters(
[in] DWORD Flags,
[in, string, unique] STRING_HANDLE Name,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pPrinterEnum,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded,
[out] LPDWORD pcReturned
);
DWORD
RpcOpenPrinter(
[in, string, unique] STRING_HANDLE pPrinterName,
[out] PRINTER_HANDLE *pHandle,
[in, string, unique] wchar_t * pDatatype,
[in] LPDEVMODE_CONTAINER pDevMode,
[in] DWORD AccessRequired
);
DWORD
RpcSetJob(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD JobId,
[in, unique] LPJOB_CONTAINER pJobContainer,
[in] DWORD Command
);
DWORD
RpcGetJob(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD JobId,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pJob,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded
);
DWORD
RpcEnumJobs(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD FirstJob,
[in] DWORD NoJobs,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pJob,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded,
[out] LPDWORD pcReturned
);
DWORD
RpcAddPrinter(
[in, string, unique] STRING_HANDLE pName,
[in] PPRINTER_CONTAINER pPrinterContainer,
[in] PDEVMODE_CONTAINER pDevModeContainer,
[in] PSECURITY_CONTAINER pSecurityContainer,
[out] PRINTER_HANDLE *pHandle
);
DWORD
RpcDeletePrinter(
[in] PRINTER_HANDLE hPrinter
);
DWORD
RpcSetPrinter(
[in] PRINTER_HANDLE hPrinter,
[in] PPRINTER_CONTAINER pPrinterContainer,
[in] PDEVMODE_CONTAINER pDevModeContainer,
[in] PSECURITY_CONTAINER pSecurityContainer,
[in] DWORD Command
);
DWORD
RpcGetPrinter(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pPrinter,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded
);
DWORD
RpcAddPrinterDriver(
[in, string, unique] STRING_HANDLE pName,
[in] PDRIVER_CONTAINER pDriverContainer
);
DWORD
RpcEnumPrinterDrivers(
[in, string, unique] STRING_HANDLE pName,
[in, unique, string] wchar_t * pEnvironment,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pDrivers,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded,
[out] LPDWORD pcReturned
);
DWORD
RpcGetPrinterDriver(
[in] PRINTER_HANDLE hPrinter,
[in, unique, string] wchar_t * pEnvironment,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pDriver,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded
);
DWORD
RpcGetPrinterDriverDirectory(
[in, string, unique] STRING_HANDLE pName,
[in, unique, string] wchar_t * pEnvironment,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pDriverDirectory,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded
);
DWORD
RpcDeletePrinterDriver(
[in, string, unique] STRING_HANDLE pName,
[in, string] wchar_t * pEnvironment,
[in, string] wchar_t * pDriverName
);
DWORD
RpcAddPrintProcessor(
[in, string, unique] STRING_HANDLE pName,
[in, string] wchar_t * pEnvironment,
[in, string] wchar_t * pPathName,
[in, string] wchar_t * pPrintProcessorName
);
DWORD
RpcEnumPrintProcessors(
[in, string, unique] STRING_HANDLE pName,
[in, unique, string] wchar_t * pEnvironment,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pPrintProcessorInfo,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded,
[out] LPDWORD pcReturned
);
DWORD
RpcGetPrintProcessorDirectory(
[in, string, unique] STRING_HANDLE pName,
[in, unique, string] wchar_t * pEnvironment,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pPrintProcessorDirectory,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded
);
DWORD
RpcStartDocPrinter(
[in] PRINTER_HANDLE hPrinter,
[in] PDOC_INFO_CONTAINER pDocInfoContainer,
[out] LPDWORD pJobId
);
DWORD
RpcStartPagePrinter(
[in] PRINTER_HANDLE hPrinter
);
DWORD
RpcWritePrinter(
[in] PRINTER_HANDLE hPrinter,
[in, size_is(cbBuf)] LPBYTE pBuf,
[in] DWORD cbBuf,
[out] LPDWORD pcWritten
);
DWORD
RpcEndPagePrinter(
[in] PRINTER_HANDLE hPrinter
);
DWORD
RpcAbortPrinter(
[in] PRINTER_HANDLE hPrinter
);
DWORD
RpcReadPrinter(
[in] PRINTER_HANDLE hPrinter,
[out, size_is(cbBuf)] LPBYTE pBuf,
[in] DWORD cbBuf,
[out] LPDWORD pcNoBytesRead
);
DWORD
RpcEndDocPrinter(
[in] PRINTER_HANDLE hPrinter
);
DWORD
RpcAddJob(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pAddJob,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded
);
DWORD
RpcScheduleJob(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD JobId
);
DWORD
RpcGetPrinterData(
[in] PRINTER_HANDLE hPrinter,
[in, string] wchar_t * pValueName,
[out] LPDWORD pType,
[out, size_is(nSize)] LPBYTE pData,
[in] DWORD nSize,
[out] LPDWORD pcbNeeded
);
DWORD
RpcSetPrinterData(
[in] PRINTER_HANDLE hPrinter,
[in, string] wchar_t * pValueName,
[in] DWORD Type,
[in, size_is(cbData)] LPBYTE pData,
[in] DWORD cbData
);
DWORD
RpcWaitForPrinterChange(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD Flags,
[out] LPDWORD pFlags
);
DWORD
RpcClosePrinter(
[in, out] PRINTER_HANDLE *phPrinter
);
DWORD
RpcAddForm(
[in] PRINTER_HANDLE hPrinter,
[in] PFORM_CONTAINER pFormInfoContainer
);
DWORD
RpcDeleteForm(
[in] PRINTER_HANDLE hPrinter,
[in, string] wchar_t * pFormName
);
DWORD
RpcGetForm(
[in] PRINTER_HANDLE hPrinter,
[in, string] wchar_t * pFormName,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pForm,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded
);
DWORD
RpcSetForm(
[in] PRINTER_HANDLE hPrinter,
[in, string] wchar_t * pFormName,
[in] PFORM_CONTAINER pFormInfoContainer
);
DWORD
RpcEnumForms(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pForm,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded,
[out] LPDWORD pcReturned
);
DWORD
RpcEnumPorts(
[in, string, unique] STRING_HANDLE pName,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pPort,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded,
[out] LPDWORD pcReturned
);
DWORD
RpcEnumMonitors(
[in, string, unique] STRING_HANDLE pName,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pMonitor,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded,
[out] LPDWORD pcReturned
);
DWORD
RpcAddPort(
[in, string, unique] STRING_HANDLE pName,
[in] ULONG_PTR hWnd,
[in, string] wchar_t * pMonitorName
);
DWORD
RpcConfigurePort(
[in, string, unique] STRING_HANDLE pName,
[in] ULONG_PTR hWnd,
[in, string] wchar_t * pPortName
);
DWORD
RpcDeletePort(
[in, string, unique] STRING_HANDLE pName,
[in] ULONG_PTR hWnd,
[in, string] wchar_t * pPortName
);
DWORD
RpcCreatePrinterIC(
[in] PRINTER_HANDLE hPrinter,
[out] GDI_HANDLE *pHandle,
[in] LPDEVMODE_CONTAINER pDevModeContainer
);
DWORD
RpcPlayGdiScriptOnPrinterIC(
[in] GDI_HANDLE hPrinterIC,
[in, size_is(cIn)] LPBYTE pIn,
[in] DWORD cIn,
[out, size_is(cOut)] LPBYTE pOut,
[in] DWORD cOut,
[in] DWORD ul
);
DWORD
RpcDeletePrinterIC(
[in, out] GDI_HANDLE *phPrinterIC
);
DWORD
RpcAddPrinterConnection(
[in, string] STRING_HANDLE pName
);
DWORD
RpcDeletePrinterConnection(
[in, string] STRING_HANDLE pName
);
DWORD
RpcPrinterMessageBox(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD Error,
[in] ULONG_PTR hWnd,
[in, string, unique] wchar_t *pText,
[in, string, unique] wchar_t *pCaption,
[in] DWORD dwType
);
DWORD
RpcAddMonitor(
[in, string, unique] STRING_HANDLE Name,
[in] PMONITOR_CONTAINER pMonitorContainer
);
DWORD
RpcDeleteMonitor(
[in, string, unique] STRING_HANDLE Name,
[in, unique, string] wchar_t * pEnvironment,
[in, string] wchar_t *pMonitorName
);
DWORD
RpcDeletePrintProcessor(
[in, string, unique] STRING_HANDLE Name,
[in, unique, string] wchar_t * pEnvironment,
[in, string] wchar_t *pPrintProcessorName
);
DWORD
RpcAddPrintProvidor(
[in, string, unique] STRING_HANDLE Name,
[in] PPROVIDOR_CONTAINER pProvidorContainer
);
DWORD
RpcDeletePrintProvidor(
[in, string, unique] STRING_HANDLE Name,
[in, unique, string] wchar_t * pEnvironment,
[in, string] wchar_t *pPrintProvidorName
);
DWORD
RpcEnumPrintProcessorDatatypes(
[in, string, unique] STRING_HANDLE pName,
[in, unique, string] wchar_t * pPrintProcessorName,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pDatatypes,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded,
[out] LPDWORD pcReturned
);
DWORD
RpcResetPrinter(
[in] PRINTER_HANDLE hPrinter,
[in, string, unique] wchar_t * pDatatype,
[in] LPDEVMODE_CONTAINER pDevMode
);
//
// Everything below is new to the interface (new for daytona).
//
DWORD
RpcGetPrinterDriver2(
[in] PRINTER_HANDLE hPrinter,
[in, unique, string] wchar_t * pEnvironment,
[in] DWORD Level,
[in, out, unique, size_is(cbBuf)] LPBYTE pDriver,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded,
[in] DWORD dwClientMajorVersion,
[in] DWORD dwClientMinorVersion,
[out] LPDWORD pdwServerMaxVersion,
[out] LPDWORD pdwServerMinVersion
);
DWORD
RpcClientFindFirstPrinterChangeNotification(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD fdwFlags,
[in] DWORD fdwOptions,
[in] DWORD dwPID,
[in, unique] PRPC_V2_NOTIFY_OPTIONS pOptions,
[out] LPDWORD pdwEvent
);
DWORD
RpcFindNextPrinterChangeNotification(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD fdwFlags,
[out] LPDWORD pdwChange,
[in, unique] PRPC_V2_NOTIFY_OPTIONS pOptions,
[out] PRPC_V2_NOTIFY_INFO* ppInfo
);
DWORD
RpcFindClosePrinterChangeNotification(
[in] PRINTER_HANDLE hPrinter
);
//
// This func will never be used (only be beta2 daytona)
//
DWORD
RpcRouterFindFirstPrinterChangeNotificationOld(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD fdwFlags,
[in] DWORD fdwOptions,
[in, string, unique] wchar_t * pszLocalMachine,
[in] DWORD dwPrinterLocal
);
//
// The following calls:
//
// RpcReplyPrinterOpenChangeNotification
// RpcReplyPrinterChangeNotification
// RpcReplyPrinterCloseChangeNotification
//
// Originate from the printserver's spooler and go the the client
// machine for notifications.
//
DWORD
RpcReplyOpenPrinter(
[in, string] STRING_HANDLE pMachine,
[out] PRINTER_HANDLE *phPrinterNotify,
[in] DWORD dwPrinterRemote,
[in] DWORD dwType,
[in] DWORD cbBuffer,
[in, unique, size_is(cbBuffer)] LPBYTE pBuffer
);
DWORD
RpcRouterReplyPrinter(
[in] PRINTER_HANDLE hNotify,
[in] DWORD fdwFlags,
[in] DWORD cbBuffer,
[in, unique, size_is(cbBuffer)] LPBYTE pBuffer
);
DWORD
RpcReplyClosePrinter(
[in, out] PRINTER_HANDLE *phNotify
);
DWORD
RpcAddPortEx(
[in, string, unique] STRING_HANDLE pName,
[in] LPPORT_CONTAINER pPortContainer,
[in] LPPORT_VAR_CONTAINER pPortVarContainer,
[in, string] wchar_t * pMonitorName
);
DWORD
RpcRemoteFindFirstPrinterChangeNotification(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD fdwFlags,
[in] DWORD fdwOptions,
[in, string, unique] wchar_t * pszLocalMachine,
[in] DWORD dwPrinterLocal,
[in] DWORD cbBuffer,
[in, out, unique, size_is(cbBuffer)] LPBYTE pBuffer
);
DWORD
RpcSpoolerInit(
[in] STRING_HANDLE pName
);
DWORD
RpcResetPrinterEx(
[in] PRINTER_HANDLE hPrinter,
[in, string, unique] wchar_t * pDatatype,
[in] LPDEVMODE_CONTAINER pDevMode,
[in] DWORD dwFlags
);
//
// The following calls are new for PPC release NT 3.51
//
DWORD
RpcRemoteFindFirstPrinterChangeNotificationEx(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD fdwFlags,
[in] DWORD fdwOptions,
[in, string, unique] wchar_t * pszLocalMachine,
[in] DWORD dwPrinterLocal,
[in, unique] PRPC_V2_NOTIFY_OPTIONS pOptions
);
DWORD
RpcRouterReplyPrinterEx(
[in] PRINTER_HANDLE hNotify,
[in] DWORD dwColor,
[in] DWORD fdwFlags,
[out] PDWORD pdwResult,
[in] DWORD dwReplyType,
[in, switch_is(dwReplyType)] RPC_V2_UREPLY_PRINTER Reply
);
DWORD
RpcRouterRefreshPrinterChangeNotification(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD dwColor,
[in, unique] PRPC_V2_NOTIFY_OPTIONS pOptions,
[out] PRPC_V2_NOTIFY_INFO* ppInfo
);
// Testing Apis for PPC
DWORD
RpcSetAllocFailCount(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD dwFailCount,
[out] LPDWORD lpdwAllocCount,
[out] LPDWORD lpdwFreeCount,
[out] LPDWORD lpdwFailCountHit
);
// New for SUR beta NT 4.0
DWORD
RpcOpenPrinterEx(
[in, string, unique] STRING_HANDLE pPrinterName,
[out] PRINTER_HANDLE *pHandle,
[in, string, unique] wchar_t * pDatatype,
[in] LPDEVMODE_CONTAINER pDevMode,
[in] DWORD AccessRequired,
[in] PSPLCLIENT_CONTAINER pClientInfo
);
DWORD
RpcAddPrinterEx(
[in, string, unique] STRING_HANDLE pName,
[in] PPRINTER_CONTAINER pPrinterContainer,
[in] PDEVMODE_CONTAINER pDevModeContainer,
[in] PSECURITY_CONTAINER pSecurityContainer,
[in] PSPLCLIENT_CONTAINER pClientInfo,
[out] PRINTER_HANDLE *pHandle
);
DWORD
RpcSetPort(
[in, string, unique] STRING_HANDLE pName,
[in, string, unique] wchar_t * pPortName,
[in] LPPORT_CONTAINER pPortContainer
);
DWORD
RpcEnumPrinterData(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD dwIndex,
[out, size_is(cbValueName/sizeof(wchar_t))] wchar_t * pValueName,
[in] DWORD cbValueName,
[out] LPDWORD pcbValueName,
[out] LPDWORD pType,
[out, size_is(cbData)] LPBYTE pData,
[in] DWORD cbData,
[out] LPDWORD pcbData
);
DWORD
RpcDeletePrinterData(
[in] PRINTER_HANDLE hPrinter,
[in, string] wchar_t * pValueName
);
//
// New for clustering
//
DWORD
RpcClusterSplOpen(
[in, string, unique] STRING_HANDLE pServerName,
[in, string, unique] wchar_t * pResource,
[out] PRINTER_HANDLE *pHandle,
[in, string, unique] wchar_t * pName,
[in, string, unique] wchar_t * pAddress
);
DWORD
RpcClusterSplClose(
[in, out] PRINTER_HANDLE * phPrinter
);
DWORD
RpcClusterSplIsAlive(
[in] PRINTER_HANDLE hPrinter
);
DWORD
RpcSetPrinterDataEx(
[in] PRINTER_HANDLE hPrinter,
[in, string] const wchar_t * pKeyName,
[in, string] const wchar_t * pValueName,
[in] DWORD Type,
[in, size_is(cbData)] LPBYTE pData,
[in] DWORD cbData
);
DWORD
RpcGetPrinterDataEx(
[in] PRINTER_HANDLE hPrinter,
[in, string] const wchar_t * pKeyName,
[in, string] const wchar_t * pValueName,
[out] LPDWORD pType,
[out, size_is(nSize)] LPBYTE pData,
[in] DWORD nSize,
[out] LPDWORD pcbNeeded
);
DWORD
RpcEnumPrinterDataEx(
[in] PRINTER_HANDLE hPrinter,
[in, string] const wchar_t * pKeyName,
[out, size_is(cbEnumValues)] LPBYTE pEnumValues,
[in] DWORD cbEnumValues,
[out] LPDWORD pcbEnumValues,
[out] LPDWORD pnEnumValues
);
DWORD
RpcEnumPrinterKey(
[in] PRINTER_HANDLE hPrinter,
[in, string] const wchar_t * pKeyName,
[out, size_is(cbSubkey/sizeof(wchar_t))] wchar_t * pSubkey,
[in] DWORD cbSubkey,
[out] LPDWORD pcbSubkey
);
DWORD
RpcDeletePrinterDataEx(
[in] PRINTER_HANDLE hPrinter,
[in, string] const wchar_t * pKeyName,
[in, string] const wchar_t * pValueName
);
DWORD
RpcDeletePrinterKey(
[in] PRINTER_HANDLE hPrinter,
[in, string] const wchar_t * pKeyName
);
DWORD
RpcSeekPrinter(
[in] PRINTER_HANDLE hPrinter,
[in] LARGE_INTEGER liDistanceToMove,
[out] PLARGE_INTEGER pliNewPointer,
[in] DWORD dwMoveMethod,
[in] BOOL bWrite
);
DWORD
RpcDeletePrinterDriverEx(
[in, string, unique] STRING_HANDLE pName,
[in, string] wchar_t *pEnvironment,
[in, string] wchar_t *pDriverName,
[in] DWORD dwDeleteFlag,
[in] DWORD dwVersionNum
);
DWORD
RpcAddPerMachineConnection(
[in, string, unique] STRING_HANDLE pServer,
[in, string] const wchar_t * pPrinterName,
[in, string] const wchar_t * pPrintServer,
[in, string] const wchar_t * pProvider
);
DWORD
RpcDeletePerMachineConnection(
[in, string, unique] STRING_HANDLE pServer,
[in, string] const wchar_t * pPrinterName
);
DWORD
RpcEnumPerMachineConnections(
[in, string, unique] STRING_HANDLE pServer,
[in, out, unique, size_is(cbBuf)] LPBYTE pPrinterEnum,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded,
[out] LPDWORD pcReturned
);
DWORD
RpcXcvData(
[in] PRINTER_HANDLE hXcv,
[in, string] const wchar_t *pszDataName,
[in, size_is(cbInputData)] PBYTE pInputData,
[in] DWORD cbInputData,
[out, size_is(cbOutputData)] PBYTE pOutputData,
[in] DWORD cbOutputData,
[out] PDWORD pcbOutputNeeded,
[in, out] PDWORD pdwStatus
);
DWORD
RpcAddPrinterDriverEx(
[in, string, unique] STRING_HANDLE pName,
[in] PDRIVER_CONTAINER pDriverContainer,
[in] DWORD dwFileCopyFlags
);
// Private Spooler interface to return the server side hPrinter to the client
DWORD
RpcSplOpenPrinter(
[in, string, unique] STRING_HANDLE pPrinterName,
[out] PRINTER_HANDLE *pHandle,
[in, string, unique] wchar_t * pDatatype,
[in] LPDEVMODE_CONTAINER pDevMode,
[in] DWORD AccessRequired,
[in, out] PSPLCLIENT_CONTAINER pSplClientContainer
);
DWORD
RpcGetSpoolFileInfo(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD dwAppProcessId,
[in] DWORD dwLevel,
[out, size_is(cbBuf)] LPBYTE pSpoolFileInfo,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded
);
DWORD
RpcCommitSpoolData(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD dwAppProcessId,
[in] DWORD cbCommit,
[in] DWORD dwLevel,
[out, size_is(cbBuf)] LPBYTE pSpoolFileInfo,
[in] DWORD cbBuf,
[out] LPDWORD pcbNeeded
);
DWORD
RpcGetSpoolFileInfo2(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD dwAppProcessId,
[in] DWORD dwLevel,
[in,out] LPFILE_INFO_CONTAINER pSplFileInfoContainer
);
DWORD
RpcCommitSpoolData2(
[in] PRINTER_HANDLE hPrinter,
[in] DWORD dwAppProcessId,
[in] DWORD cbCommit,
[in] DWORD dwLevel,
[in,out] LPFILE_INFO_CONTAINER pSplFileInfoContainer
);
DWORD
RpcCloseSpoolFileHandle(
[in] PRINTER_HANDLE hPrinter
);
DWORD
RpcFlushPrinter(
[in] PRINTER_HANDLE hPrinter,
[in, size_is(cbBuf)] LPBYTE pBuf,
[in] DWORD cbBuf,
[out] LPDWORD pcWritten,
[in] DWORD cSleep
);
typedef struct _RPC_BIDI_DATA
{
DWORD dwBidiType;
[switch_is(dwBidiType)] union {
[case(BIDI_NULL, BIDI_BOOL)]
BOOL bData;
[case(BIDI_INT)]
LONG iData;
[case(BIDI_STRING, BIDI_TEXT, BIDI_ENUM)]
[string,unique] wchar_t* sData;
[case(BIDI_FLOAT)]
FLOAT fData;
[case(BIDI_BLOB)]
RPC_BINARY_CONTAINER biData;
} u;
} RPC_BIDI_DATA, *PRPC_BIDI_DATA, *LPRPC_BIDI_DATA;
typedef struct _RPC_BIDI_REQUEST_DATA {
DWORD dwReqNumber;
[string,unique] wchar_t* pSchema;
RPC_BIDI_DATA data;
} RPC_BIDI_REQUEST_DATA, *PRPC_BIDI_REQUEST_DATA, *LPRPC_BIDI_REQUEST_DATA;
typedef struct _RPC_BIDI_REQUEST_CONTAINER {
DWORD Version;
DWORD Flags;
DWORD Count;
[size_is(Count), unique] RPC_BIDI_REQUEST_DATA aData[];
} RPC_BIDI_REQUEST_CONTAINER, *PRPC_BIDI_REQUEST_CONTAINER, *LPRPC_BIDI_REQUEST_CONTAINER;
typedef struct _RPC_BIDI_RESPONSE_DATA {
DWORD dwResult;
DWORD dwReqNumber;
[string,unique] wchar_t* pSchema;
RPC_BIDI_DATA data;
} RPC_BIDI_RESPONSE_DATA, *PRPC_BIDI_RESPONSE_DATA, *LPRPC_BIDI_RESPONSE_DATA;
typedef struct _RPC_BIDI_RESPONSE_CONTAINER {
DWORD Version;
DWORD Flags;
DWORD Count;
[size_is(Count), unique] RPC_BIDI_RESPONSE_DATA aData[];
} RPC_BIDI_RESPONSE_CONTAINER, *PRPC_BIDI_RESPONSE_CONTAINER, *LPRPC_BIDI_RESPONSE_CONTAINER;
DWORD RpcSendRecvBidiData (
[in] PRINTER_HANDLE hPrinter,
[in,string,unique] const wchar_t *pAction,
[in] PRPC_BIDI_REQUEST_CONTAINER pReqData,
[out] PRPC_BIDI_RESPONSE_CONTAINER *ppRespData);
DWORD RpcAddDriverCatalog(
[in] PRINTER_HANDLE hPrinter,
[in] PDRIVER_INFCAT_CONTAINER pDriverInfCatContainer,
[in] DWORD dwCatalogCopyFlags);
}