spoolss: use ndr_push_spoolss_PrinterInfo2 hand-marshalled version (moves devmode...
[abartlet/samba.git/.git] / librpc / idl / spoolss.idl
index f66538119997f1779120bfe538935b7a8c513b4f..377ef5ee4fbabda53917fa16b3d325bed5bce22b 100644 (file)
@@ -5,6 +5,9 @@
 */
 import "misc.idl", "security.idl", "winreg.idl";
 
+
+cpp_quote("#define spoolss_security_descriptor security_descriptor")
+
 [ uuid("12345678-1234-abcd-ef00-0123456789ab"),
   version(1.0),
   endpoint("ncacn_np:[\\pipe\\spoolss]"),
@@ -68,7 +71,7 @@ import "misc.idl", "security.idl", "winreg.idl";
 
        const int PRINTER_STATUS_OK             = 0x00000000;
 
-       typedef bitmap {
+       typedef [public] bitmap {
                PRINTER_STATUS_PAUSED           = 0x00000001,
                PRINTER_STATUS_ERROR            = 0x00000002,
                PRINTER_STATUS_PENDING_DELETION = 0x00000004,
@@ -439,7 +442,7 @@ import "misc.idl", "security.idl", "winreg.idl";
                                           PRINTER_ENUM_ICON7 |
                                           PRINTER_ENUM_ICON8); /* 0x00ff0000 */
 
-       typedef bitmap {
+       typedef [public] bitmap {
                PRINTER_ATTRIBUTE_QUEUED                = 0x00000001,
                PRINTER_ATTRIBUTE_DIRECT                = 0x00000002,
                PRINTER_ATTRIBUTE_DEFAULT               = 0x00000004,
@@ -465,7 +468,7 @@ import "misc.idl", "security.idl", "winreg.idl";
                [relative] nstring *comment;
        } spoolss_PrinterInfo1;
 
-       typedef [public,gensize] struct {
+       typedef [public,gensize,nopush] struct {
                [relative] nstring *servername;
                [relative] nstring *printername;
                [relative] nstring *sharename;
@@ -473,12 +476,12 @@ import "misc.idl", "security.idl", "winreg.idl";
                [relative] nstring *drivername;
                [relative] nstring *comment;
                [relative] nstring *location;
-               [relative,subcontext(0)] spoolss_DeviceMode *devmode;
+               [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_DeviceMode *devmode;
                [relative] nstring *sepfile;
                [relative] nstring *printprocessor;
                [relative] nstring *datatype;
                [relative] nstring *parameters;
-               [relative,subcontext(0)security_descriptor *secdesc;
+               [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_security_descriptor *secdesc;
                spoolss_PrinterAttributes attributes;
                [range(0,99)] uint32 priority;
                uint32 defaultpriority;
@@ -490,7 +493,7 @@ import "misc.idl", "security.idl", "winreg.idl";
        } spoolss_PrinterInfo2;
 
        typedef [public,gensize] struct {
-               [relative,subcontext(0)security_descriptor *secdesc;
+               [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_security_descriptor *secdesc;
        } spoolss_PrinterInfo3;
 
        typedef [public,gensize] struct {
@@ -525,10 +528,10 @@ import "misc.idl", "security.idl", "winreg.idl";
        } spoolss_PrinterInfo7;
 
        typedef struct {
-               [relative,subcontext(0)] spoolss_DeviceMode *devmode;
+               [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_DeviceMode *devmode;
        } spoolss_DeviceModeInfo;
 
-       typedef [nodiscriminant,relative_base,public,gensize] union {
+       typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union {
                [case(0)] spoolss_PrinterInfo0 info0;
                [case(1)] spoolss_PrinterInfo1 info1;
                [case(2)] spoolss_PrinterInfo2 info2;
@@ -619,9 +622,9 @@ import "misc.idl", "security.idl", "winreg.idl";
                [relative] nstring *print_processor;
                [relative] nstring *parameters;
                [relative] nstring *driver_name;
-               [relative] spoolss_DeviceMode *devmode;
+               [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_DeviceMode *devmode;
                [relative] nstring *text_status;
-               [relativesecurity_descriptor *secdesc;
+               [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_security_descriptor *secdesc;
                spoolss_JobStatus status;
                [range(0,99)] uint32 priority;
                uint32 position;
@@ -651,9 +654,9 @@ import "misc.idl", "security.idl", "winreg.idl";
                [relative] nstring *print_processor;
                [relative] nstring *parameters;
                [relative] nstring *driver_name;
-               [relative] spoolss_DeviceMode *devmode;
+               [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_DeviceMode *devmode;
                [relative] nstring *text_status;
-               [relativesecurity_descriptor *secdesc;
+               [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_security_descriptor *secdesc;
                spoolss_JobStatus status;
                [range(0,99)] uint32 priority;
                uint32 position;
@@ -667,7 +670,7 @@ import "misc.idl", "security.idl", "winreg.idl";
                uint32 size_high;
        } spoolss_JobInfo4;
 
-       typedef [nodiscriminant,relative_base,public,gensize] union {
+       typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union {
                [case(1)] spoolss_JobInfo1 info1;
                [case(2)] spoolss_JobInfo2 info2;
                [case(3)] spoolss_JobInfo3 info3;
@@ -891,12 +894,12 @@ import "misc.idl", "security.idl", "winreg.idl";
                [string,charset(UTF16)] uint16 *drivername;
                [string,charset(UTF16)] uint16 *comment;
                [string,charset(UTF16)] uint16 *location;
-               [subcontext(0)] spoolss_DeviceMode *devmode;
+               uint32 devmode_ptr;
                [string,charset(UTF16)] uint16 *sepfile;
                [string,charset(UTF16)] uint16 *printprocessor;
                [string,charset(UTF16)] uint16 *datatype;
                [string,charset(UTF16)] uint16 *parameters;
-               [subcontext(0)] security_descriptor *secdesc;
+               uint32 secdesc_ptr;
                spoolss_PrinterAttributes attributes;
                [range(0,99)] uint32 priority;
                uint32 defaultpriority;
@@ -934,6 +937,14 @@ import "misc.idl", "security.idl", "winreg.idl";
                spoolss_DsPrintAction action;
        } spoolss_SetPrinterInfo7;
 
+       typedef struct {
+               uint32 devmode_ptr;
+       } spoolss_SetPrinterInfo8;
+
+       typedef struct {
+               uint32 devmode_ptr;
+       } spoolss_SetPrinterInfo9;
+
        typedef [switch_type(uint32)] union {
                [case(0)] spoolss_SetPrinterInfo0 *info0;
                [case(1)] spoolss_SetPrinterInfo1 *info1;
@@ -943,8 +954,8 @@ import "misc.idl", "security.idl", "winreg.idl";
                [case(5)] spoolss_SetPrinterInfo5 *info5;
                [case(6)] spoolss_SetPrinterInfo6 *info6;
                [case(7)] spoolss_SetPrinterInfo7 *info7;
-               [case(8)] spoolss_DeviceModeInfo *info8;
-               [case(9)] spoolss_DeviceModeInfo *info9;
+               [case(8)] spoolss_SetPrinterInfo8 *info8;
+               [case(9)] spoolss_SetPrinterInfo9 *info9;
                [default];
        } spoolss_SetPrinterInfo;
 
@@ -980,11 +991,6 @@ import "misc.idl", "security.idl", "winreg.idl";
                /*[subcontext(0),subcontext_size(_ndr_size*2)]*/ nstring_array string;
        } spoolss_StringArray;
 
-       typedef [public,nopush,nopull] struct {
-               [value((ndr_size_spoolss_StringArray2(r, ndr->iconv_convenience, ndr->flags)-4)/2)] uint32 _ndr_size;
-               [subcontext(0),subcontext_size(_ndr_size*2)] nstring_array string;
-       } spoolss_StringArray2;
-
        typedef struct {
                [string,charset(UTF16)] uint16 *driver_name;
        } spoolss_AddDriverInfo1;
@@ -1196,6 +1202,14 @@ import "misc.idl", "security.idl", "winreg.idl";
                [relative] nstring *provider;
        } spoolss_DriverInfo6;
 
+       typedef [public,gensize] struct {
+               uint32 size;
+               spoolss_DriverOSVersion version;
+               [relative] nstring *driver_name;
+               [relative] nstring *inf_name;
+               [relative] nstring *install_source_root;
+       } spoolss_DriverInfo7;
+
        typedef [public,gensize] struct {
                spoolss_DriverOSVersion version;
                [relative] nstring *driver_name;
@@ -1255,13 +1269,14 @@ import "misc.idl", "security.idl", "winreg.idl";
                [relative] nstring *provider;
        } spoolss_DriverInfo101;
 
-       typedef [nodiscriminant,relative_base,public,gensize] union {
+       typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union {
                [case(1)] spoolss_DriverInfo1 info1;
                [case(2)] spoolss_DriverInfo2 info2;
                [case(3)] spoolss_DriverInfo3 info3;
                [case(4)] spoolss_DriverInfo4 info4;
                [case(5)] spoolss_DriverInfo5 info5;
                [case(6)] spoolss_DriverInfo6 info6;
+               [case(7)] spoolss_DriverInfo7 info7;
                [case(8)] spoolss_DriverInfo8 info8;
                [case(101)] spoolss_DriverInfo101 info101;
                [default];
@@ -1316,7 +1331,7 @@ import "misc.idl", "security.idl", "winreg.idl";
        /* NOTE: it's seems that w2k3 completly ignores the level
                 in its server code
         */
-       typedef [nodiscriminant,relative_base,gensize,public] union {
+       typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union {
                [case(1)] spoolss_DriverDirectoryInfo1 info1;
                [default] spoolss_DriverDirectoryInfo1 info1;
        } spoolss_DriverDirectoryInfo;
@@ -1354,7 +1369,7 @@ import "misc.idl", "security.idl", "winreg.idl";
                [relative] nstring *print_processor_name;
        } spoolss_PrintProcessorInfo1;
 
-       typedef [nodiscriminant,relative_base,public] union {
+       typedef [nodiscriminant,relative_base,public,flag(NDR_RELATIVE_REVERSE)] union {
                [case(1)] spoolss_PrintProcessorInfo1 info1;
                [default];
        } spoolss_PrintProcessorInfo;
@@ -1391,7 +1406,7 @@ import "misc.idl", "security.idl", "winreg.idl";
                nstring directory_name;
        } spoolss_PrintProcessorDirectoryInfo1;
 
-       typedef [nodiscriminant,relative_base,gensize,public] union {
+       typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union {
                [case(1)] spoolss_PrintProcessorDirectoryInfo1 info1;
                [default] spoolss_PrintProcessorDirectoryInfo1 info1;
        } spoolss_PrintProcessorDirectoryInfo;
@@ -1498,8 +1513,12 @@ import "misc.idl", "security.idl", "winreg.idl";
        const string SPL_ARCH_IA64              = "IA64";
        const string SPL_ARCH_X64               = "x64";
 
-       const string SPOOLSS_ARCHITECTURE_ALL                   = "all";
+       const string SPOOLSS_ARCHITECTURE_ALL                   = "All";
+       const string SPOOLSS_ARCHITECTURE_ALL_CLUSTER           = "AllCluster";
        const string SPOOLSS_ARCHITECTURE_NT_X86                = "Windows NT x86";
+       const string SPOOLSS_ARCHITECTURE_IA_64                 = "Windows IA64";
+       const string SPOOLSS_ARCHITECTURE_x64                   = "Windows x64";
+       const string SPOOLSS_ARCHITECTURE_4_0                   = "Windows 4.0";
        const string SPOOLSS_DEFAULT_SERVER_PATH                = "C:\\WINDOWS\\system32\\spool";
 
        typedef [public,gensize] struct {
@@ -1525,7 +1544,7 @@ import "misc.idl", "security.idl", "winreg.idl";
                uint8 reserved;
        } spoolss_OSVersionEx;
 
-       typedef [nodiscriminant,public,gensize] union {
+       typedef [nodiscriminant,public] union {
                [case(REG_NONE)];
                [case(REG_SZ)] nstring string;
                [case(REG_BINARY),flag(NDR_REMAINING)] DATA_BLOB binary;
@@ -1698,10 +1717,11 @@ import "misc.idl", "security.idl", "winreg.idl";
                [relative] nstring *mui_dll;
                uint32 ressource_id;
                [relative] nstring *display_name;
-               uint32 lang_id;
+               uint16 lang_id;
+               uint16 unused;
        } spoolss_FormInfo2;
 
-       typedef [nodiscriminant,relative_base,public,gensize] union {
+       typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union {
                [case(1)] spoolss_FormInfo1 info1;
                [case(2)] spoolss_FormInfo2 info2;
                [default];
@@ -1854,7 +1874,7 @@ import "misc.idl", "security.idl", "winreg.idl";
                DATA_BLOB monitor_data; /* relative ?? */
        } spoolss_PortInfoFF;
 
-       typedef [nodiscriminant,relative_base,public] union {
+       typedef [nodiscriminant,relative_base,public,flag(NDR_RELATIVE_REVERSE)] union {
                [case(1)] spoolss_PortInfo1 info1;
                [case(2)] spoolss_PortInfo2 info2;
                [case(3)] spoolss_PortInfo3 info3;
@@ -1900,7 +1920,7 @@ import "misc.idl", "security.idl", "winreg.idl";
                [relative] nstring *dll_name;
        } spoolss_MonitorInfo2;
 
-       typedef [nodiscriminant,relative_base,public] union {
+       typedef [nodiscriminant,relative_base,public,flag(NDR_RELATIVE_REVERSE)] union {
                [case(1)] spoolss_MonitorInfo1 info1;
                [case(2)] spoolss_MonitorInfo2 info2;
                [default];
@@ -2016,7 +2036,7 @@ import "misc.idl", "security.idl", "winreg.idl";
                [relative] nstring *name_array;
        } spoolss_PrintProcDataTypesInfo1;
 
-       typedef [nodiscriminant,relative_base,public] union {
+       typedef [nodiscriminant,relative_base,public,flag(NDR_RELATIVE_REVERSE)] union {
                [case(1)] spoolss_PrintProcDataTypesInfo1 info1;
                [default];
        } spoolss_PrintProcDataTypesInfo;
@@ -2603,12 +2623,19 @@ import "misc.idl", "security.idl", "winreg.idl";
                [out,ref] uint32 *needed
        );
 
+       typedef [nodiscriminant] union {
+               [case(0)];
+               [case(1)];
+               [default] nstring_array string_array;
+       } spoolss_KeyNames;
+
        /******************/
        /* Function: 0x50 */
        [public] WERROR spoolss_EnumPrinterKey(
                [in, ref] policy_handle *handle,
                [in] [string,charset(UTF16)] uint16 key_name[],
-               [out,ref] spoolss_StringArray2 *key_buffer,
+               [out,ref] uint32 *_ndr_size,
+               [out,ref,subcontext(0),subcontext_size(*_ndr_size*2),switch_is(*_ndr_size)] spoolss_KeyNames *key_buffer,
                [in] uint32 offered,
                [out,ref] uint32 *needed
        );