#include "idl_types.h"

/*
 * IRemoteWinspool interface definitions
 *
 * This IDL defines the "Print System Asynchronous Remote Protocol" MS-PAR
 * interface.
 *
 * Currently only eight functions in this interface have no matching functions
 * in the "spoolss" interface. All other functions have a 1-to-1 match but
 * different opcodes than the spoolss interface.
 *
 * Every request on this interface requires a object uuid of
 * "9940CA8E-512F-4C58-88A9-61098D6896BD" to be sent along with the DCE/RPC
 * header.
 *
 * On Windows, this interface uses [ncacn_ip_tcp] transport and requires
 * DCERPC_AUTH_TYPE_SPNEGO and at least DCERPC_AUTH_LEVEL_PACKET authentication.
 *
 *
 */

import "misc.idl", "security.idl", "winreg.idl", "spoolss.idl";

[
	uuid("76f03f96-cdfd-44fc-a22c-64950A001209"),
	version(1.0),
	endpoint("ncacn_ip_tcp:"),
	pointer_default(unique),
	helpstring("IRemoteWinspool SubSystem")
]
	interface iremotewinspool
{
#if 0
	/*
	 * pidl does not yet have a real [context_handle] implementation, so we
	 * just use some defines here.
	 */

	typedef [context_handle] void *GDI_HANDLE;
	typedef [context_handle] void *PRINTER_HANDLE;
	typedef [context_handle] void *RMTNTFY_HANDLE;
#else
#define GDI_HANDLE policy_handle
#define PRINTER_HANDLE policy_handle
#define RMTNTFY_HANDLE policy_handle
#endif

	const string IREMOTEWINSPOOL_OBJECT_GUID = "9940CA8E-512F-4C58-88A9-61098D6896BD";

	/******************/
	/* Function: 0x00 */

	typedef struct {
		spoolss_NotifyInfo *pInfo;
	} winspool_NOTIFY_REPLY_CONTAINER;

	typedef struct {
		spoolss_NotifyOption *pOptions;
	} winspool_NOTIFY_OPTIONS_CONTAINER;

	[public] WERROR winspool_AsyncOpenPrinter(
		[in,unique] [string,charset(UTF16)] uint16 *pPrinterName,
		[out] PRINTER_HANDLE *pHandle,
		[in,unique] [string,charset(UTF16)] uint16 *pDatatype,
		[in] spoolss_DevmodeContainer *pDevModeContainer,
		[in] uint32 AccessRequired,
		[in] spoolss_UserLevelCtr *pClientInfo
	);

	/******************/
	/* Function: 0x01 */

	WERROR winspool_AsyncAddPrinter(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in] spoolss_SetPrinterInfoCtr *pPrinterContainer,
		[in] spoolss_DevmodeContainer *pDevModeContainer,
		[in] sec_desc_buf *pSecurityContainer,
		[in] spoolss_UserLevelCtr *pClientInfo,
		[out] PRINTER_HANDLE *pHandle
	);

	/******************/
	/* Function: 0x02 */

	WERROR winspool_AsyncSetJob(
		[in] PRINTER_HANDLE hPrinter,
		[in] uint32 JobId,
		[in, unique] spoolss_JobInfoContainer *pJobContainer,
		[in] uint32 Command
	);

	/******************/
	/* Function: 0x03 */

	WERROR winspool_AsyncGetJob(
		[in] PRINTER_HANDLE hPrinter,
		[in] uint32 JobId,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pJob,
		[in] uint32 cbBuf,
		[out] uint32 *pcbNeeded
	);

	/******************/
	/* Function: 0x04 */

	WERROR winspool_AsyncEnumJobs(
		[in] PRINTER_HANDLE hPrinter,
		[in] uint32 FirstJob,
		[in] uint32 NoJobs,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pJob,
		[in] uint32 cbBuf,
		[out] uint32 *pcbNeeded,
		[out] uint32 *pcReturned
	);

	/******************/
	/* Function: 0x05 */

	WERROR winspool_AsyncAddJob(
		[in] PRINTER_HANDLE hPrinter,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pAddJob,
		[in] uint32 cbBuf,
		[out] uint32 *pcbNeeded
	);

	/******************/
	/* Function: 0x06 */

	WERROR winspool_AsyncScheduleJob(
		[in] PRINTER_HANDLE hPrinter,
		[in] uint32 JobId
	);

	/******************/
	/* Function: 0x07 */

	WERROR winspool_AsyncDeletePrinter(
		[in] PRINTER_HANDLE hPrinter
	);

	/******************/
	/* Function: 0x08 */

	[public] WERROR winspool_AsyncSetPrinter(
		[in] PRINTER_HANDLE hPrinter,
		[in] spoolss_SetPrinterInfoCtr *pPrinterContainer,
		[in] spoolss_DevmodeContainer *pDevModeContainer,
		[in] sec_desc_buf *pSecurityContainer,
		[in] uint32 Command
	);

	/******************/
	/* Function: 0x09 */

	[public] WERROR winspool_AsyncGetPrinter(
		[in] PRINTER_HANDLE hPrinter,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pPrinter,
		[in] uint32 cbBuf,
		[out] uint32 *pcbNeeded
	);

	/******************/
	/* Function: 0x0a */

	WERROR winspool_AsyncStartDocPrinter(
		[in] PRINTER_HANDLE hPrinter,
		[in] spoolss_DocumentInfoCtr *pDocInfoContainer,
		[out] uint32 *pJobId
	);

	/******************/
	/* Function: 0x0b */

	WERROR winspool_AsyncStartPagePrinter(
		[in] PRINTER_HANDLE hPrinter
	);

	/******************/
	/* Function: 0x0c */

	WERROR winspool_AsyncWritePrinter(
		[in] PRINTER_HANDLE hPrinter,
		[in, size_is(cbBuf)] uint8 *pBuf,
		[in] uint32 cbBuf,
		[out] uint32 *pcWritten
	);

	/******************/
	/* Function: 0x0d */

	WERROR winspool_AsyncEndPagePrinter(
		[in] PRINTER_HANDLE hPrinter
	);

	/******************/
	/* Function: 0x0e */

	WERROR winspool_AsyncEndDocPrinter(
		[in] PRINTER_HANDLE hPrinter
	);

	/******************/
	/* Function: 0x0f */

	WERROR winspool_AsyncAbortPrinter(
		[in] PRINTER_HANDLE hPrinter
	);

	/******************/
	/* Function: 0x10 */

	[public] WERROR winspool_AsyncGetPrinterData(
		[in] PRINTER_HANDLE hPrinter,
		[in] [string,charset(UTF16)] uint16 *pValueName,
		[out] uint32 *pType,
		[out, size_is(nSize)] uint8 *pData,
		[in] uint32 nSize,
		[out] uint32 *pcbNeeded
	);

	/******************/
	/* Function: 0x11 */

	WERROR winspool_AsyncGetPrinterDataEx(
		[in] PRINTER_HANDLE hPrinter,
		[in] [string,charset(UTF16)] uint16 *pKeyName,
		[in] [string,charset(UTF16)] uint16 *pValueName,
		[out] uint32 *pType,
		[out, size_is(nSize)] uint8 *pData,
		[in] uint32 nSize,
		[out] uint32 *pcbNeeded
	);

	/******************/
	/* Function: 0x12 */

	WERROR winspool_AsyncSetPrinterData(
		[in] PRINTER_HANDLE hPrinter,
		[in] [string,charset(UTF16)] uint16 *pValueName,
		[in] uint32 Type,
		[in, size_is(cbData)] uint8 *pData,
		[in] uint32 cbData
	);

	/******************/
	/* Function: 0x13 */

	WERROR winspool_AsyncSetPrinterDataEx(
		[in] PRINTER_HANDLE hPrinter,
		[in] [string,charset(UTF16)] uint16 *pKeyName,
		[in] [string,charset(UTF16)] uint16 *pValueName,
		[in] uint32 Type,
		[in, size_is(cbData)] uint8 *pData,
		[in] uint32 cbData
	);

	/******************/
	/* Function: 0x14 */

	[public] WERROR winspool_AsyncClosePrinter(
		[in, out] PRINTER_HANDLE *phPrinter
	);

	/******************/
	/* Function: 0x15 */

	WERROR winspool_AsyncAddForm(
		[in] PRINTER_HANDLE hPrinter,
		[in] spoolss_AddFormInfoCtr *pFormInfoContainer
	);

	/******************/
	/* Function: 0x16 */

	WERROR winspool_AsyncDeleteForm(
		[in] PRINTER_HANDLE hPrinter,
		[in] [string,charset(UTF16)] uint16 *pFormName
	);

	/******************/
	/* Function: 0x17 */

	WERROR winspool_AsyncGetForm(
		[in] PRINTER_HANDLE hPrinter,
		[in] [string,charset(UTF16)] uint16 *pFormName,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pForm,
		[in] uint32 cbBuf,
		[out] uint32 *pcbNeeded
	);

	/******************/
	/* Function: 0x18 */

	WERROR winspool_AsyncSetForm(
		[in] PRINTER_HANDLE hPrinter,
		[in] [string,charset(UTF16)] uint16 *pFormName,
		[in] spoolss_AddFormInfoCtr *pFormInfoContainer
	);

	/******************/
	/* Function: 0x19 */

	[public] WERROR winspool_AsyncEnumForms(
		[in] PRINTER_HANDLE hPrinter,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pForm,
		[in]  uint32 cbBuf,
		[out] uint32 *pcbNeeded,
		[out] uint32 *pcReturned
	);

	/******************/
	/* Function: 0x1a */

	[public] WERROR winspool_AsyncGetPrinterDriver(
		[in] PRINTER_HANDLE hPrinter,
		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pDriver,
		[in] uint32 cbBuf,
		[out] uint32 *pcbNeeded,
		[in] uint32 dwClientMajorVersion,
		[in] uint32 dwClientMinorVersion,
		[out] uint32 *pdwServerMaxVersion,
		[out] uint32 *pdwServerMinVersion
	);

	/******************/
	/* Function: 0x1b */

	WERROR winspool_AsyncEnumPrinterData(
		[in] PRINTER_HANDLE hPrinter,
		[in] uint32 dwIndex,
		[out, size_is(cbValueName/2)] uint16 *pValueName,
		[in]  uint32 cbValueName,
		[out] uint32 *pcbValueName,
		[out] uint32 *pType,
		[out, size_is(cbData)] uint8 *pData,
		[in]  uint32 cbData,
		[out] uint32 *pcbData
	);

	/******************/
	/* Function: 0x1c */

	[public] WERROR winspool_AsyncEnumPrinterDataEx(
		[in]  PRINTER_HANDLE hPrinter,
		[in] [string,charset(UTF16)] uint16 *pKeyName,
		[out, size_is(cbEnumValues)] uint8 *pEnumValues,
		[in]  uint32 cbEnumValues,
		[out] uint32 *pcbEnumValues,
		[out] uint32 *pnEnumValues
	);

	/******************/
	/* Function: 0x1d */

	[public] WERROR winspool_AsyncEnumPrinterKey(
		[in] PRINTER_HANDLE hPrinter,
		[in] [string,charset(UTF16)] uint16 *pKeyName,
		[out, size_is(cbSubkey/2)] uint16 *pSubkey,
		[in]  uint32 cbSubkey,
		[out] uint32 *pcbSubkey
	);

	/******************/
	/* Function: 0x1e */

	WERROR winspool_AsyncDeletePrinterData(
		[in] PRINTER_HANDLE hPrinter,
		[in] [string,charset(UTF16)] uint16 *pValueName
	);

	/******************/
	/* Function: 0x1f */

	WERROR winspool_AsyncDeletePrinterDataEx(
		[in] PRINTER_HANDLE hPrinter,
		[in] [string,charset(UTF16)] uint16 *pKeyName,
		[in] [string,charset(UTF16)] uint16 *pValueName
	);

	/******************/
	/* Function: 0x20 */

	WERROR winspool_AsyncDeletePrinterKey(
		[in] PRINTER_HANDLE hPrinter,
		[in] [string,charset(UTF16)] uint16 *pKeyName
	);

	/******************/
	/* Function: 0x21 */

	WERROR winspool_AsyncXcvData(
		[in] PRINTER_HANDLE hXcv,
		[in] [string,charset(UTF16)] uint16 *pszDataName,
		[in, size_is(cbInputData)] uint8 *pInputData,
		[in] uint32 cbInputData,
		[out, size_is(cbOutputData)] uint8 *pOutputData,
		[in] uint32 cbOutputData,
		[out] uint32 *pcbOutputNeeded,
		[in, out] uint32 *pdwStatus
	);

	/******************/
	/* Function: 0x22 */

	WERROR winspool_AsyncSendRecvBidiData (
		[in] PRINTER_HANDLE hPrinter,
		[in,unique] [string,charset(UTF16)] uint16 *pAction,
		[in] RPC_BIDI_REQUEST_CONTAINER* pReqData,
		[out] RPC_BIDI_RESPONSE_CONTAINER** ppRespData
	);

	/******************/
	/* Function: 0x23 */

	WERROR winspool_AsyncCreatePrinterIC(
		[in] PRINTER_HANDLE hPrinter,
		[out] GDI_HANDLE *pHandle,
		[in] spoolss_DevmodeContainer *pDevModeContainer
	);

	/******************/
	/* Function: 0x24 */

	WERROR winspool_AsyncPlayGdiScriptOnPrinterIC(
		[in] GDI_HANDLE hPrinterIC,
		[in, size_is(cIn)] uint8 *pIn,
		[in] uint32 cIn,
		[out, size_is(cOut)] uint8 *pOut,
		[in] uint32 cOut,
		[in] uint32 ul
	);

	/******************/
	/* Function: 0x25 */

	WERROR winspool_AsyncDeletePrinterIC(
		[in, out] GDI_HANDLE *phPrinterIC
	);

	/******************/
	/* Function: 0x26 */

	WERROR winspool_AsyncEnumPrinters(
		[in] uint32 Flags,
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pPrinterEnum,
		[in]  uint32 cbBuf,
		[out] uint32 *pcbNeeded,
		[out] uint32 *pcReturned
	);

	/******************/
	/* Function: 0x27 */

	[public] WERROR winspool_AsyncAddPrinterDriver(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in] spoolss_AddDriverInfoCtr *pDriverContainer,
		[in] uint32 dwFileCopyFlags
	);

	/******************/
	/* Function: 0x28 */

	WERROR winspool_AsyncEnumPrinterDrivers(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pDrivers,
		[in] uint32 cbBuf,
		[out] uint32 *pcbNeeded,
		[out] uint32 *pcReturned
	);

	/******************/
	/* Function: 0x29 */

	[public] WERROR winspool_AsyncGetPrinterDriverDirectory(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pDriverDirectory,
		[in] uint32 cbBuf,
		[out] uint32 *pcbNeeded
	);

	/******************/
	/* Function: 0x2a */

	WERROR winspool_AsyncDeletePrinterDriver(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in] [string,charset(UTF16)] uint16 *pEnvironment,
		[in] [string,charset(UTF16)] uint16 *pDriverName
	);

	/******************/
	/* Function: 0x2b */

	WERROR winspool_AsyncDeletePrinterDriverEx(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in] [string,charset(UTF16)] uint16 *pEnvironment,
		[in] [string,charset(UTF16)] uint16 *pDriverName,
		[in] uint32 dwDeleteFlag,
		[in] uint32 dwVersionNum
	);

	/******************/
	/* Function: 0x2c */

	WERROR winspool_AsyncAddPrintProcessor(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in] [string,charset(UTF16)] uint16 *pEnvironment,
		[in] [string,charset(UTF16)] uint16 *pPathName,
		[in] [string,charset(UTF16)] uint16 *pPrintProcessorName
	);

	/******************/
	/* Function: 0x2d */

	WERROR winspool_AsyncEnumPrintProcessors(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pPrintProcessorInfo,
		[in] uint32 cbBuf,
		[out] uint32 *pcbNeeded,
		[out] uint32 *pcReturned
	);

	/******************/
	/* Function: 0x2e */

	WERROR winspool_AsyncGetPrintProcessorDirectory(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pPrintProcessorDirectory,
		[in] uint32 cbBuf,
		[out] uint32 *pcbNeeded
	);

	/******************/
	/* Function: 0x2f */

	WERROR winspool_AsyncEnumPorts(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pPort,
		[in]  uint32 cbBuf,
		[out] uint32 *pcbNeeded,
		[out] uint32 *pcReturned
	);

	/******************/
	/* Function: 0x30 */

	WERROR winspool_AsyncEnumMonitors(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pMonitor,
		[in]  uint32 cbBuf,
		[out] uint32 *pcbNeeded,
		[out] uint32 *pcReturned
	);

	/******************/
	/* Function: 0x31 */

	WERROR winspool_AsyncAddPort(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in] spoolss_SetPortInfoContainer *pPortContainer,
		[in] spoolss_PortVarContainer *pPortVarContainer,
		[in] [string,charset(UTF16)] uint16 *pMonitorName
	);

	/******************/
	/* Function: 0x32 */

	WERROR winspool_AsyncSetPort(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in,unique] [string,charset(UTF16)] uint16 *pPortName,
		[in] spoolss_SetPortInfoContainer *pPortContainer
	);

	/******************/
	/* Function: 0x33 */

	WERROR winspool_AsyncAddMonitor(
		[in,unique] [string,charset(UTF16)] uint16 *Name,
		[in] spoolss_MonitorContainer *pMonitorContainer
	);

	/******************/
	/* Function: 0x34 */

	WERROR winspool_AsyncDeleteMonitor(
		[in,unique] [string,charset(UTF16)] uint16 *Name,
		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
		[in] [string,charset(UTF16)] uint16 *pMonitorName
	);

	/******************/
	/* Function: 0x35 */

	WERROR winspool_AsyncDeletePrintProcessor(
		[in,unique] [string,charset(UTF16)] uint16 *Name,
		[in,unique] [string,charset(UTF16)] uint16 *pEnvironment,
		[in] [string,charset(UTF16)] uint16 *pPrintProcessorName
	);

	/******************/
	/* Function: 0x36 */

	WERROR winspool_AsyncEnumPrintProcessorDatatypes(
		[in,unique] [string,charset(UTF16)] uint16 *pName,
		[in,unique] [string,charset(UTF16)] uint16 *pPrintProcessorName,
		[in] uint32 Level,
		[in, out, unique, size_is(cbBuf)] uint8 *pDatatypes,
		[in]  uint32 cbBuf,
		[out] uint32 *pcbNeeded,
		[out] uint32 *pcReturned
	);

	/******************/
	/* Function: 0x37 */

	WERROR winspool_AsyncAddPerMachineConnection(
		[in,unique] [string,charset(UTF16)] uint16 *pServer,
		[in] [string,charset(UTF16)] uint16 *pPrinterName,
		[in] [string,charset(UTF16)] uint16 *pPrintServer,
		[in] [string,charset(UTF16)] uint16 *pProvider
	);

	/******************/
	/* Function: 0x38 */

	WERROR winspool_AsyncDeletePerMachineConnection(
		[in,unique] [string,charset(UTF16)] uint16 *pServer,
		[in] [string,charset(UTF16)] uint16 *pPrinterName
	);

	/******************/
	/* Function: 0x39 */

	WERROR winspool_AsyncEnumPerMachineConnections(
		[in,unique] [string,charset(UTF16)] uint16 *pServer,
		[in, out, unique, size_is(cbBuf)] uint8 *pPrinterEnum,
		[in]  uint32 cbBuf,
		[out] uint32 *pcbNeeded,
		[out] uint32 *pcReturned
	);

	/******************/
	/* Function: 0x3a */

	typedef enum {
		winspool_PropertyTypeString = 1,
		winspool_PropertyTypeInt32 = 2,
		winspool_PropertyTypeInt64 = 3,
		winspool_PropertyTypeByte = 4,
		winspool_PropertyTypeTime = 5,
		winspool_PropertyTypeDevMode = 6,
		winspool_PropertyTypeSD = 7,
		winspool_PropertyTypeNotificationReply = 8,
		winspool_PropertyTypeNotificationOptions = 9
	} winspool_PrintPropertyType;

	typedef [ms_union,switch_type(winspool_PrintPropertyType)] union {
		[case(winspool_PropertyTypeString)]	[string,charset(UTF16)] uint16 *propertyString;
		[case(winspool_PropertyTypeInt32)]	uint32 propertyInt32;
		[case(winspool_PropertyTypeInt64)]	hyper propertyInt64;
		[case(winspool_PropertyTypeByte)]	uint8 propertyByte;
		[case(winspool_PropertyTypeTime)]	spoolss_TimeCtr propertyTimeContainer;
		[case(winspool_PropertyTypeDevMode)]	spoolss_DevmodeContainer propertyDevModeContainer;
		[case(winspool_PropertyTypeSD)]		sec_desc_buf propertySDContainer;
		[case(winspool_PropertyTypeNotificationReply)]	winspool_NOTIFY_REPLY_CONTAINER propertyReplyContainer;
		[case(winspool_PropertyTypeNotificationOptions)] winspool_NOTIFY_OPTIONS_CONTAINER propertyOptionsContainer;
	} winspool_PrintPropertyValueUnion;

	typedef struct {
		winspool_PrintPropertyType PropertyType;
		[switch_is(PropertyType)] winspool_PrintPropertyValueUnion value;
	} winspool_PrintPropertyValue;

	typedef struct {
		[string,charset(UTF16)] uint16 *propertyName;
		winspool_PrintPropertyValue propertyValue;
	} winspool_PrintNamedProperty;

	typedef struct {
		[range(0,50)] uint32 numberOfProperties;
		[size_is(numberOfProperties), unique] winspool_PrintNamedProperty *propertiesCollection;
	} winspool_PrintPropertiesCollection;

	[public] HRESULT winspool_SyncRegisterForRemoteNotifications(
		[in]    PRINTER_HANDLE                  hPrinter,
		[in]    winspool_PrintPropertiesCollection *pNotifyFilter,
		[out]   RMTNTFY_HANDLE                 *phRpcHandle
	);

	/******************/
	/* Function: 0x3b */

	HRESULT winspool_SyncUnRegisterForRemoteNotifications(
		[in, out]   RMTNTFY_HANDLE             *phRpcHandle
	);

	/******************/
	/* Function: 0x3c */

	HRESULT winspool_SyncRefreshRemoteNotifications(
		[in]    RMTNTFY_HANDLE                  hRpcHandle,
		[in]    winspool_PrintPropertiesCollection *pNotifyFilter,
		[out]   winspool_PrintPropertiesCollection **ppNotifyData
	);

	/******************/
	/* Function: 0x3d */

	HRESULT winspool_AsyncGetRemoteNotifications(
		[in]    RMTNTFY_HANDLE                  hRpcHandle,
		[out]   winspool_PrintPropertiesCollection **ppNotifyData
	);

	/******************/
	/* Function: 0x3e */

	typedef [bitmap32bit] bitmap {
		IPDFP_FLAG_NONE			= 0x00000000,
		IPDFP_COPY_ALL_FILES		= 0x00000001
	} winspool_InstallPrinterDriverFromPackageFlags;

	HRESULT winspool_AsyncInstallPrinterDriverFromPackage(
		[in,unique] [string,charset(UTF16)] uint16 *pszServer,
		[in,unique] [string,charset(UTF16)] uint16 *pszInfPath,
		[in] [string,charset(UTF16)] uint16 *pszDriverName,
		[in] [string,charset(UTF16)] uint16 *pszEnvironment,
		[in] winspool_InstallPrinterDriverFromPackageFlags dwFlags
	);

	/******************/
	/* Function: 0x3f */

	typedef [bitmap32bit] bitmap {
		UPDP_FLAG_NONE		= 0x00000000,
		UPDP_UPLOAD_ALWAYS	= 0x00000002,
		UPDP_CHECK_DRIVERSTORE	= 0x00000004
	} winspool_UploadPrinterDriverPackageFlags;

	HRESULT winspool_AsyncUploadPrinterDriverPackage(
		[in,unique] [string,charset(UTF16)] uint16 *pszServer,
		[in] [string,charset(UTF16)] uint16 *pszInfPath,
		[in] [string,charset(UTF16)] uint16 *pszEnvironment,
		[in] winspool_UploadPrinterDriverPackageFlags dwFlags,
		[in, out, unique, size_is(*pcchDestInfPath)] uint16 *pszDestInfPath,
		[in, out]                  uint32 *pcchDestInfPath
	);

	/******************/
	/* Function: 0x40 */

	[public] HRESULT winspool_AsyncGetCorePrinterDrivers(
		[in,unique] [string,charset(UTF16)] uint16 *pszServer,
		[in] [string,charset(UTF16)] uint16 *pszEnvironment,
		[in]                       uint32     cchCoreDrivers,
		[in, size_is(cchCoreDrivers)]  uint16 *pszzCoreDriverDependencies,
		[in]                       uint32     cCorePrinterDrivers,
		[out, size_is(cCorePrinterDrivers)]  spoolss_CorePrinterDriver *pCorePrinterDrivers
	);

	/******************/
	/* Function: 0x41 */

	HRESULT winspool_AsyncCorePrinterDriverInstalled(
		[in,unique] [string,charset(UTF16)] uint16 *pszServer,
		[in] [string,charset(UTF16)] uint16 *pszEnvironment,
		[in]                       GUID      CoreDriverGUID,
		[in]                       NTTIME  ftDriverDate,
		[in]                       hyper dwlDriverVersion,
		[out]       int *pbDriverInstalled
	);

	/******************/
	/* Function: 0x42 */

	HRESULT winspool_AsyncGetPrinterDriverPackagePath(
		[in,unique] [string,charset(UTF16)] uint16 *pszServer,
		[in] [string,charset(UTF16)] uint16 *pszEnvironment,
		[in,unique] [string,charset(UTF16)] uint16 *pszLanguage,
		[in] [string,charset(UTF16)] uint16 *pszPackageID,
		[in, out, unique, size_is(cchDriverPackageCab)]  uint16 *pszDriverPackageCab,
		[in]                       uint32  cchDriverPackageCab,
		[out]                      uint32 *pcchRequiredSize
	);

	/******************/
	/* Function: 0x43 */

	HRESULT winspool_AsyncDeletePrinterDriverPackage(
		[in,unique] [string,charset(UTF16)] uint16 *pszServer,
		[in] [string,charset(UTF16)] uint16 *pszInfPath,
		[in] [string,charset(UTF16)] uint16 *pszEnvironment
	);

	/******************/
	/* Function: 0x44 */

	WERROR winspool_AsyncReadPrinter(
		[in]                    PRINTER_HANDLE  hPrinter,
		[out, size_is(cbBuf)]   uint8 *pBuf,
		[in]                    uint32           cbBuf,
		[out]                   uint32 *pcNoBytesRead
	);

	/******************/
	/* Function: 0x45 */

	WERROR winspool_AsyncResetPrinter(
		[in]                    PRINTER_HANDLE     hPrinter,
		[in,unique] [string,charset(UTF16)] uint16 *pDatatype,
		[in]                    spoolss_DevmodeContainer *pDevModeContainer
	);

	/******************/
	/* Function: 0x46 */

	WERROR winspool_AsyncGetJobNamedPropertyValue(
		[in] PRINTER_HANDLE hPrinter,
		[in] uint32 JobId,
		[in] [string,charset(UTF16)] uint16 *pszName,
		[out] spoolss_PrintPropertyValue *pValue
	);

	/******************/
	/* Function: 0x47 */

	[public] WERROR winspool_AsyncSetJobNamedProperty(
		[in] PRINTER_HANDLE hPrinter,
		[in] uint32 JobId,
		[in] spoolss_PrintNamedProperty *pProperty
	);

	/******************/
	/* Function: 0x48 */

	WERROR winspool_AsyncDeleteJobNamedProperty(
		[in] PRINTER_HANDLE hPrinter,
		[in] uint32 JobId,
		[in] [string,charset(UTF16)] uint16 *pszName
	);

	/******************/
	/* Function: 0x49 */

	WERROR winspool_AsyncEnumJobNamedProperties(
		[in] PRINTER_HANDLE hPrinter,
		[in] uint32 JobId,
		[out] uint32 *pcProperties,
		[out, size_is(,*pcProperties)] spoolss_PrintNamedProperty **ppProperties
	);

	/******************/
	/* Function: 0x4a */

	WERROR winspool_AsyncLogJobInfoForBranchOffice(
		[in] PRINTER_HANDLE hPrinter,
		[in,ref] spoolss_BranchOfficeJobDataContainer *pBranchOfficeJobDataContainer
	);
}
