librpc: add IRemoteWinspool idl
authorGünther Deschner <gd@samba.org>
Tue, 4 Aug 2009 16:52:52 +0000 (18:52 +0200)
committerGünther Deschner <gd@samba.org>
Thu, 22 Sep 2016 10:29:28 +0000 (12:29 +0200)
Guenther

Signed-off-by: Guenther Deschner <gd@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
librpc/idl/spoolss.idl
librpc/idl/winspool.idl [new file with mode: 0644]

index 193bb80613bdb469c0db5ad43edcf46028e0d5d8..9010a950c0e60dc90a3c0c6c5b3a87162f145972 100644 (file)
@@ -3500,7 +3500,7 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
                [switch_is(eEventType)] spoolss_BranchOfficeJobInfo JobInfo;
        } spoolss_BranchOfficeJobData;
 
-       typedef struct {
+       typedef [public] struct {
                DWORD cJobDataEntries;
                [size_is(cJobDataEntries)] spoolss_BranchOfficeJobData JobData[];
        } spoolss_BranchOfficeJobDataContainer;
diff --git a/librpc/idl/winspool.idl b/librpc/idl/winspool.idl
new file mode 100644 (file)
index 0000000..7e3d82a
--- /dev/null
@@ -0,0 +1,878 @@
+#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;
+
+       HRESULT winspool_SyncRegisterForRemoteNotifications(
+               [in]    PRINTER_HANDLE                  hPrinter,
+               [in]    winspool_PrintPropertiesCollectioni *pNotifyFilter,
+               [out]   RMTNTFY_HANDLE                 *phwinspool_Handle
+       );
+
+       /******************/
+       /* Function: 0x3b */
+
+       HRESULT winspool_SyncUnRegisterForRemoteNotifications(
+               [in, out]   RMTNTFY_HANDLE             *phwinspool_Handle
+       );
+
+       /******************/
+       /* Function: 0x3c */
+
+       HRESULT winspool_SyncRefreshRemoteNotifications(
+               [in]    RMTNTFY_HANDLE                  hwinspool_Handle,
+               [in]    winspool_PrintPropertiesCollection *pNotifyFilter,
+               [out]   winspool_PrintPropertiesCollection **ppNotifyData
+       );
+
+       /******************/
+       /* Function: 0x3d */
+
+       HRESULT winspool_AsyncGetRemoteNotifications(
+               [in]    RMTNTFY_HANDLE                  hwinspool_Handle,
+               [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
+       );
+}