Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
For ease of implementation the full IDL for the IRemoteWinspool interface (section 3.1.4) is provided below. The syntax uses IDL syntax extensions defined in [MS-RPCE]. Some of the data types and structures used by this interface are defined in other specifications, including [MS-DTYP] and [MS-RPRN].
-
// [MS-PAR] interface [ uuid(76F03F96-CDFD-44fc-A22C-64950A001209), version(1.0), #ifdef __midl ms_union, #endif // __midl pointer_default(unique) ] interface IRemoteWinspool { import "ms-dtyp.idl"; // [MS-RPRN] common constants #define TABLE_DWORD 0x1 #define TABLE_STRING 0x2 #define TABLE_DEVMODE 0x3 #define TABLE_TIME 0x4 #define TABLE_SECURITYDESCRIPTOR 0x5 #define SPLFILE_CONTENT_TYPE_PROP_NAME L"Spool File Contents" // [MS-RPRN] common enumerations typedef enum { BIDI_NULL = 0, BIDI_INT = 1, BIDI_FLOAT = 2, BIDI_BOOL = 3, BIDI_STRING = 4, BIDI_TEXT = 5, BIDI_ENUM = 6, BIDI_BLOB = 7 } BIDI_TYPE; typedef enum { kRpcPropertyTypeString = 1, kRpcPropertyTypeInt32, kRpcPropertyTypeInt64, kRpcPropertyTypeByte, kRpcPropertyTypeBuffer } RPC_EPrintPropertyType; typedef enum { kInvalidJobState = 0, kLogJobPrinted, kLogJobRendered, kLogJobError, kLogJobPipelineError, kLogOfflineFileFull } EBranchOfficeJobEventType; // [MS-RPRN] common data types typedef unsigned short LANGID; typedef [context_handle] void* GDI_HANDLE; typedef [context_handle] void* PRINTER_HANDLE; typedef [handle] wchar_t* STRING_HANDLE; // [MS-RPRN] common utility structures typedef struct { long cx; long cy; } SIZE; typedef struct { long left; long top; long right; long bottom; } RECTL; // [MS-RPRN] common device state structure typedef struct _devicemode { wchar_t dmDeviceName[32]; unsigned short dmSpecVersion; unsigned short dmDriverVersion; unsigned short dmSize; unsigned short dmDriverExtra; DWORD dmFields; short dmOrientation; short dmPaperSize; short dmPaperLength; short dmPaperWidth; short dmScale; short dmCopies; short dmDefaultSource; short dmPrintQuality; short dmColor; short dmDuplex; short dmYResolution; short dmTTOption; short dmCollate; wchar_t dmFormName[32]; unsigned short reserved0; DWORD reserved1; DWORD reserved2; DWORD reserved3; DWORD dmNup; DWORD reserved4; DWORD dmICMMethod; DWORD dmICMIntent; DWORD dmMediaType; DWORD dmDitherType; DWORD reserved5; DWORD reserved6; DWORD reserved7; DWORD reserved8; } DEVMODE; // [MS-RPRN] common info structures typedef struct _DOC_INFO_1 { [string] wchar_t* pDocName; [string] wchar_t* pOutputFile; [string] wchar_t* pDatatype; } DOC_INFO_1; typedef struct _DRIVER_INFO_1 { [string] wchar_t* pName; } DRIVER_INFO_1; typedef struct _DRIVER_INFO_2 { DWORD cVersion; [string] wchar_t* pName; [string] wchar_t* pEnvironment; [string] wchar_t* pDriverPath; [string] wchar_t* pDataFile; [string] wchar_t* pConfigFile; } DRIVER_INFO_2; typedef struct _RPC_DRIVER_INFO_3 { DWORD cVersion; [string] wchar_t* pName; [string] wchar_t* pEnvironment; [string] wchar_t* pDriverPath; [string] wchar_t* pDataFile; [string] wchar_t* pConfigFile; [string] wchar_t* pHelpFile; [string] wchar_t* pMonitorName; [string] wchar_t* pDefaultDataType; DWORD cchDependentFiles; [size_is(cchDependentFiles), unique] wchar_t* pDependentFiles; } RPC_DRIVER_INFO_3; typedef struct _RPC_DRIVER_INFO_4 { DWORD cVersion; [string] wchar_t* pName; [string] wchar_t* pEnvironment; [string] wchar_t* pDriverPath; [string] wchar_t* pDataFile; [string] wchar_t* pConfigFile; [string] wchar_t* pHelpFile; [string] wchar_t* pMonitorName; [string] wchar_t* pDefaultDataType; DWORD cchDependentFiles; [size_is(cchDependentFiles), unique] wchar_t* pDependentFiles; DWORD cchPreviousNames; [size_is(cchPreviousNames), unique] wchar_t* pszzPreviousNames; } RPC_DRIVER_INFO_4; typedef struct _RPC_DRIVER_INFO_6 { DWORD cVersion; [string] wchar_t* pName; [string] wchar_t* pEnvironment; [string] wchar_t* pDriverPath; [string] wchar_t* pDataFile; [string] wchar_t* pConfigFile; [string] wchar_t* pHelpFile; [string] wchar_t* pMonitorName; [string] wchar_t* pDefaultDataType; DWORD cchDependentFiles; [size_is(cchDependentFiles), unique] wchar_t* pDependentFiles; DWORD cchPreviousNames; [size_is(cchPreviousNames), unique] wchar_t* pszzPreviousNames; FILETIME ftDriverDate; DWORDLONG dwlDriverVersion; [string] wchar_t* pMfgName; [string] wchar_t* pOEMUrl; [string] wchar_t* pHardwareID; [string] wchar_t* pProvider; } RPC_DRIVER_INFO_6; typedef struct _RPC_DRIVER_INFO_8 { DWORD cVersion; [string] wchar_t* pName; [string] wchar_t* pEnvironment; [string] wchar_t* pDriverPath; [string] wchar_t* pDataFile; [string] wchar_t* pConfigFile; [string] wchar_t* pHelpFile; [string] wchar_t* pMonitorName; [string] wchar_t* pDefaultDataType; DWORD cchDependentFiles; [size_is(cchDependentFiles), unique] wchar_t* pDependentFiles; DWORD cchPreviousNames; [size_is(cchPreviousNames), unique] wchar_t* pszzPreviousNames; FILETIME ftDriverDate; DWORDLONG dwlDriverVersion; [string] wchar_t* pMfgName; [string] wchar_t* pOEMUrl; [string] wchar_t* pHardwareID; [string] wchar_t* pProvider; [string] wchar_t* pPrintProcessor; [string] wchar_t* pVendorSetup; DWORD cchColorProfiles; [size_is(cchColorProfiles), unique] wchar_t* pszzColorProfiles; [string] wchar_t* pInfPath; DWORD dwPrinterDriverAttributes; DWORD cchCoreDependencies; [size_is(cchCoreDependencies), unique] wchar_t* pszzCoreDriverDependencies; FILETIME ftMinInboxDriverVerDate; DWORDLONG dwlMinInboxDriverVerVersion; } RPC_DRIVER_INFO_8; typedef struct _FORM_INFO_1 { DWORD Flags; [string] wchar_t* pName; SIZE Size; RECTL ImageableArea; } FORM_INFO_1; typedef struct _RPC_FORM_INFO_2 { DWORD Flags; [string, unique] const wchar_t* pName; SIZE Size; RECTL ImageableArea; [string, unique] const char* pKeyword; DWORD StringType; [string, unique] const wchar_t* pMuiDll; DWORD dwResourceId; [string, unique] const wchar_t* pDisplayName; LANGID wLangID; } RPC_FORM_INFO_2; typedef struct _JOB_INFO_1 { DWORD JobId; [string] wchar_t* pPrinterName; [string] wchar_t* pMachineName; [string] wchar_t* pUserName; [string] wchar_t* pDocument; [string] wchar_t* pDatatype; [string] wchar_t* pStatus; DWORD Status; DWORD Priority; DWORD Position; DWORD TotalPages; DWORD PagesPrinted; SYSTEMTIME Submitted; } JOB_INFO_1; typedef struct _JOB_INFO_2 { DWORD JobId; [string] wchar_t* pPrinterName; [string] wchar_t* pMachineName; [string] wchar_t* pUserName; [string] wchar_t* pDocument; [string] wchar_t* pNotifyName; [string] wchar_t* pDatatype; [string] wchar_t* pPrintProcessor; [string] wchar_t* pParameters; [string] wchar_t* pDriverName; DEVMODE* pDevMode; [string] wchar_t* pStatus; SECURITY_DESCRIPTOR* pSecurityDescriptor; DWORD Status; DWORD Priority; DWORD Position; DWORD StartTime; DWORD UntilTime; DWORD TotalPages; DWORD Size; SYSTEMTIME Submitted; DWORD Time; DWORD PagesPrinted; } JOB_INFO_2; typedef struct _JOB_INFO_3 { DWORD JobId; DWORD NextJobId; DWORD Reserved; } JOB_INFO_3; typedef struct _JOB_INFO_4 { DWORD JobId; [string] wchar_t* pPrinterName; [string] wchar_t* pMachineName; [string] wchar_t* pUserName; [string] wchar_t* pDocument; [string] wchar_t* pNotifyName; [string] wchar_t* pDatatype; [string] wchar_t* pPrintProcessor; [string] wchar_t* pParameters; [string] wchar_t* pDriverName; DEVMODE* pDevMode; [string] wchar_t* pStatus; SECURITY_DESCRIPTOR* pSecurityDescriptor; DWORD Status; DWORD Priority; DWORD Position; DWORD StartTime; DWORD UntilTime; DWORD TotalPages; DWORD Size; SYSTEMTIME Submitted; DWORD Time; DWORD PagesPrinted; long SizeHigh; } JOB_INFO_4; typedef struct _MONITOR_INFO_1 { [string] wchar_t* pName; } MONITOR_INFO_1; typedef struct _MONITOR_INFO_2 { [string] wchar_t* pName; [string] wchar_t* pEnvironment; [string] wchar_t* pDLLName; } MONITOR_INFO_2; typedef struct _PORT_INFO_1 { [string] wchar_t* pPortName; } PORT_INFO_1; typedef struct _PORT_INFO_2 { [string] wchar_t* pPortName; [string] wchar_t* pMonitorName; [string] wchar_t* pDescription; DWORD fPortType; DWORD Reserved; } PORT_INFO_2; typedef struct _PORT_INFO_3 { DWORD dwStatus; [string] wchar_t* pszStatus; DWORD dwSeverity; } PORT_INFO_3; typedef struct _PORT_INFO_FF { [string] wchar_t* pPortName; DWORD cbMonitorData; BYTE* pMonitorData; } PORT_INFO_FF; typedef struct _PRINTER_INFO_STRESS { [string] wchar_t* pPrinterName; [string] wchar_t* pServerName; DWORD cJobs; DWORD cTotalJobs; DWORD cTotalBytes; SYSTEMTIME stUpTime; DWORD MaxcRef; DWORD cTotalPagesPrinted; DWORD dwGetVersion; DWORD fFreeBuild; DWORD cSpooling; DWORD cMaxSpooling; DWORD cRef; DWORD cErrorOutOfPaper; DWORD cErrorNotReady; DWORD cJobError; DWORD dwNumberOfProcessors; DWORD dwProcessorType; DWORD dwHighPartTotalBytes; DWORD cChangeID; DWORD dwLastError; DWORD Status; DWORD cEnumerateNetworkPrinters; DWORD cAddNetPrinters; unsigned short wProcessorArchitecture; unsigned short wProcessorLevel; DWORD cRefIC; DWORD dwReserved2; DWORD dwReserved3; } PRINTER_INFO_STRESS; typedef struct _PRINTER_INFO_1 { DWORD Flags; [string] wchar_t* pDescription; [string] wchar_t* pName; [string] wchar_t* pComment; } PRINTER_INFO_1; typedef struct _PRINTER_INFO_2 { [string] wchar_t* pServerName; [string] wchar_t* pPrinterName; [string] wchar_t* pShareName; [string] wchar_t* pPortName; [string] wchar_t* pDriverName; [string] wchar_t* pComment; [string] wchar_t* pLocation; DEVMODE* pDevMode; [string] wchar_t* pSepFile; [string] wchar_t* pPrintProcessor; [string] wchar_t* pDatatype; [string] wchar_t* pParameters; SECURITY_DESCRIPTOR* pSecurityDescriptor; DWORD Attributes; DWORD Priority; DWORD DefaultPriority; DWORD StartTime; DWORD UntilTime; DWORD Status; DWORD cJobs; DWORD AveragePPM; } PRINTER_INFO_2; typedef struct _PRINTER_INFO_3 { SECURITY_DESCRIPTOR* pSecurityDescriptor; } PRINTER_INFO_3; typedef struct _PRINTER_INFO_4 { [string] wchar_t* pPrinterName; [string] wchar_t* pServerName; DWORD Attributes; } PRINTER_INFO_4; typedef struct _PRINTER_INFO_5 { [string] wchar_t* pPrinterName; [string] wchar_t* pPortName; DWORD Attributes; DWORD DeviceNotSelectedTimeout; DWORD TransmissionRetryTimeout; } PRINTER_INFO_5; typedef struct _PRINTER_INFO_6 { DWORD dwStatus; } PRINTER_INFO_6; typedef struct _PRINTER_INFO_7 { [string] wchar_t* pszObjectGUID; DWORD dwAction; } PRINTER_INFO_7; typedef struct _PRINTER_INFO_8 { DEVMODE* pDevMode; } PRINTER_INFO_8; typedef struct _PRINTER_INFO_9 { DEVMODE* pDevMode; } PRINTER_INFO_9; typedef struct _SPLCLIENT_INFO_1 { DWORD dwSize; [string] wchar_t* pMachineName; [string] wchar_t* pUserName; DWORD dwBuildNum; DWORD dwMajorVersion; DWORD dwMinorVersion; unsigned short wProcessorArchitecture; } SPLCLIENT_INFO_1; typedef struct _SPLCLIENT_INFO_2 { LONG_PTR notUsed; } SPLCLIENT_INFO_2; typedef struct _SPLCLIENT_INFO_3 { unsigned int cbSize; DWORD dwFlags; DWORD dwSize; [string] wchar_t* pMachineName; [string] wchar_t* pUserName; DWORD dwBuildNum; DWORD dwMajorVersion; DWORD dwMinorVersion; unsigned short wProcessorArchitecture; unsigned __int64 hSplPrinter; } SPLCLIENT_INFO_3; // [MS-RPRN] common info container structures typedef struct _DEVMODE_CONTAINER { DWORD cbBuf; [size_is(cbBuf), unique] BYTE* pDevMode; } DEVMODE_CONTAINER; typedef struct _DOC_INFO_CONTAINER { DWORD Level; [switch_is(Level)] union { [case(1)] DOC_INFO_1* pDocInfo1; } DocInfo; } DOC_INFO_CONTAINER; typedef struct _DRIVER_CONTAINER { DWORD Level; [switch_is(Level)] union { [case(1)] DRIVER_INFO_1* Level1; [case(2)] DRIVER_INFO_2* Level2; [case(3)] RPC_DRIVER_INFO_3* Level3; [case(4)] RPC_DRIVER_INFO_4* Level4; [case(6)] RPC_DRIVER_INFO_6* Level6; [case(8)] RPC_DRIVER_INFO_8* Level8; } DriverInfo; } DRIVER_CONTAINER; typedef struct _FORM_CONTAINER { DWORD Level; [switch_is(Level)] union { [case(1)] FORM_INFO_1* pFormInfo1; [case(2)] RPC_FORM_INFO_2* pFormInfo2; } FormInfo; } FORM_CONTAINER; typedef struct _JOB_CONTAINER { DWORD Level; [switch_is(Level)] union { [case(1)] JOB_INFO_1* Level1; [case(2)] JOB_INFO_2* Level2; [case(3)] JOB_INFO_3* Level3; [case(4)] JOB_INFO_4* Level4; } JobInfo; } JOB_CONTAINER; typedef struct _MONITOR_CONTAINER { DWORD Level; [switch_is(Level)] union { [case(1)] MONITOR_INFO_1* pMonitorInfo1; [case(2)] MONITOR_INFO_2* pMonitorInfo2; } MonitorInfo; } MONITOR_CONTAINER; typedef struct _PORT_CONTAINER { DWORD Level; [switch_is(0x00FFFFFF & Level)] union { [case(1)] PORT_INFO_1* pPortInfo1; [case(2)] PORT_INFO_2* pPortInfo2; [case(3)] PORT_INFO_3* pPortInfo3; [case(0x00FFFFFF)] PORT_INFO_FF* pPortInfoFF; } PortInfo; } PORT_CONTAINER; typedef struct _PORT_VAR_CONTAINER { DWORD cbMonitorData; [size_is(cbMonitorData), unique] BYTE* pMonitorData; } PORT_VAR_CONTAINER; typedef struct _PRINTER_CONTAINER { DWORD Level; [switch_is(Level)] union { [case(0)] PRINTER_INFO_STRESS* pPrinterInfoStress; [case(1)] PRINTER_INFO_1* pPrinterInfo1; [case(2)] PRINTER_INFO_2* pPrinterInfo2; [case(3)] PRINTER_INFO_3* pPrinterInfo3; [case(4)] PRINTER_INFO_4* pPrinterInfo4; [case(5)] PRINTER_INFO_5* pPrinterInfo5; [case(6)] PRINTER_INFO_6* pPrinterInfo6; [case(7)] PRINTER_INFO_7* pPrinterInfo7; [case(8)] PRINTER_INFO_8* pPrinterInfo8; [case(9)] PRINTER_INFO_9* pPrinterInfo9; } PrinterInfo; } PRINTER_CONTAINER; typedef struct _RPC_BINARY_CONTAINER { DWORD cbBuf; [size_is(cbBuf), unique] BYTE* pszString; } RPC_BINARY_CONTAINER; typedef struct _RPC_BIDI_DATA { DWORD dwBidiType; [switch_is(dwBidiType)] union { [case(BIDI_NULL, BIDI_BOOL)] int 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; typedef struct _RPC_BIDI_REQUEST_DATA { DWORD dwReqNumber; [string, unique] wchar_t* pSchema; RPC_BIDI_DATA data; } RPC_BIDI_REQUEST_DATA; typedef struct _RPC_BIDI_RESPONSE_DATA { DWORD dwResult; DWORD dwReqNumber; [string, unique] wchar_t* pSchema; RPC_BIDI_DATA data; } RPC_BIDI_RESPONSE_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; 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; typedef struct SECURITY_CONTAINER { DWORD cbBuf; [size_is(cbBuf), unique] BYTE* pSecurity; } SECURITY_CONTAINER; typedef struct _SPLCLIENT_CONTAINER { DWORD Level; [switch_is(Level)] union { [case(1)] SPLCLIENT_INFO_1* pClientInfo1; [case(2)] SPLCLIENT_INFO_2* pNotUsed; [case(3)] SPLCLIENT_INFO_3* pClientInfo3; } ClientInfo; } SPLCLIENT_CONTAINER; typedef struct _STRING_CONTAINER { DWORD cbBuf; [size_is(cbBuf/2), unique] WCHAR* pszString; } STRING_CONTAINER; typedef struct _SYSTEMTIME_CONTAINER { DWORD cbBuf; SYSTEMTIME* pSystemTime; } SYSTEMTIME_CONTAINER; typedef struct _RPC_V2_NOTIFY_OPTIONS_TYPE { unsigned short Type; unsigned short Reserved0; DWORD Reserved1; DWORD Reserved2; DWORD Count; [size_is(Count), unique] unsigned short* pFields; } RPC_V2_NOTIFY_OPTIONS_TYPE; typedef struct _RPC_V2_NOTIFY_OPTIONS { DWORD Version; DWORD Reserved; DWORD Count; [size_is(Count), unique] RPC_V2_NOTIFY_OPTIONS_TYPE* pTypes; } RPC_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; typedef struct _RPC_V2_NOTIFY_INFO_DATA { unsigned short Type; unsigned short Field; DWORD Reserved; DWORD Id; [switch_is(Reserved & 0xffff)] RPC_V2_NOTIFY_INFO_DATA_DATA Data; } RPC_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; typedef [switch_type(DWORD)] union _RPC_V2_UREPLY_PRINTER { [case (0)] RPC_V2_NOTIFY_INFO* pInfo; } RPC_V2_UREPLY_PRINTER; typedef struct { DWORD Status; [string] wchar_t* pDocumentName; [string] wchar_t* pUserName; [string] wchar_t* pMachineName; [string] wchar_t* pPrinterName; [string] wchar_t* pPortName; LONGLONG Size; DWORD TotalPages; } RPC_BranchOfficeJobDataPrinted; typedef struct { LONGLONG Size; DWORD ICMMethod; short Color; short PrintQuality; short YResolution; short Copies; short TTOption; } RPC_BranchOfficeJobDataRendered; typedef struct { DWORD LastError; [string] wchar_t* pDocumentName; [string] wchar_t* pUserName; [string] wchar_t* pPrinterName; [string] wchar_t* pDataType; LONGLONG TotalSize; LONGLONG PrintedSize; DWORD TotalPages; DWORD PrintedPages; [string] wchar_t* pMachineName; [string] wchar_t* pJobError; [string] wchar_t* pErrorDescription; } RPC_BranchOfficeJobDataError; typedef struct { [string] wchar_t* pDocumentName; [string] wchar_t* pPrinterName; [string] wchar_t* pExtraErrorInfo; } RPC_BranchOfficeJobDataPipelineFailed; typedef struct { [string] wchar_t* pMachineName; } RPC_BranchOfficeLogOfflineFileFull; typedef struct { EBranchOfficeJobEventType eEventType; DWORD JobId; [switch_type(EBranchOfficeJobEventType), switch_is(eEventType)] union { [case(kLogJobPrinted)] RPC_BranchOfficeJobDataPrinted LogJobPrinted; [case(kLogJobRendered)] RPC_BranchOfficeJobDataRendered LogJobRendered; [case(kLogJobError)] RPC_BranchOfficeJobDataError LogJobError; [case(kLogJobPipelineError)] RPC_BranchOfficeJobDataPipelineFailed LogPipelineFailed; [case(kLogOfflineFileFull)] RPC_BranchOfficeLogOfflineFileFull LogOfflineFileFull; } JobInfo; } RPC_BranchOfficeJobData; typedef struct { DWORD cJobDataEntries; [size_is(cJobDataEntries), unique] RPC_BranchOfficeJobData JobData[]; } RPC_BranchOfficeJobDataContainer; // [MS-PAR] enumerations typedef enum { kPropertyTypeString = 1, kPropertyTypeInt32, kPropertyTypeInt64, kPropertyTypeByte, kPropertyTypeTime, kPropertyTypeDevMode, kPropertyTypeSD, kPropertyTypeNotificationReply, kPropertyTypeNotificationOptions, } EPrintPropertyType; // [MS-PAR] data types typedef [context_handle] void *RMTNTFY_HANDLE; // [MS-PAR] structures typedef struct _NOTIFY_REPLY_CONTAINER { RPC_V2_NOTIFY_INFO* pInfo; } NOTIFY_REPLY_CONTAINER; typedef struct _NOTIFY_OPTIONS_CONTAINER { RPC_V2_NOTIFY_OPTIONS* pOptions; } NOTIFY_OPTIONS_CONTAINER; typedef struct { EPrintPropertyType ePropertyType; [switch_type(EPrintPropertyType), switch_is(ePropertyType)] union { [case(kPropertyTypeString)] [string] wchar_t* propertyString; [case(kPropertyTypeInt32)] long propertyInt32; [case(kPropertyTypeInt64)] __int64 propertyInt64; [case(kPropertyTypeByte)] BYTE propertyByte; [case(kPropertyTypeTime)] SYSTEMTIME_CONTAINER propertyTimeContainer; [case(kPropertyTypeDevMode)] DEVMODE_CONTAINER propertyDevModeContainer; [case(kPropertyTypeSD)] SECURITY_CONTAINER propertySDContainer; [case(kPropertyTypeNotificationReply)] NOTIFY_REPLY_CONTAINER propertyReplyContainer; [case(kPropertyTypeNotificationOptions)] NOTIFY_OPTIONS_CONTAINER propertyOptionsContainer; } value; } RpcPrintPropertyValue; typedef struct { [string] wchar_t* propertyName; RpcPrintPropertyValue propertyValue; } RpcPrintNamedProperty; typedef struct { [range(0, 50)] unsigned long numberOfProperties; [size_is(numberOfProperties),unique] RpcPrintNamedProperty* propertiesCollection; }RpcPrintPropertiesCollection; typedef struct _CORE_PRINTER_DRIVER { GUID CoreDriverGUID; FILETIME ftDriverDate; DWORDLONG dwlDriverVersion; wchar_t szPackageID[260]; } CORE_PRINTER_DRIVER; typedef struct { RPC_EPrintPropertyType ePropertyType; [switch_is(ePropertyType)] union { [case(kRpcPropertyTypeString)] [string] wchar_t *propertyString; [case(kRpcPropertyTypeInt32)] LONG propertyInt32; [case(kRpcPropertyTypeInt64)] LONGLONG propertyInt64; [case(kRpcPropertyTypeByte)] BYTE propertyByte; [case(kRpcPropertyTypeBuffer)] struct { DWORD cbBuf; [size_is(cbBuf)] BYTE *pBuf; } propertyBlob; } value; } RPC_PrintPropertyValue; typedef struct { [string] wchar_t *propertyName; RPC_PrintPropertyValue propertyValue; } RPC_PrintNamedProperty; // [MS-PAR] methods DWORD RpcAsyncOpenPrinter( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pPrinterName, [out] PRINTER_HANDLE*pHandle, [in, string, unique] wchar_t* pDatatype, [in] DEVMODE_CONTAINER* pDevModeContainer, [in] DWORD AccessRequired, [in] SPLCLIENT_CONTAINER* pClientInfo ); DWORD RpcAsyncAddPrinter( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in] PRINTER_CONTAINER* pPrinterContainer, [in] DEVMODE_CONTAINER* pDevModeContainer, [in] SECURITY_CONTAINER* pSecurityContainer, [in] SPLCLIENT_CONTAINER* pClientInfo, [out] PRINTER_HANDLE*pHandle ); DWORD RpcAsyncSetJob( [in] PRINTER_HANDLE hPrinter, [in] DWORD JobId, [in, unique] JOB_CONTAINER* pJobContainer, [in] DWORD Command ); DWORD RpcAsyncGetJob( [in] PRINTER_HANDLE hPrinter, [in] DWORD JobId, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pJob, [in] DWORD cbBuf, [out] DWORD* pcbNeeded ); DWORD RpcAsyncEnumJobs( [in] PRINTER_HANDLE hPrinter, [in] DWORD FirstJob, [in] DWORD NoJobs, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pJob, [in] DWORD cbBuf, [out] DWORD* pcbNeeded, [out] DWORD* pcReturned ); DWORD RpcAsyncAddJob( [in] PRINTER_HANDLE hPrinter, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pAddJob, [in] DWORD cbBuf, [out] DWORD* pcbNeeded ); DWORD RpcAsyncScheduleJob( [in] PRINTER_HANDLE hPrinter, [in] DWORD JobId ); DWORD RpcAsyncDeletePrinter( [in] PRINTER_HANDLE hPrinter ); DWORD RpcAsyncSetPrinter( [in] PRINTER_HANDLE hPrinter, [in] PRINTER_CONTAINER* pPrinterContainer, [in] DEVMODE_CONTAINER* pDevModeContainer, [in] SECURITY_CONTAINER* pSecurityContainer, [in] DWORD Command ); DWORD RpcAsyncGetPrinter( [in] PRINTER_HANDLE hPrinter, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pPrinter, [in] DWORD cbBuf, [out] DWORD* pcbNeeded ); DWORD RpcAsyncStartDocPrinter( [in] PRINTER_HANDLE hPrinter, [in] DOC_INFO_CONTAINER* pDocInfoContainer, [out] DWORD* pJobId ); DWORD RpcAsyncStartPagePrinter( [in] PRINTER_HANDLE hPrinter ); DWORD RpcAsyncWritePrinter( [in] PRINTER_HANDLE hPrinter, [in, size_is(cbBuf)] unsigned char* pBuf, [in] DWORD cbBuf, [out] DWORD* pcWritten ); DWORD RpcAsyncEndPagePrinter( [in] PRINTER_HANDLE hPrinter ); DWORD RpcAsyncEndDocPrinter( [in] PRINTER_HANDLE hPrinter ); DWORD RpcAsyncAbortPrinter( [in] PRINTER_HANDLE hPrinter ); DWORD RpcAsyncGetPrinterData( [in] PRINTER_HANDLE hPrinter, [in, string] wchar_t* pValueName, [out] DWORD* pType, [out, size_is(nSize)] unsigned char* pData, [in] DWORD nSize, [out] DWORD* pcbNeeded ); DWORD RpcAsyncGetPrinterDataEx( [in] PRINTER_HANDLE hPrinter, [in, string] const wchar_t* pKeyName, [in, string] const wchar_t* pValueName, [out] DWORD* pType, [out, size_is(nSize)] unsigned char* pData, [in] DWORD nSize, [out] DWORD* pcbNeeded ); DWORD RpcAsyncSetPrinterData( [in] PRINTER_HANDLE hPrinter, [in, string] wchar_t* pValueName, [in] DWORD Type, [in, size_is(cbData)] unsigned char* pData, [in] DWORD cbData ); DWORD RpcAsyncSetPrinterDataEx( [in] PRINTER_HANDLE hPrinter, [in, string] const wchar_t* pKeyName, [in, string] const wchar_t* pValueName, [in] DWORD Type, [in, size_is(cbData)] unsigned char* pData, [in] DWORD cbData ); DWORD RpcAsyncClosePrinter( [in, out] PRINTER_HANDLE* phPrinter ); DWORD RpcAsyncAddForm( [in] PRINTER_HANDLE hPrinter, [in] FORM_CONTAINER* pFormInfoContainer ); DWORD RpcAsyncDeleteForm( [in] PRINTER_HANDLE hPrinter, [in, string] wchar_t* pFormName ); DWORD RpcAsyncGetForm( [in] PRINTER_HANDLE hPrinter, [in, string] wchar_t* pFormName, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pForm, [in] DWORD cbBuf, [out] DWORD* pcbNeeded ); DWORD RpcAsyncSetForm( [in] PRINTER_HANDLE hPrinter, [in, string] wchar_t* pFormName, [in] FORM_CONTAINER* pFormInfoContainer ); DWORD RpcAsyncEnumForms( [in] PRINTER_HANDLE hPrinter, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pForm, [in] DWORD cbBuf, [out] DWORD* pcbNeeded, [out] DWORD* pcReturned ); DWORD RpcAsyncGetPrinterDriver( [in] PRINTER_HANDLE hPrinter, [in, unique, string] wchar_t* pEnvironment, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pDriver, [in] DWORD cbBuf, [out] DWORD* pcbNeeded, [in] DWORD dwClientMajorVersion, [in] DWORD dwClientMinorVersion, [out] DWORD* pdwServerMaxVersion, [out] DWORD* pdwServerMinVersion ); DWORD RpcAsyncEnumPrinterData( [in] PRINTER_HANDLE hPrinter, [in] DWORD dwIndex, [out, size_is(cbValueName/sizeof(wchar_t))] wchar_t* pValueName, [in] DWORD cbValueName, [out] DWORD* pcbValueName, [out] DWORD* pType, [out, size_is(cbData)] unsigned char* pData, [in] DWORD cbData, [out] DWORD* pcbData ); DWORD RpcAsyncEnumPrinterDataEx( [in] PRINTER_HANDLE hPrinter, [in, string] const wchar_t* pKeyName, [out, size_is(cbEnumValues)] unsigned char* pEnumValues, [in] DWORD cbEnumValues, [out] DWORD* pcbEnumValues, [out] DWORD* pnEnumValues ); DWORD RpcAsyncEnumPrinterKey( [in] PRINTER_HANDLE hPrinter, [in, string] const wchar_t* pKeyName, [out, size_is(cbSubkey/sizeof(wchar_t))] wchar_t* pSubkey, [in] DWORD cbSubkey, [out] DWORD* pcbSubkey ); DWORD RpcAsyncDeletePrinterData( [in] PRINTER_HANDLE hPrinter, [in, string] wchar_t* pValueName ); DWORD RpcAsyncDeletePrinterDataEx( [in] PRINTER_HANDLE hPrinter, [in, string] const wchar_t* pKeyName, [in, string] const wchar_t* pValueName ); DWORD RpcAsyncDeletePrinterKey( [in] PRINTER_HANDLE hPrinter, [in, string] const wchar_t* pKeyName ); DWORD RpcAsyncXcvData( [in] PRINTER_HANDLE hXcv, [in, string] const wchar_t* pszDataName, [in, size_is(cbInputData)] unsigned char* pInputData, [in] DWORD cbInputData, [out, size_is(cbOutputData)] unsigned char* pOutputData, [in] DWORD cbOutputData, [out] DWORD* pcbOutputNeeded, [in, out] DWORD* pdwStatus ); DWORD RpcAsyncSendRecvBidiData ( [in] PRINTER_HANDLE hPrinter, [in,string,unique] const wchar_t* pAction, [in] RPC_BIDI_REQUEST_CONTAINER* pReqData, [out] RPC_BIDI_RESPONSE_CONTAINER** ppRespData); DWORD RpcAsyncCreatePrinterIC( [in] PRINTER_HANDLE hPrinter, [out] GDI_HANDLE *pHandle, [in] DEVMODE_CONTAINER* pDevModeContainer ); DWORD RpcAsyncPlayGdiScriptOnPrinterIC( [in] GDI_HANDLE hPrinterIC, [in, size_is(cIn)] unsigned char* pIn, [in] DWORD cIn, [out, size_is(cOut)] unsigned char* pOut, [in] DWORD cOut, [in] DWORD ul ); DWORD RpcAsyncDeletePrinterIC( [in, out] GDI_HANDLE* phPrinterIC ); DWORD RpcAsyncEnumPrinters( [in] handle_t hRemoteBinding, [in] DWORD Flags, [in, string, unique] wchar_t* Name, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pPrinterEnum, [in] DWORD cbBuf, [out] DWORD* pcbNeeded, [out] DWORD* pcReturned ); DWORD RpcAsyncAddPrinterDriver( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in] DRIVER_CONTAINER* pDriverContainer, [in] DWORD dwFileCopyFlags ); DWORD RpcAsyncEnumPrinterDrivers( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in, unique, string] wchar_t* pEnvironment, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pDrivers, [in] DWORD cbBuf, [out] DWORD* pcbNeeded, [out] DWORD* pcReturned ); DWORD RpcAsyncGetPrinterDriverDirectory( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in, unique, string] wchar_t* pEnvironment, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pDriverDirectory, [in] DWORD cbBuf, [out] DWORD* pcbNeeded ); DWORD RpcAsyncDeletePrinterDriver( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in, string] wchar_t* pEnvironment, [in, string] wchar_t* pDriverName ); DWORD RpcAsyncDeletePrinterDriverEx( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in, string] wchar_t* pEnvironment, [in, string] wchar_t* pDriverName, [in] DWORD dwDeleteFlag, [in] DWORD dwVersionNum ); DWORD RpcAsyncAddPrintProcessor( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in, string] wchar_t* pEnvironment, [in, string] wchar_t* pPathName, [in, string] wchar_t* pPrintProcessorName ); DWORD RpcAsyncEnumPrintProcessors( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in, unique, string] wchar_t* pEnvironment, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pPrintProcessorInfo, [in] DWORD cbBuf, [out] DWORD* pcbNeeded, [out] DWORD* pcReturned ); DWORD RpcAsyncGetPrintProcessorDirectory( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in, unique, string] wchar_t* pEnvironment, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pPrintProcessorDirectory, [in] DWORD cbBuf, [out] DWORD* pcbNeeded ); DWORD RpcAsyncEnumPorts( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pPort, [in] DWORD cbBuf, [out] DWORD* pcbNeeded, [out] DWORD* pcReturned ); DWORD RpcAsyncEnumMonitors( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pMonitor, [in] DWORD cbBuf, [out] DWORD* pcbNeeded, [out] DWORD* pcReturned ); DWORD RpcAsyncAddPort( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in] PORT_CONTAINER* pPortContainer, [in] PORT_VAR_CONTAINER* pPortVarContainer, [in, string] wchar_t* pMonitorName ); DWORD RpcAsyncSetPort( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in, string, unique] wchar_t* pPortName, [in] PORT_CONTAINER* pPortContainer ); DWORD RpcAsyncAddMonitor( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* Name, [in] MONITOR_CONTAINER* pMonitorContainer ); DWORD RpcAsyncDeleteMonitor( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* Name, [in, unique, string] wchar_t* pEnvironment, [in, string] wchar_t*pMonitorName ); DWORD RpcAsyncDeletePrintProcessor( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* Name, [in, unique, string] wchar_t* pEnvironment, [in, string] wchar_t*pPrintProcessorName ); DWORD RpcAsyncEnumPrintProcessorDatatypes( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pName, [in, unique, string] wchar_t* pPrintProcessorName, [in] DWORD Level, [in, out, unique, size_is(cbBuf)] unsigned char* pDatatypes, [in] DWORD cbBuf, [out] DWORD* pcbNeeded, [out] DWORD* pcReturned ); DWORD RpcAsyncAddPerMachineConnection( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pServer, [in, string] const wchar_t* pPrinterName, [in, string] const wchar_t* pPrintServer, [in, string] const wchar_t* pProvider ); DWORD RpcAsyncDeletePerMachineConnection( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pServer, [in, string] const wchar_t* pPrinterName ); DWORD RpcAsyncEnumPerMachineConnections( [in] handle_t hRemoteBinding, [in, string, unique] wchar_t* pServer, [in, out, unique, size_is(cbBuf)] unsigned char* pPrinterEnum, [in] DWORD cbBuf, [out] DWORD* pcbNeeded, [out] DWORD* pcReturned ); HRESULT RpcSyncRegisterForRemoteNotifications( [in] PRINTER_HANDLE hPrinter, [in] RpcPrintPropertiesCollection* pNotifyFilter, [out] RMTNTFY_HANDLE* phRpcHandle ); HRESULT RpcSyncUnRegisterForRemoteNotifications( [in, out] RMTNTFY_HANDLE* phRpcHandle ); HRESULT RpcSyncRefreshRemoteNotifications( [in] RMTNTFY_HANDLE hRpcHandle, [in] RpcPrintPropertiesCollection* pNotifyFilter, [out] RpcPrintPropertiesCollection** ppNotifyData ); HRESULT RpcAsyncGetRemoteNotifications( [in] RMTNTFY_HANDLE hRpcHandle, [out] RpcPrintPropertiesCollection** ppNotifyData ); HRESULT RpcAsyncInstallPrinterDriverFromPackage( [in] handle_t hRemoteBinding, [in, string, unique] const wchar_t* pszServer, [in, string, unique] const wchar_t* pszInfPath, [in, string] const wchar_t* pszDriverName, [in, string] const wchar_t* pszEnvironment, [in] DWORD dwFlags ); HRESULT RpcAsyncUploadPrinterDriverPackage( [in] handle_t hRemoteBinding, [in, string, unique] const wchar_t* pszServer, [in, string] const wchar_t* pszInfPath, [in, string] const wchar_t* pszEnvironment, [in] DWORD dwFlags, [in, out, unique, size_is(*pcchDestInfPath)] wchar_t* pszDestInfPath, [in, out] DWORD* pcchDestInfPath ); HRESULT RpcAsyncGetCorePrinterDrivers( [in] handle_t hRemoteBinding, [in, string, unique] const wchar_t* pszServer, [in, string] const wchar_t* pszEnvironment, [in] DWORD cchCoreDrivers, [in, size_is(cchCoreDrivers)] const wchar_t* pszzCoreDriverDependencies, [in] DWORD cCorePrinterDrivers, [out, size_is(cCorePrinterDrivers)] CORE_PRINTER_DRIVER* pCorePrinterDrivers ); HRESULT RpcAsyncCorePrinterDriverInstalled( [in] handle_t hRemoteBinding, [in, string, unique] const wchar_t* pszServer, [in, string] const wchar_t* pszEnvironment, [in] GUID CoreDriverGUID, [in] FILETIME ftDriverDate, [in] DWORDLONG dwlDriverVersion, [out] int*pbDriverInstalled ); HRESULT RpcAsyncGetPrinterDriverPackagePath( [in] handle_t hRemoteBinding, [in, string, unique] const wchar_t* pszServer, [in, string] const wchar_t* pszEnvironment, [in, string, unique] const wchar_t* pszLanguage, [in, string] const wchar_t* pszPackageID, [in, out, unique, size_is(cchDriverPackageCab)] wchar_t* pszDriverPackageCab, [in] DWORD cchDriverPackageCab, [out] DWORD* pcchRequiredSize ); HRESULT RpcAsyncDeletePrinterDriverPackage( [in] handle_t hRemoteBinding, [in, string, unique] const wchar_t* pszServer, [in, string] const wchar_t* pszInfPath, [in, string] const wchar_t* pszEnvironment ); DWORD RpcAsyncReadPrinter( [in] PRINTER_HANDLE hPrinter, [out, size_is(cbBuf)] unsigned char* pBuf, [in] DWORD cbBuf, [out] DWORD* pcNoBytesRead ); DWORD RpcAsyncResetPrinter( [in] PRINTER_HANDLE hPrinter, [in, string, unique] wchar_t* pDatatype, [in] DEVMODE_CONTAINER* pDevModeContainer ); DWORD RpcAsyncGetJobNamedPropertyValue( [in] PRINTER_HANDLE hPrinter, [in] DWORD JobId, [in, string] const wchar_t *pszName, [out] RPC_PrintPropertyValue *pValue ); DWORD RpcAsyncSetJobNamedProperty( [in] PRINTER_HANDLE hPrinter, [in] DWORD JobId, [in] RPC_PrintNamedProperty *pProperty ); DWORD RpcAsyncDeleteJobNamedProperty( [in] PRINTER_HANDLE hPrinter, [in] DWORD JobId, [in, string] const wchar_t *pszName ); DWORD RpcAsyncEnumJobNamedProperties( [in] PRINTER_HANDLE hPrinter, [in] DWORD JobId, [out] DWORD *pcProperties, [out, size_is(,*pcProperties)] RPC_PrintNamedProperty **ppProperties ); DWORD RpcAsyncLogJobInfoForBranchOffice( [in] PRINTER_HANDLE hPrinter, [in, ref] RPC_BranchOfficeJobDataContainer *pBranchOfficeJobDataContainer ); }