1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21/* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26#ifndef _MLSVC_WINREG_NDL_ 27#define _MLSVC_WINREG_NDL_ 28 29/* 30 * Windows Registry (WINREG) RPC interface definition. 31 * 32 * The Windows registry is split into a number of hives, which are divided 33 * by function. The hive names are abbreviated and prefixed by HKEY or HK. 34 * 35 * HKEY_CLASSES_ROOT (HKCR) Information about registered applications 36 * HKEY_CURRENT_USER (HKCU) Settings for the current logged in user. 37 * HKEY_LOCAL_MACHINE (HKLM) Settings for all users on the computer. 38 * HKEY_USERS (HKU) HKEY_CURRENT_USER subkeys for user accounts. 39 * HKEY_CURRENT_CONFIG (HKCC) Runtime configuration information. 40 * HKEY_PERFORMANCE_DATA (HKPD) Runtime performance data. 41 * HKEY_DYN_DATA (HKDD) Runtime data for Windows 9x applications. 42 * HKEY_PERFORMANCE_TEXT (HKPT) Runtime performance information. 43 * HKEY_PERFORMANCE_NLS (HKPN) Runtime performance information. 44 */ 45 46#include "ndrtypes.ndl" 47 48/* Windows NT */ 49#define WINREG_OPNUM_OpenHKCR 0x00 50#define WINREG_OPNUM_OpenHKCU 0x01 51#define WINREG_OPNUM_OpenHKLM 0x02 52#define WINREG_OPNUM_OpenHKPD 0x03 53#define WINREG_OPNUM_OpenHKUsers 0x04 54#define WINREG_OPNUM_Close 0x05 55#define WINREG_OPNUM_CreateKey 0x06 56#define WINREG_OPNUM_DeleteKey 0x07 57#define WINREG_OPNUM_DeleteValue 0x08 58#define WINREG_OPNUM_EnumKey 0x09 59#define WINREG_OPNUM_EnumValue 0x0a 60#define WINREG_OPNUM_FlushKey 0x0b 61#define WINREG_OPNUM_GetKeySec 0x0c 62#define WINREG_OPNUM_LoadKey 0x0d 63#define WINREG_OPNUM_NotifyChange 0x0e 64#define WINREG_OPNUM_OpenKey 0x0f 65#define WINREG_OPNUM_QueryKey 0x10 66#define WINREG_OPNUM_QueryValue 0x11 67#define WINREG_OPNUM_ReplaceKey 0x12 68#define WINREG_OPNUM_RestoreKey 0x13 69#define WINREG_OPNUM_SaveKey 0x14 70#define WINREG_OPNUM_SetKeySec 0x15 71 72/* Windows 2000 */ 73#define WINREG_OPNUM_CreateValue 0x16 74#define WINREG_OPNUM_UnloadKey 0x17 75#define WINREG_OPNUM_Shutdown 0x18 76#define WINREG_OPNUM_AbortShutdown 0x19 77#define WINREG_OPNUM_GetVersion 0x1a 78#define WINREG_OPNUM_OpenHKCC 0x1b 79#define WINREG_OPNUM_OpenHKDD 0x1c 80#define WINREG_OPNUM_QueryMultiValues 0x1d 81#define WINREG_OPNUM_ShutdownEx 0x1e 82 83/* Windows XP and Windows Server 2003 */ 84#define WINREG_OPNUM_SavekeyEx 0x1f 85#define WINREG_OPNUM_OpenHKPT 0x20 86#define WINREG_OPNUM_OpenHKPN 0x21 87 88/* Windows 2003 SP1 */ 89#define WINREG_OPNUM_QueryMultiValues2 0x22 90#define WINREG_OPNUM_DeleteKeyEx 0x23 91 92#define WINREG_TYPE_NONE 0 93#define WINREG_SZ 1 94#define WINREG_EXPAND_SZ 2 95#define WINREG_BINARY 3 96#define WINREG_DWORD 4 97#define WINREG_DWORD_BIG_ENDIAN 5 98#define WINREG_LINK 6 99#define WINREG_MULTI_SZ 7 100#define WINREG_RESOURCE_LIST 8 101#define WINREG_RESOURCE_DESC 9 102#define WINREG_RESOURCE_REQ_LIST 10 103#define WINREG_QWORD 11 104 105#define WINREG_ACCESS_QUERY_VALUE 0x00000001 106#define WINREG_ACCESS_SET_VALUE 0x00000002 107#define WINREG_ACCESS_CREATE_KEY 0x00000004 108#define WINREG_ACCESS_ENUMERATE 0x00000008 109#define WINREG_ACCESS_NOTIFY 0x00000010 110#define WINREG_ACCESS_CREATE_LINK 0x00000020 111#define WINREG_ACCESS_KEY64 0x00000100 112#define WINREG_ACCESS_KEY32 0x00000200 113 114CONTEXT_HANDLE(winreg_handle) winreg_handle_t; 115 116struct winreg_string_desc { 117 WORD length; 118 WORD allosize; 119 LPTSTR str; 120}; 121typedef struct winreg_string_desc winreg_string_t; 122 123/* 124 * Fake Varying/Conformant with a funny conformant. 125 */ 126struct winreg_value { 127 DWORD vc_first_is; /* 0 */ 128 DWORD vc_length_is; 129 SIZE_IS(vc_length_is) 130 BYTE value[ANY_SIZE_ARRAY]; 131}; 132 133struct winreg_vcs { 134 DWORD vc_first_is; /* 0 */ 135 DWORD vc_length_is; 136 SIZE_IS(vc_length_is) 137 WORD value[ANY_SIZE_ARRAY]; 138}; 139 140struct winreg_vcbuf { 141 WORD wclen; 142 WORD wcsize; 143 struct winreg_vcs *buf; 144}; 145typedef struct winreg_vcbuf winreg_vcbuf_t; 146 147struct file_time { 148 DWORD low; 149 DWORD high; 150}; 151typedef struct file_time file_time_t; 152 153struct winreg_secdesc { 154 DWORD sd_length_is; 155 SIZE_IS(sd_length_is) 156 BYTE value[ANY_SIZE_ARRAY]; 157}; 158 159OPERATION(WINREG_OPNUM_OpenHKCR) 160struct winreg_OpenHKCR { 161 IN DWORD *server; 162 IN DWORD access_mask; 163 OUT winreg_handle_t handle; 164 OUT DWORD status; 165}; 166 167OPERATION(WINREG_OPNUM_OpenHKCU) 168struct winreg_OpenHKCU { 169 IN DWORD *server; 170 IN DWORD access_mask; 171 OUT winreg_handle_t handle; 172 OUT DWORD status; 173}; 174 175OPERATION(WINREG_OPNUM_OpenHKLM) 176struct winreg_OpenHKLM { 177 IN DWORD *server; 178 IN DWORD access_mask; 179 OUT winreg_handle_t handle; 180 OUT DWORD status; 181}; 182 183OPERATION(WINREG_OPNUM_OpenHKPD) 184struct winreg_OpenHKPD { 185 IN DWORD *server; 186 IN DWORD access_mask; 187 OUT winreg_handle_t handle; 188 OUT DWORD status; 189}; 190 191OPERATION(WINREG_OPNUM_OpenHKUsers) 192struct winreg_OpenHKUsers { 193 IN DWORD *server; 194 IN DWORD access_mask; 195 OUT winreg_handle_t handle; 196 OUT DWORD status; 197}; 198 199 200OPERATION(WINREG_OPNUM_Close) 201struct winreg_Close { 202 IN winreg_handle_t handle; 203 OUT winreg_handle_t result_handle; 204 OUT DWORD status; 205}; 206 207#define WINREG_ACTION_NONE 0 208#define WINREG_ACTION_NEW_KEY 1 209#define WINREG_ACTION_EXISTING_KEY 2 210 211OPERATION(WINREG_OPNUM_CreateKey) 212struct winreg_CreateKey { 213 IN winreg_handle_t handle; 214 IN winreg_string_t subkey; 215 IN winreg_string_t keyclass; 216 IN DWORD options; 217 IN DWORD access_mask; 218 IN DWORD *sd; 219 OUT winreg_handle_t result_handle; 220 OUT DWORD *action; 221 OUT DWORD status; 222}; 223 224 225OPERATION(WINREG_OPNUM_DeleteKey) 226struct winreg_DeleteKey { 227 IN winreg_handle_t handle; 228 IN winreg_string_t subkey; 229 OUT DWORD status; 230}; 231 232 233OPERATION(WINREG_OPNUM_DeleteValue) 234struct winreg_DeleteValue { 235 IN winreg_handle_t handle; 236 IN winreg_string_t name; 237 OUT DWORD status; 238}; 239 240/* 241 * Some of the OUT parameters are also supplied 242 * as IN parameters but we can ignore them. 243 */ 244OPERATION(WINREG_OPNUM_EnumKey) 245struct winreg_EnumKey { 246 IN winreg_handle_t handle; 247 IN DWORD index; 248 IN winreg_string_t name_in; 249 IN winreg_string_t class_in; 250 OUT winreg_string_t name_out; 251 OUT winreg_string_t *class_out; 252 INOUT file_time_t *change_time; 253 OUT DWORD status; 254}; 255 256/* 257 * Some of the OUT parameters are also supplied 258 * as IN parameters but we can ignore them. 259 */ 260OPERATION(WINREG_OPNUM_EnumValue) 261struct winreg_EnumValue { 262 IN winreg_handle_t handle; 263 IN DWORD index; 264 /* IN ignore the remaining input data */ 265 266 OUT winreg_vcbuf_t name; 267 OUT DWORD *type; 268 OUT struct winreg_value *value; 269 OUT DWORD *value_size; 270 OUT DWORD *value_size_total; 271 OUT DWORD status; 272}; 273 274OPERATION(WINREG_OPNUM_FlushKey) 275struct winreg_FlushKey { 276 IN winreg_handle_t handle; 277 OUT DWORD status; 278}; 279 280OPERATION(WINREG_OPNUM_GetKeySec) 281struct winreg_GetKeySec { 282 IN winreg_handle_t handle; 283 IN DWORD sec_info; 284/* 285 OUT struct winreg_secdesc sd; 286*/ 287 OUT DWORD sd_length_is; 288 OUT DWORD sd_size_is; 289 OUT DWORD sd_array; 290 OUT DWORD status; 291}; 292 293OPERATION(WINREG_OPNUM_NotifyChange) 294struct winreg_NotifyChange { 295 IN winreg_handle_t handle; 296 IN DWORD watch_subtree; 297 IN DWORD notify_filter; 298 OUT DWORD status; 299}; 300 301OPERATION(WINREG_OPNUM_OpenKey) 302struct winreg_OpenKey { 303 IN winreg_handle_t handle; 304 IN winreg_string_t name; 305 IN DWORD options; 306 IN DWORD access_mask; 307 OUT winreg_handle_t result_handle; 308 OUT DWORD status; 309}; 310 311 312OPERATION(WINREG_OPNUM_QueryKey) 313struct winreg_QueryKey { 314 IN winreg_handle_t handle; 315 INOUT winreg_string_t name; 316 OUT DWORD num_subkeys; 317 OUT DWORD max_subkey_len; 318 OUT DWORD max_class_len; 319 OUT DWORD num_values; 320 OUT DWORD max_value_namelen; 321 OUT DWORD max_value_len; 322 OUT DWORD secdesc_size; 323 OUT file_time_t last_write_time; 324 OUT DWORD status; 325}; 326 327 328/* 329 * Some of the OUT parameters are also supplied 330 * as IN parameters but we can ignore them. 331 */ 332OPERATION(WINREG_OPNUM_QueryValue) 333struct winreg_QueryValue { 334 IN winreg_handle_t handle; 335 IN winreg_string_t value_name; 336 /* IN ignore the remaining input data */ 337 338 OUT DWORD *type; 339 OUT struct winreg_value *value; 340 OUT DWORD *value_size; 341 OUT DWORD *value_size_total; 342 OUT DWORD status; 343}; 344 345 346OPERATION(WINREG_OPNUM_SetKeySec) 347struct winreg_SetKeySec { 348 IN winreg_handle_t handle; 349 IN DWORD access_mask; 350 IN DWORD sd; 351 OUT DWORD status; 352}; 353 354OPERATION(WINREG_OPNUM_CreateValue) 355struct winreg_CreateValue { 356 IN winreg_handle_t handle; 357 IN winreg_string_t name; 358 IN winreg_string_t class; 359 IN DWORD options; 360 /* IN ignore the remaining input data */ 361 362 OUT DWORD status; 363}; 364 365 366/* 367 * The real structure of shutdown passes some strings, a timeout 368 * and reboot/shutdown flags but this allows us to accept the call, 369 * without anything appearing in the log, and return access denied. 370 */ 371OPERATION(WINREG_OPNUM_Shutdown) 372struct winreg_Shutdown { 373 IN DWORD ignored; 374 OUT DWORD status; 375}; 376 377OPERATION(WINREG_OPNUM_AbortShutdown) 378struct winreg_AbortShutdown { 379 IN DWORD ignored; 380 OUT DWORD status; 381}; 382 383OPERATION(WINREG_OPNUM_GetVersion) 384struct winreg_GetVersion { 385 IN winreg_handle_t handle; 386 OUT DWORD version; 387 OUT DWORD status; 388}; 389 390OPERATION(WINREG_OPNUM_OpenHKCC) 391struct winreg_OpenHKCC { 392 IN DWORD *server; 393 IN DWORD access_mask; 394 OUT winreg_handle_t handle; 395 OUT DWORD status; 396}; 397 398OPERATION(WINREG_OPNUM_OpenHKDD) 399struct winreg_OpenHKDD { 400 IN DWORD *server; 401 IN DWORD access_mask; 402 OUT winreg_handle_t handle; 403 OUT DWORD status; 404}; 405 406OPERATION(WINREG_OPNUM_OpenHKPT) 407struct winreg_OpenHKPT { 408 IN DWORD *server; 409 IN DWORD access_mask; 410 OUT winreg_handle_t handle; 411 OUT DWORD status; 412}; 413 414OPERATION(WINREG_OPNUM_OpenHKPN) 415struct winreg_OpenHKPN { 416 IN DWORD *server; 417 IN DWORD access_mask; 418 OUT winreg_handle_t handle; 419 OUT DWORD status; 420}; 421 422/* 423 * The WINREG interface. 424 */ 425INTERFACE(0) 426union winreg_interface { 427 CASE(WINREG_OPNUM_OpenHKCR) 428 struct winreg_OpenHKCR OpenHKCR; 429 CASE(WINREG_OPNUM_OpenHKCU) 430 struct winreg_OpenHKCU OpenHKCU; 431 CASE(WINREG_OPNUM_OpenHKLM) 432 struct winreg_OpenHKLM OpenHKLM; 433 CASE(WINREG_OPNUM_OpenHKPD) 434 struct winreg_OpenHKPD OpenHKPD; 435 CASE(WINREG_OPNUM_OpenHKUsers) 436 struct winreg_OpenHKUsers OpenHKUsers; 437 CASE(WINREG_OPNUM_Close) 438 struct winreg_Close Close; 439 CASE(WINREG_OPNUM_CreateKey) 440 struct winreg_CreateKey CreateKey; 441 CASE(WINREG_OPNUM_DeleteKey) 442 struct winreg_DeleteKey DeleteKey; 443 CASE(WINREG_OPNUM_DeleteValue) 444 struct winreg_DeleteValue DeleteValue; 445 CASE(WINREG_OPNUM_EnumKey) 446 struct winreg_EnumKey EnumKey; 447 CASE(WINREG_OPNUM_EnumValue) 448 struct winreg_EnumValue EnumValue; 449 CASE(WINREG_OPNUM_FlushKey) 450 struct winreg_FlushKey FlushKey; 451 CASE(WINREG_OPNUM_GetKeySec) 452 struct winreg_GetKeySec GetKeySec; 453 CASE(WINREG_OPNUM_NotifyChange) 454 struct winreg_NotifyChange NotifyChange; 455 CASE(WINREG_OPNUM_OpenKey) 456 struct winreg_OpenKey OpenKey; 457 CASE(WINREG_OPNUM_QueryKey) 458 struct winreg_QueryKey QueryKey; 459 CASE(WINREG_OPNUM_QueryValue) 460 struct winreg_QueryValue QueryValue; 461 CASE(WINREG_OPNUM_SetKeySec) 462 struct winreg_SetKeySec SetKeySec; 463 CASE(WINREG_OPNUM_CreateValue) 464 struct winreg_CreateValue CreateValue; 465 CASE(WINREG_OPNUM_Shutdown) 466 struct winreg_Shutdown Shutdown; 467 CASE(WINREG_OPNUM_AbortShutdown) 468 struct winreg_AbortShutdown AbortShutdown; 469 CASE(WINREG_OPNUM_GetVersion) 470 struct winreg_GetVersion GetVersion; 471 CASE(WINREG_OPNUM_OpenHKCC) 472 struct winreg_OpenHKCC OpenHKCC; 473 CASE(WINREG_OPNUM_OpenHKDD) 474 struct winreg_OpenHKDD OpenHKDD; 475 CASE(WINREG_OPNUM_OpenHKPT) 476 struct winreg_OpenHKPT OpenHKPT; 477 CASE(WINREG_OPNUM_OpenHKPN) 478 struct winreg_OpenHKPN OpenHKPN; 479}; 480typedef union winreg_interface winreg_interface_t; 481EXTERNTYPEINFO(winreg_interface) 482 483#endif /* _MLSVC_WINREG_NDL_ */ 484