|
|
/*++
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); }
|