winreg.ndl revision dc20a3024900c47dd2ee44b9707e6df38f7d62a5
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _MLSVC_WINREG_NDL_
#define _MLSVC_WINREG_NDL_
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* Windows Registry (WINREG) RPC interface definition.
*/
#include "ndrtypes.ndl"
#define WINREG_OPNUM_OpenHKCR 0x00
#define WINREG_OPNUM_OpenHKCU 0x01
#define WINREG_OPNUM_OpenHKLM 0x02
#define WINREG_OPNUM_OpenHKPD 0x03
#define WINREG_OPNUM_OpenHKUsers 0x04
#define WINREG_OPNUM_Close 0x05
#define WINREG_OPNUM_CreateKey 0x06
#define WINREG_OPNUM_DeleteKey 0x07
#define WINREG_OPNUM_DeleteValue 0x08
#define WINREG_OPNUM_EnumKey 0x09
#define WINREG_OPNUM_EnumValue 0x0a
#define WINREG_OPNUM_FlushKey 0x0b
#define WINREG_OPNUM_GetKeySec 0x0c
#define WINREG_OPNUM_LoadKey 0x0d
#define WINREG_OPNUM_NotifyChange 0x0e
#define WINREG_OPNUM_OpenKey 0x0f
#define WINREG_OPNUM_QueryKey 0x10
#define WINREG_OPNUM_QueryValue 0x11
#define WINREG_OPNUM_ReplaceKey 0x12
#define WINREG_OPNUM_RestoreKey 0x13
#define WINREG_OPNUM_SaveKey 0x14
#define WINREG_OPNUM_SetKeySec 0x15
#define WINREG_OPNUM_CreateValue 0x16
#define WINREG_OPNUM_UnloadKey 0x17
#define WINREG_OPNUM_Shutdown 0x18
#define WINREG_OPNUM_AbortShutdown 0x19
#define WINREG_OPNUM_GetVersion 0x1a
struct winreg_handle {
DWORD hand1;
DWORD hand2;
WORD hand3[2];
BYTE hand4[8];
};
typedef struct winreg_handle winreg_handle_t;
struct winreg_string_desc {
WORD length;
WORD allosize;
LPTSTR str;
};
typedef struct winreg_string_desc winreg_string_t;
/*
* Fake Varying/Conformant with a funny conformant.
*/
struct winreg_value {
DWORD vc_first_is; /* 0 */
DWORD vc_length_is;
SIZE_IS(vc_length_is)
BYTE value[ANY_SIZE_ARRAY];
};
struct file_time {
DWORD low;
DWORD high;
};
typedef struct file_time file_time_t;
OPERATION(WINREG_OPNUM_OpenHKCR)
struct winreg_OpenHKCR {
IN DWORD *server;
IN DWORD access_mask;
OUT winreg_handle_t handle;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_OpenHKCU)
struct winreg_OpenHKCU {
IN DWORD *server;
IN DWORD access_mask;
OUT winreg_handle_t handle;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_OpenHKLM)
struct winreg_OpenHKLM {
IN DWORD *server;
IN DWORD access_mask;
OUT winreg_handle_t handle;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_OpenHKPD)
struct winreg_OpenHKPD {
IN DWORD *server;
IN DWORD access_mask;
OUT winreg_handle_t handle;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_OpenHKUsers)
struct winreg_OpenHKUsers {
IN DWORD *server;
IN DWORD access_mask;
OUT winreg_handle_t handle;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_Close)
struct winreg_Close {
IN winreg_handle_t handle;
OUT winreg_handle_t result_handle;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_CreateKey)
struct winreg_CreateKey {
IN winreg_handle_t handle;
IN winreg_string_t subkey;
/* IN ignore the remaining input data */
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_DeleteKey)
struct winreg_DeleteKey {
IN winreg_handle_t handle;
IN winreg_string_t subkey;
/* IN ignore the remaining input data */
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_DeleteValue)
struct winreg_DeleteValue {
IN winreg_handle_t handle;
IN winreg_string_t name;
/* IN ignore the remaining input data */
OUT DWORD status;
};
/*
* Some of the OUT parameters are also supplied
* as IN parameters but we can ignore them.
*/
OPERATION(WINREG_OPNUM_EnumValue)
struct winreg_EnumValue {
IN winreg_handle_t handle;
IN DWORD index;
/* IN ignore the remaining input data */
OUT winreg_string_t name;
OUT DWORD *type;
OUT struct winreg_value *value;
OUT DWORD *value_size;
OUT DWORD *value_size_total;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_FlushKey)
struct winreg_FlushKey {
IN winreg_handle_t handle;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_GetKeySec)
struct winreg_GetKeySec {
IN winreg_handle_t handle;
IN DWORD sec_info;
OUT DWORD *sd;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_NotifyChange)
struct winreg_NotifyChange {
IN winreg_handle_t handle;
IN DWORD watch_subtree;
IN DWORD notify_filter;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_OpenKey)
struct winreg_OpenKey {
IN winreg_handle_t handle;
IN winreg_string_t name;
IN DWORD unknown;
IN DWORD access_mask;
OUT winreg_handle_t result_handle;
OUT DWORD status;
};
/*
* 000000A0 00 00 00 00 C1 F9 C0 86 18 B1 ..........
* 000000B0 D5 11 99 C8 00 C0 F0 1F 42 26 00 00 10 04 CC ED ........B&......
* 000000C0 12 00 08 02 00 00 00 00 00 00 00 00 00 00 ..............
DWORD unknown_0x04100000;
DWORD unkown_ptr;
DWORD unknown_0x00000208;
DWORD unknown2;
DWORD unknown3;
*/
OPERATION(WINREG_OPNUM_QueryKey)
struct winreg_QueryKey {
IN winreg_handle_t handle;
/*
* Ignore the remaining input data
* (2 * DWORD, possibly winreg_string_t).
*/
OUT winreg_string_t name;
OUT DWORD unknown;
OUT DWORD sub_keys;
OUT DWORD max_subkey_len;
OUT DWORD max_class_len;
OUT DWORD values;
OUT DWORD max_value_namelen;
OUT DWORD max_value_len;
OUT DWORD security_desc;
OUT file_time_t last_write_time;
OUT DWORD status;
};
/*
* Some of the OUT parameters are also supplied
* as IN parameters but we can ignore them.
*/
OPERATION(WINREG_OPNUM_QueryValue)
struct winreg_QueryValue {
IN winreg_handle_t handle;
IN winreg_string_t value_name;
/* IN ignore the remaining input data */
OUT DWORD *type;
OUT struct winreg_value *value;
OUT DWORD *value_size;
OUT DWORD *value_size_total;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_SetKeySec)
struct winreg_SetKeySec {
IN winreg_handle_t handle;
IN DWORD access_mask;
IN DWORD sd;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_CreateValue)
struct winreg_CreateValue {
IN winreg_handle_t handle;
IN winreg_string_t name;
/* IN ignore the remaining input data */
OUT DWORD status;
};
/*
* The real structure of shutdown passes some strings, a timeout
* and reboot/shutdown flags but this allows us to accept the call,
* without anything appearing in the log, and return access denied.
*/
OPERATION(WINREG_OPNUM_Shutdown)
struct winreg_Shutdown {
IN DWORD ignored;
OUT DWORD status;
};
OPERATION(WINREG_OPNUM_GetVersion)
struct winreg_GetVersion {
IN winreg_handle_t handle;
OUT DWORD version;
OUT DWORD status;
};
/*
* The WINREG interface.
*/
INTERFACE(0)
union winreg_interface {
CASE(WINREG_OPNUM_OpenHKCR)
struct winreg_OpenHKCR OpenHKCR;
CASE(WINREG_OPNUM_OpenHKCU)
struct winreg_OpenHKCU OpenHKCU;
CASE(WINREG_OPNUM_OpenHKLM)
struct winreg_OpenHKLM OpenHKLM;
CASE(WINREG_OPNUM_OpenHKPD)
struct winreg_OpenHKPD OpenHKPD;
CASE(WINREG_OPNUM_OpenHKUsers)
struct winreg_OpenHKUsers OpenHKUsers;
CASE(WINREG_OPNUM_Close)
struct winreg_Close Close;
CASE(WINREG_OPNUM_CreateKey)
struct winreg_CreateKey CreateKey;
CASE(WINREG_OPNUM_DeleteKey)
struct winreg_DeleteKey DeleteKey;
CASE(WINREG_OPNUM_DeleteValue)
struct winreg_DeleteValue DeleteValue;
CASE(WINREG_OPNUM_FlushKey)
struct winreg_FlushKey FlushKey;
CASE(WINREG_OPNUM_GetKeySec)
struct winreg_GetKeySec GetKeySec;
CASE(WINREG_OPNUM_NotifyChange)
struct winreg_NotifyChange NotifyChange;
CASE(WINREG_OPNUM_OpenKey)
struct winreg_OpenKey OpenKey;
CASE(WINREG_OPNUM_QueryKey)
struct winreg_QueryKey QueryKey;
CASE(WINREG_OPNUM_QueryValue)
struct winreg_QueryValue QueryValue;
CASE(WINREG_OPNUM_SetKeySec)
struct winreg_SetKeySec SetKeySec;
CASE(WINREG_OPNUM_CreateValue)
struct winreg_CreateValue CreateValue;
CASE(WINREG_OPNUM_Shutdown)
struct winreg_Shutdown Shutdown;
CASE(WINREG_OPNUM_GetVersion)
struct winreg_GetVersion GetVersion;
};
typedef union winreg_interface winreg_interface_t;
EXTERNTYPEINFO(winreg_interface)
#endif /* _MLSVC_WINREG_NDL_ */