r9146: - enable winreg pipe from ejs
[metze/samba/wip.git] / source4 / librpc / idl / winreg.idl
index 1f7123f7f379f8c132efe57b39e7b5aff98b3159..a6caf22b9b8ad0a5cc8240405116752b78c0e034 100644 (file)
@@ -4,28 +4,26 @@
   winreg interface definition
 */
 
-[ uuid(338cd001-2244-31f1-aaaa-900038001003),
+[ 
+  uuid("338cd001-2244-31f1-aaaa-900038001003"),
   version(1.0),
-  endpoint("ncacn_np:[\\pipe\\winreg]","ncacn_ip_tcp:"),
+  endpoint("ncacn_np:[\\pipe\\winreg]","ncacn_ip_tcp:","ncalrpc:"),
   pointer_default(unique),
-  helpstring("Remote Registry Service")
+  pointer_default_top(unique),
+  helpstring("Remote Registry Service"),
+  depends(lsa,initshutdown)
 ] interface winreg
 {
-       typedef struct {
-               [value(strlen_m_term(r->name)*2)] uint16 name_len;
-               [value(r->name_len)]              uint16 name_size;
+       typedef [public,noejs] struct {
+               [value(strlen_m_term(name)*2)] uint16 name_len;
+               [value(strlen_m_term(name)*2)] uint16 name_size;
                unistr *name;
        } winreg_String;
 
-       typedef struct {
-               uint16 unknown0;
-               uint16 unknown1;
-       } winreg_OpenUnknown;
-
        /******************/
        /* Function: 0x00 */
        WERROR winreg_OpenHKCR(
-               [in]      winreg_OpenUnknown *unknown,
+               [in]      uint16 *system_name,
                [in]      uint32 access_required,
                [out,ref] policy_handle *handle
        );
@@ -33,7 +31,7 @@
        /******************/
        /* Function: 0x01 */
        WERROR winreg_OpenHKCU(
-               [in]      winreg_OpenUnknown *unknown,
+               [in]      uint16 *system_name,
                [in]      uint32 access_required,
                [out,ref] policy_handle *handle
        );
@@ -41,7 +39,7 @@
        /******************/
        /* Function: 0x02 */
        WERROR winreg_OpenHKLM(
-               [in]      winreg_OpenUnknown *unknown,
+               [in]      uint16 *system_name,
                [in]      uint32 access_required,
                [out,ref] policy_handle *handle
        );
@@ -49,7 +47,7 @@
        /******************/
        /* Function: 0x03 */
        WERROR winreg_OpenHKPD(
-               [in]      winreg_OpenUnknown *unknown,
+               [in]      uint16 *system_name,
                [in]      uint32 access_required,
                [out,ref] policy_handle *handle
        );
@@ -57,7 +55,7 @@
        /******************/
        /* Function: 0x04 */
        WERROR winreg_OpenHKU(
-               [in]      winreg_OpenUnknown *unknown,
+               [in]      uint16 *system_name,
                [in]      uint32 access_required,
                [out,ref] policy_handle *handle
        );
                [in,out,ref] policy_handle *handle,
                [in] winreg_String key,
                [in] winreg_String class,
-               [in] uint32 reserved,
-               [out] uint32 *unknown,
+               [in] uint32 options,
                [in] uint32 access_mask,
-               [in,ref] uint32 *sec_info,
+               [in,out,ref] uint32 *action_taken,
                [in] sec_desc_buf *sec_desc
        );
 
                [in,out]    winreg_Time *last_changed_time
        );
 
-        typedef struct {
-               uint32 max_len;
-               uint32 offset;
-               uint32 len;
-        } EnumValueIn;
-
-        typedef struct {
-                uint16 len;
-                uint16 max_len;
-                EnumValueIn *buffer;
-        } EnumValueNameIn;
-
-        typedef struct {
-               uint32 max_len;
-               uint32 offset;
-               DATA_BLOB buffer;
-        } EnumValueOut;
-
-        typedef struct {
-                uint16 len;
-                uint16 max_len;
-                unistr *name;
-        } EnumValueNameOut;
-
        /******************/
        /* Function: 0x0a */
+
+       /* 
+          this is equivalent IDL to a winreg_String, but we need to
+          have absolute control over the length/size fields as the
+          server looks at those to see what size buffer we have, so
+          we can't use the automatic unistr handing in pidl.
+       */
+       typedef struct {
+               uint16 length;
+               uint16 size;
+               [size_is(size/2),length_is(length/2)] uint16 *name;
+       } winreg_EnumValueString;
+
        WERROR winreg_EnumValue(
                [in,ref] policy_handle *handle,
-               [in] uint32 enum_index,
-               [in] EnumValueNameIn name_in,
-               [out] EnumValueNameOut name_out,
+               [in]     uint32 enum_index,
+               [in]     winreg_EnumValueString name_in,
+               [out]    winreg_String name_out,
                [in,out] uint32 *type,
-               [in] EnumValueIn *value_in,
-               [out] EnumValueOut *value_out,
-               [in,out] uint32 *value_len1,
-               [in,out] uint32 *value_len2
+               [in,out,size_is(*size),length_is(*length)] uint8 *value,
+               [in,out] uint32 *size,
+               [in,out] uint32 *length
        );
 
        /******************/
        );
 
        typedef struct {
-               uint32 max_len;
-               uint32 offset;
+               [size_is(size),length_is(len)] uint8 *data;
+               uint32 size;
                uint32 len;
-       } KeySecuritySize;
-
-       typedef struct {
-               uint32 max_len;
-               DATA_BLOB data;
        } KeySecurityData;
 
        /******************/
        /* Function: 0x0c */
        WERROR winreg_GetKeySecurity(
                [in,ref] policy_handle *handle,
-               [in] uint32 unknown,
-               [in,out] KeySecuritySize *size,
-               [in,out] KeySecurityData data
+               [in] uint32 access_mask,
+               [in,out,ref] KeySecurityData *data
        );
 
        /******************/
        /* Function: 0x0d */
        WERROR winreg_LoadKey(
+               [in,ref] policy_handle *handle,
+               [in] winreg_String *keyname,
+               [in] winreg_String *filename
        );
 
        /******************/
        /* Function: 0x0e */
        WERROR winreg_NotifyChangeKeyValue(
+               [in,ref] policy_handle *handle,
+               [in] uint8 watch_subtree,
+               [in] uint32 notify_filter,
+               [in] uint32 unknown,
+               [in] winreg_String string1,
+               [in] winreg_String string2, 
+               [in] uint32 unknown2
        );
 
        /******************/
        /* Function: 0x11 */
        WERROR winreg_QueryValue(
                [in,ref] policy_handle *handle,
-               [in] winreg_String valuename,
-               [in] uint32 *reserved,
-               [in] uint32 *offered,
-               [in] uint32 *unknown1,
-               [in] uint32 *unknown2,
-               [out] uint32 *type, 
-               [out] uint8 *data,
-               [in,out] uint32 *offered2,
-               [in,out] uint32 *val_length
+               [in] winreg_String value_name,
+               [in,out] uint32 *type,
+               [in,out,size_is(*size),length_is(*length)] uint8 *data,
+               [in,out] uint32 *size,
+               [in,out] uint32 *length
        );
 
        /******************/
        /* Function: 0x15 */
        WERROR winreg_SetKeySecurity(
                [in,ref] policy_handle *handle,
-               [in] uint32 sec_info,
-               [in] sec_desc_buf *sec_desc
+               [in] uint32 access_mask,
+               [in,out,ref] KeySecurityData *data
        );
 
-       typedef struct {
-               uint32 max_len;
-               [length_is(buf_max_len)] uint8 *buffer;
-               uint32 len;
-       } winreg_Value;
-
        /******************/
        /* Function: 0x16 */
        WERROR winreg_SetValue(
-               [in,ref] policy_handle *handle,
-               [in] winreg_String name,
-               [in] uint32 type,
-               [in] winreg_Value value
+               [in,ref]           policy_handle *handle,
+               [in]               winreg_String name,
+               [in]               uint32 type,
+               [in,size_is(size)] uint8  *data,
+               [in]               uint32 size
        );
 
        /******************/
        /******************/
        /* Function: 0x18 */
        WERROR winreg_InitiateSystemShutdown(
-               [in]    winreg_String hostname,
-               [in]    winreg_String message,
+               [in]    uint16 *hostname,
+               [in]    initshutdown_String *message,
                [in]    uint32 timeout,
-               [in]    uint16 flags,
-               [out]   uint16 status
+               [in]    uint8 force_apps,
+               [in]    uint8 reboot
        );
 
        /******************/
        /* Function: 0x19 */
        WERROR winreg_AbortSystemShutdown(
-               [in,ref]        uint16 *server
+               [in]    uint16 *server
        );
 
        /******************/
        /******************/
        /* Function: 0x1b */
        WERROR winreg_OpenHKCC(
-               [in]      winreg_OpenUnknown *unknown,
+               [in]      uint16 *system_name,
                [in]      uint32 access_required,
                [out,ref] policy_handle *handle
        );
        /******************/
        /* Function: 0x1c */
        WERROR winreg_OpenHKDD(
-               [in]      winreg_OpenUnknown *unknown,
+               [in]      uint16 *system_name,
                [in]      uint32 access_required,
                [out,ref] policy_handle *handle
        );
 
+       typedef struct {
+               winreg_String *name;
+               uint32 type;
+               uint32 offset;
+               uint32 length;
+       } QueryMultipleValue;
+       
        /******************/
        /* Function: 0x1d */
        WERROR winreg_QueryMultipleValues(
+               [in,ref] policy_handle *key_handle, 
+               [in,out,ref,size_is(num_values),length_is(num_values)] QueryMultipleValue *values,
+        [in] uint32 num_values,
+        [in,out,size_is(*buffer_size),length_is(*buffer_size)] uint8 *buffer,
+        [in,out,ref] uint32 *buffer_size
        );
 
        /******************/
        /* Function: 0x1e */
        WERROR winreg_InitiateSystemShutdownEx(
-               );
+               [in] uint16 *hostname,
+               [in] initshutdown_String *message,
+               [in] uint32 timeout,
+               [in] uint8 force_apps,
+               [in] uint8 reboot,
+               [in] uint32 reason
+       );
 
        /******************/
        /* Function: 0x1f */
        /******************/
        /* Function: 0x20 */
        WERROR winreg_OpenHKPT(
-               [in]      winreg_OpenUnknown *unknown,
+               [in]      uint16 *system_name,
                [in]      uint32 access_required,
                [out,ref] policy_handle *handle
        );
        /******************/
        /* Function: 0x21 */
        WERROR winreg_OpenHKPN(
-               [in]      winreg_OpenUnknown *unknown,
+               [in]      uint16 *system_name,
                [in]      uint32 access_required,
                [out,ref] policy_handle *handle
        );