summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--librpc/idl/spoolss.idl71
-rw-r--r--source3/rpc_server/spoolss/srv_spoolss_nt.c6
-rw-r--r--source4/rpc_server/spoolss/dcesrv_spoolss.c6
3 files changed, 76 insertions, 7 deletions
diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl
index 2fa2997c41..c143733fcc 100644
--- a/librpc/idl/spoolss.idl
+++ b/librpc/idl/spoolss.idl
@@ -3158,7 +3158,76 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
/******************/
/* Function: 0x61 */
- [todo] WERROR spoolss_61(
+
+ const string BIDI_ACTION_ENUM_SCHEMA = "EnumSchema";
+ const string BIDI_ACTION_GET = "Get";
+ const string BIDI_ACTION_SET = "Set";
+ const string BIDI_ACTION_GET_ALL = "GetAll";
+
+ typedef enum {
+ BIDI_NULL = 0x00000000,
+ BIDI_INT = 0x00000001,
+ BIDI_FLOAT = 0x00000002,
+ BIDI_BOOL = 0x00000003,
+ BIDI_STRING = 0x00000004,
+ BIDI_TEXT = 0x00000005,
+ BIDI_ENUM = 0x00000006,
+ BIDI_BLOB = 0x00000007
+ } BIDI_TYPE;
+
+ typedef struct {
+ uint32 cbBuf;
+ [size_is(cbBuf), unique] uint8 *pszString;
+ } RPC_BINARY_CONTAINER;
+
+ typedef [ms_union,switch_type(uint32)] union {
+ [case(BIDI_NULL)] uint32 bData;
+ [case(BIDI_BOOL)] uint32 bData;
+ [case(BIDI_INT)] uint32 iData;
+ [case(BIDI_STRING)] [unique] [string,charset(UTF16)] uint16 *sData;
+ [case(BIDI_TEXT)] [unique] [string,charset(UTF16)] uint16 *sData;
+ [case(BIDI_ENUM)] [unique] [string,charset(UTF16)] uint16 *sData;
+ /*[case(BIDI_FLOAT)] float fData;*/
+ [case(BIDI_BLOB)] RPC_BINARY_CONTAINER biData;
+ } RPC_BIDI_DATA_u;
+
+ typedef struct {
+ uint32 dwBidiType;
+ [switch_is(dwBidiType)] RPC_BIDI_DATA_u u;
+ } RPC_BIDI_DATA;
+
+ typedef struct {
+ uint32 dwReqNumber;
+ [unique] [string,charset(UTF16)] uint16 *pSchema;
+ RPC_BIDI_DATA data;
+ } RPC_BIDI_REQUEST_DATA;
+
+ typedef [public] struct {
+ [value(1)] uint32 Version;
+ uint32 Flags;
+ uint32 Count;
+ [size_is(Count), unique] RPC_BIDI_REQUEST_DATA *aData[];
+ } RPC_BIDI_REQUEST_CONTAINER;
+
+ typedef struct {
+ uint32 dwResult;
+ uint32 dwReqNumber;
+ [unique] [string,charset(UTF16)] uint16 *pSchema;
+ RPC_BIDI_DATA data;
+ } RPC_BIDI_RESPONSE_DATA;
+
+ typedef [public] struct {
+ [value(1)] uint32 Version;
+ uint32 Flags;
+ uint32 Count;
+ [size_is(Count), unique] RPC_BIDI_RESPONSE_DATA *aData[];
+ } RPC_BIDI_RESPONSE_CONTAINER;
+
+ WERROR spoolss_RpcSendRecvBidiData(
+ [in] policy_handle hPrinter,
+ [in,unique] [string,charset(UTF16)] uint16 *pAction,
+ [in] RPC_BIDI_REQUEST_CONTAINER *pReqData,
+ [out] RPC_BIDI_RESPONSE_CONTAINER **ppRespData
);
/******************/
diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c
index 891f4296b9..7482443c74 100644
--- a/source3/rpc_server/spoolss/srv_spoolss_nt.c
+++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c
@@ -10852,11 +10852,11 @@ WERROR _spoolss_60(struct pipes_struct *p,
}
/****************************************************************
- _spoolss_61
+ _spoolss_RpcSendRecvBidiData
****************************************************************/
-WERROR _spoolss_61(struct pipes_struct *p,
- struct spoolss_61 *r)
+WERROR _spoolss_RpcSendRecvBidiData(struct pipes_struct *p,
+ struct spoolss_RpcSendRecvBidiData *r)
{
p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
return WERR_NOT_SUPPORTED;
diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c
index e3df4e0ff5..cb892a6cb5 100644
--- a/source4/rpc_server/spoolss/dcesrv_spoolss.c
+++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c
@@ -1592,10 +1592,10 @@ static WERROR dcesrv_spoolss_60(struct dcesrv_call_state *dce_call, TALLOC_CTX *
/*
- spoolss_61
+ spoolss_RpcSendRecvBidiData
*/
-static WERROR dcesrv_spoolss_61(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
- struct spoolss_61 *r)
+static WERROR dcesrv_spoolss_RpcSendRecvBidiData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+ struct spoolss_RpcSendRecvBidiData *r)
{
DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
}