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 2010 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 114 CONTEXT_HANDLE(winreg_handle) winreg_handle_t; 115 116 struct winreg_string_desc { 117 WORD length; 118 WORD allosize; 119 LPTSTR str; 120 }; 121 typedef struct winreg_string_desc winreg_string_t; 122 123 /* 124 * Fake Varying/Conformant with a funny conformant. 125 */ 126 struct 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 133 struct 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 140 struct winreg_vcbuf { 141 WORD wclen; 142 WORD wcsize; 143 struct winreg_vcs *buf; 144 }; 145 typedef struct winreg_vcbuf winreg_vcbuf_t; 146 147 struct file_time { 148 DWORD low; 149 DWORD high; 150 }; 151 typedef struct file_time file_time_t; 152 153 struct winreg_secdesc { 154 struct winreg_value *sd_buf; 155 DWORD sd_len; 156 DWORD sd_size; 157 }; 158 159 OPERATION(WINREG_OPNUM_OpenHKCR) 160 struct winreg_OpenHKCR { 161 IN DWORD *server; 162 IN DWORD access_mask; 163 OUT winreg_handle_t handle; 164 OUT DWORD status; 165 }; 166 167 OPERATION(WINREG_OPNUM_OpenHKCU) 168 struct winreg_OpenHKCU { 169 IN DWORD *server; 170 IN DWORD access_mask; 171 OUT winreg_handle_t handle; 172 OUT DWORD status; 173 }; 174 175 OPERATION(WINREG_OPNUM_OpenHKLM) 176 struct winreg_OpenHKLM { 177 IN DWORD *server; 178 IN DWORD access_mask; 179 OUT winreg_handle_t handle; 180 OUT DWORD status; 181 }; 182 183 OPERATION(WINREG_OPNUM_OpenHKPD) 184 struct winreg_OpenHKPD { 185 IN DWORD *server; 186 IN DWORD access_mask; 187 OUT winreg_handle_t handle; 188 OUT DWORD status; 189 }; 190 191 OPERATION(WINREG_OPNUM_OpenHKUsers) 192 struct winreg_OpenHKUsers { 193 IN DWORD *server; 194 IN DWORD access_mask; 195 OUT winreg_handle_t handle; 196 OUT DWORD status; 197 }; 198 199 200 OPERATION(WINREG_OPNUM_Close) 201 struct 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 211 OPERATION(WINREG_OPNUM_CreateKey) 212 struct 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 225 OPERATION(WINREG_OPNUM_DeleteKey) 226 struct winreg_DeleteKey { 227 IN winreg_handle_t handle; 228 IN winreg_string_t subkey; 229 OUT DWORD status; 230 }; 231 232 233 OPERATION(WINREG_OPNUM_DeleteValue) 234 struct 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 */ 244 OPERATION(WINREG_OPNUM_EnumKey) 245 struct 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 */ 260 OPERATION(WINREG_OPNUM_EnumValue) 261 struct 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 274 OPERATION(WINREG_OPNUM_FlushKey) 275 struct winreg_FlushKey { 276 IN winreg_handle_t handle; 277 OUT DWORD status; 278 }; 279 280 OPERATION(WINREG_OPNUM_GetKeySec) 281 struct winreg_GetKeySec { 282 IN winreg_handle_t handle; 283 IN DWORD sec_info; 284 OUT REFERENCE struct winreg_secdesc *sd; 285 OUT DWORD status; 286 }; 287 288 OPERATION(WINREG_OPNUM_NotifyChange) 289 struct winreg_NotifyChange { 290 IN winreg_handle_t handle; 291 IN DWORD watch_subtree; 292 IN DWORD notify_filter; 293 OUT DWORD status; 294 }; 295 296 OPERATION(WINREG_OPNUM_OpenKey) 297 struct winreg_OpenKey { 298 IN winreg_handle_t handle; 299 IN winreg_string_t name; 300 IN DWORD options; 301 IN DWORD access_mask; 302 OUT winreg_handle_t result_handle; 303 OUT DWORD status; 304 }; 305 306 307 OPERATION(WINREG_OPNUM_QueryKey) 308 struct winreg_QueryKey { 309 IN winreg_handle_t handle; 310 INOUT winreg_string_t name; 311 OUT DWORD num_subkeys; 312 OUT DWORD max_subkey_len; 313 OUT DWORD max_class_len; 314 OUT DWORD num_values; 315 OUT DWORD max_value_namelen; 316 OUT DWORD max_value_len; 317 OUT DWORD secdesc_size; 318 OUT file_time_t last_write_time; 319 OUT DWORD status; 320 }; 321 322 323 /* 324 * Some of the OUT parameters are also supplied 325 * as IN parameters but we can ignore them. 326 */ 327 OPERATION(WINREG_OPNUM_QueryValue) 328 struct winreg_QueryValue { 329 IN winreg_handle_t handle; 330 IN winreg_string_t value_name; 331 /* IN ignore the remaining input data */ 332 333 OUT DWORD *type; 334 OUT struct winreg_value *value; 335 OUT DWORD *value_size; 336 OUT DWORD *value_size_total; 337 OUT DWORD status; 338 }; 339 340 341 OPERATION(WINREG_OPNUM_SetKeySec) 342 struct winreg_SetKeySec { 343 IN winreg_handle_t handle; 344 IN DWORD access_mask; 345 IN DWORD sd; 346 OUT DWORD status; 347 }; 348 349 OPERATION(WINREG_OPNUM_CreateValue) 350 struct winreg_CreateValue { 351 IN winreg_handle_t handle; 352 IN winreg_string_t name; 353 IN winreg_string_t class; 354 IN DWORD options; 355 /* IN ignore the remaining input data */ 356 357 OUT DWORD status; 358 }; 359 360 361 /* 362 * The real structure of shutdown passes some strings, a timeout 363 * and reboot/shutdown flags but this allows us to accept the call, 364 * without anything appearing in the log, and return access denied. 365 */ 366 OPERATION(WINREG_OPNUM_Shutdown) 367 struct winreg_Shutdown { 368 IN DWORD ignored; 369 OUT DWORD status; 370 }; 371 372 OPERATION(WINREG_OPNUM_AbortShutdown) 373 struct winreg_AbortShutdown { 374 IN DWORD ignored; 375 OUT DWORD status; 376 }; 377 378 OPERATION(WINREG_OPNUM_GetVersion) 379 struct winreg_GetVersion { 380 IN winreg_handle_t handle; 381 OUT DWORD version; 382 OUT DWORD status; 383 }; 384 385 OPERATION(WINREG_OPNUM_OpenHKCC) 386 struct winreg_OpenHKCC { 387 IN DWORD *server; 388 IN DWORD access_mask; 389 OUT winreg_handle_t handle; 390 OUT DWORD status; 391 }; 392 393 OPERATION(WINREG_OPNUM_OpenHKDD) 394 struct winreg_OpenHKDD { 395 IN DWORD *server; 396 IN DWORD access_mask; 397 OUT winreg_handle_t handle; 398 OUT DWORD status; 399 }; 400 401 OPERATION(WINREG_OPNUM_OpenHKPT) 402 struct winreg_OpenHKPT { 403 IN DWORD *server; 404 IN DWORD access_mask; 405 OUT winreg_handle_t handle; 406 OUT DWORD status; 407 }; 408 409 OPERATION(WINREG_OPNUM_OpenHKPN) 410 struct winreg_OpenHKPN { 411 IN DWORD *server; 412 IN DWORD access_mask; 413 OUT winreg_handle_t handle; 414 OUT DWORD status; 415 }; 416 417 /* 418 * The WINREG interface. 419 */ 420 INTERFACE(0) 421 union winreg_interface { 422 CASE(WINREG_OPNUM_OpenHKCR) 423 struct winreg_OpenHKCR OpenHKCR; 424 CASE(WINREG_OPNUM_OpenHKCU) 425 struct winreg_OpenHKCU OpenHKCU; 426 CASE(WINREG_OPNUM_OpenHKLM) 427 struct winreg_OpenHKLM OpenHKLM; 428 CASE(WINREG_OPNUM_OpenHKPD) 429 struct winreg_OpenHKPD OpenHKPD; 430 CASE(WINREG_OPNUM_OpenHKUsers) 431 struct winreg_OpenHKUsers OpenHKUsers; 432 CASE(WINREG_OPNUM_Close) 433 struct winreg_Close Close; 434 CASE(WINREG_OPNUM_CreateKey) 435 struct winreg_CreateKey CreateKey; 436 CASE(WINREG_OPNUM_DeleteKey) 437 struct winreg_DeleteKey DeleteKey; 438 CASE(WINREG_OPNUM_DeleteValue) 439 struct winreg_DeleteValue DeleteValue; 440 CASE(WINREG_OPNUM_EnumKey) 441 struct winreg_EnumKey EnumKey; 442 CASE(WINREG_OPNUM_EnumValue) 443 struct winreg_EnumValue EnumValue; 444 CASE(WINREG_OPNUM_FlushKey) 445 struct winreg_FlushKey FlushKey; 446 CASE(WINREG_OPNUM_GetKeySec) 447 struct winreg_GetKeySec GetKeySec; 448 CASE(WINREG_OPNUM_NotifyChange) 449 struct winreg_NotifyChange NotifyChange; 450 CASE(WINREG_OPNUM_OpenKey) 451 struct winreg_OpenKey OpenKey; 452 CASE(WINREG_OPNUM_QueryKey) 453 struct winreg_QueryKey QueryKey; 454 CASE(WINREG_OPNUM_QueryValue) 455 struct winreg_QueryValue QueryValue; 456 CASE(WINREG_OPNUM_SetKeySec) 457 struct winreg_SetKeySec SetKeySec; 458 CASE(WINREG_OPNUM_CreateValue) 459 struct winreg_CreateValue CreateValue; 460 CASE(WINREG_OPNUM_Shutdown) 461 struct winreg_Shutdown Shutdown; 462 CASE(WINREG_OPNUM_AbortShutdown) 463 struct winreg_AbortShutdown AbortShutdown; 464 CASE(WINREG_OPNUM_GetVersion) 465 struct winreg_GetVersion GetVersion; 466 CASE(WINREG_OPNUM_OpenHKCC) 467 struct winreg_OpenHKCC OpenHKCC; 468 CASE(WINREG_OPNUM_OpenHKDD) 469 struct winreg_OpenHKDD OpenHKDD; 470 CASE(WINREG_OPNUM_OpenHKPT) 471 struct winreg_OpenHKPT OpenHKPT; 472 CASE(WINREG_OPNUM_OpenHKPN) 473 struct winreg_OpenHKPN OpenHKPN; 474 }; 475 typedef union winreg_interface winreg_interface_t; 476 EXTERNTYPEINFO(winreg_interface) 477 478 #endif /* _MLSVC_WINREG_NDL_ */