2 Unix SMB/Netbios implementation.
4 SMB parameters and setup
5 Copyright (C) Andrew Tridgell 1992-1997
6 Copyright (C) Luke Kenneth Casson Leighton 1996-1997
7 Copyright (C) Paul Ashton 1997
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #ifndef _RPC_REG_H /* _RPC_REG_H */
28 /* winreg pipe defines */
29 #define REG_OPEN_HKCR 0x00
30 #define _REG_UNK_01 0x01
31 #define REG_OPEN_HKLM 0x02
32 #define _REG_UNK_03 0x03
33 #define REG_OPEN_HKU 0x04
34 #define REG_CLOSE 0x05
35 #define REG_CREATE_KEY 0x06
36 #define REG_DELETE_KEY 0x07
37 #define REG_DELETE_VALUE 0x08
38 #define REG_ENUM_KEY 0x09
39 #define REG_ENUM_VALUE 0x0a
40 #define REG_FLUSH_KEY 0x0b
41 #define REG_GET_KEY_SEC 0x0c
42 #define _REG_UNK_0D 0x0d
43 #define _REG_UNK_0E 0x0e
44 #define REG_OPEN_ENTRY 0x0f
45 #define REG_QUERY_KEY 0x10
47 #define _REG_UNK_12 0x12
48 #define _REG_UNK_13 0x13
49 #define _REG_UNK_14 0x14
50 #define REG_SET_KEY_SEC 0x15
51 #define REG_CREATE_VALUE 0x16
52 #define _REG_UNK_17 0x17
53 #define REG_SHUTDOWN 0x18
54 #define REG_ABORT_SHUTDOWN 0x19
55 #define REG_UNK_1A 0x1a
57 #define HKEY_CLASSES_ROOT 0x80000000
58 #define HKEY_CURRENT_USER 0x80000001
59 #define HKEY_LOCAL_MACHINE 0x80000002
60 #define HKEY_USERS 0x80000003
65 #define REG_MULTI_SZ 7
68 typedef struct q_reg_open_hkcr_info
71 uint16 unknown_0; /* 0x5428 - 16 bit unknown */
72 uint16 unknown_1; /* random. changes */
73 uint32 level; /* 0x0000 0002 - 32 bit unknown */
78 typedef struct r_reg_open_hkcr_info
80 POLICY_HND pol; /* policy handle */
81 NTSTATUS status; /* return status */
87 typedef struct q_reg_open_hklm_info
90 uint16 unknown_0; /* 0xE084 - 16 bit unknown */
91 uint16 unknown_1; /* random. changes */
92 uint32 access_mask; /* 0x0000 0002 - 32 bit unknown */
98 typedef struct r_reg_open_hklm_info
100 POLICY_HND pol; /* policy handle */
101 NTSTATUS status; /* return status */
108 typedef struct q_reg_open_hku_info
111 uint16 unknown_0; /* 0xE084 - 16 bit unknown */
112 uint16 unknown_1; /* random. changes */
113 uint32 level; /* 0x0000 0002 - 32 bit unknown */
118 typedef struct r_reg_open_hku_info
120 POLICY_HND pol; /* policy handle */
121 NTSTATUS status; /* return status */
126 /* REG_Q_FLUSH_KEY */
127 typedef struct q_reg_open_flush_key_info
129 POLICY_HND pol; /* policy handle */
133 /* REG_R_FLUSH_KEY */
134 typedef struct r_reg_open_flush_key_info
136 NTSTATUS status; /* return status */
141 /* REG_Q_SET_KEY_SEC */
142 typedef struct q_reg_set_key_sec_info
144 POLICY_HND pol; /* policy handle */
146 uint32 sec_info; /* xxxx_SECURITY_INFORMATION */
148 uint32 ptr; /* pointer */
149 BUFHDR hdr_sec; /* header for security data */
150 SEC_DESC_BUF *data; /* security data */
154 /* REG_R_SET_KEY_SEC */
155 typedef struct r_reg_set_key_sec_info
162 /* REG_Q_GET_KEY_SEC */
163 typedef struct q_reg_get_key_sec_info
165 POLICY_HND pol; /* policy handle */
167 uint32 sec_info; /* xxxx_SECURITY_INFORMATION */
169 uint32 ptr; /* pointer */
170 BUFHDR hdr_sec; /* header for security data */
171 SEC_DESC_BUF *data; /* security data */
175 /* REG_R_GET_KEY_SEC */
176 typedef struct r_reg_get_key_sec_info
178 uint32 sec_info; /* xxxx_SECURITY_INFORMATION */
180 uint32 ptr; /* pointer */
181 BUFHDR hdr_sec; /* header for security data */
182 SEC_DESC_BUF *data; /* security data */
188 /* REG_Q_CREATE_VALUE */
189 typedef struct q_reg_create_value_info
191 POLICY_HND pol; /* policy handle */
193 UNIHDR hdr_name; /* name of value */
196 uint32 type; /* 1 = UNISTR, 3 = BYTES, 4 = DWORD, 7 = MULTI_UNISTR */
198 BUFFER3 *buf_value; /* value, in byte buffer */
200 } REG_Q_CREATE_VALUE;
202 /* REG_R_CREATE_VALUE */
203 typedef struct r_reg_create_value_info
205 NTSTATUS status; /* return status */
207 } REG_R_CREATE_VALUE;
209 /* REG_Q_ENUM_VALUE */
210 typedef struct q_reg_query_value_info
212 POLICY_HND pol; /* policy handle */
214 uint32 val_index; /* index */
216 UNIHDR hdr_name; /* name of value */
219 uint32 ptr_type; /* pointer */
220 uint32 type; /* 1 = UNISTR, 3 = BYTES, 4 = DWORD, 7 = MULTI_UNISTR */
222 uint32 ptr_value; /* pointer */
223 BUFFER2 buf_value; /* value, in byte buffer */
225 uint32 ptr1; /* pointer */
226 uint32 len_value1; /* */
228 uint32 ptr2; /* pointer */
229 uint32 len_value2; /* */
233 /* REG_R_ENUM_VALUE */
234 typedef struct r_reg_enum_value_info
236 UNIHDR hdr_name; /* name of value */
239 uint32 ptr_type; /* pointer */
240 uint32 type; /* 1 = UNISTR, 3 = BYTES, 4 = DWORD, 7 = MULTI_UNISTR */
242 uint32 ptr_value; /* pointer */
243 BUFFER2 *buf_value; /* value, in byte buffer */
245 uint32 ptr1; /* pointer */
246 uint32 len_value1; /* */
248 uint32 ptr2; /* pointer */
249 uint32 len_value2; /* */
251 NTSTATUS status; /* return status */
255 /* REG_Q_CREATE_KEY */
256 typedef struct q_reg_create_key_info
258 POLICY_HND pnt_pol; /* parent key policy handle */
266 uint32 reserved; /* 0x0000 0000 */
267 SEC_ACCESS sam_access; /* access rights flags, see rpc_secdes.h */
270 uint32 sec_info; /* xxxx_SECURITY_INFORMATION */
272 uint32 ptr2; /* pointer */
273 BUFHDR hdr_sec; /* header for security data */
274 uint32 ptr3; /* pointer */
277 uint32 unknown_2; /* 0x0000 0000 */
281 /* REG_R_CREATE_KEY */
282 typedef struct r_reg_create_key_info
284 POLICY_HND key_pol; /* policy handle */
285 uint32 unknown; /* 0x0000 0000 */
287 NTSTATUS status; /* return status */
291 /* REG_Q_DELETE_KEY */
292 typedef struct q_reg_delete_key_info
294 POLICY_HND pnt_pol; /* parent key policy handle */
300 /* REG_R_DELETE_KEY */
301 typedef struct r_reg_delete_key_info
303 POLICY_HND key_pol; /* policy handle */
305 NTSTATUS status; /* return status */
309 /* REG_Q_DELETE_VALUE */
310 typedef struct q_reg_delete_val_info
312 POLICY_HND pnt_pol; /* parent key policy handle */
317 } REG_Q_DELETE_VALUE;
319 /* REG_R_DELETE_VALUE */
320 typedef struct r_reg_delete_val_info
322 POLICY_HND key_pol; /* policy handle */
324 NTSTATUS status; /* return status */
326 } REG_R_DELETE_VALUE;
328 /* REG_Q_QUERY_KEY */
329 typedef struct q_reg_query_info
331 POLICY_HND pol; /* policy handle */
337 /* REG_R_QUERY_KEY */
338 typedef struct r_reg_query_key_info
344 uint32 max_subkeylen;
345 uint32 max_subkeysize; /* 0x0000 0000 */
347 uint32 max_valnamelen;
348 uint32 max_valbufsize;
349 uint32 sec_desc; /* 0x0000 0078 */
350 NTTIME mod_time; /* modified time */
352 NTSTATUS status; /* return status */
358 typedef struct q_reg_unk_1a_info
360 POLICY_HND pol; /* policy handle */
365 typedef struct r_reg_unk_1a_info
367 uint32 unknown; /* 0x0500 0000 */
368 NTSTATUS status; /* return status */
374 typedef struct reg_q_close_info
376 POLICY_HND pol; /* policy handle */
381 typedef struct reg_r_close_info
383 POLICY_HND pol; /* policy handle. should be all zeros. */
385 NTSTATUS status; /* return code */
391 typedef struct q_reg_enum_value_info
393 POLICY_HND pol; /* policy handle */
397 uint16 key_name_len; /* 0x0000 */
398 uint16 unknown_1; /* 0x0414 */
400 uint32 ptr1; /* pointer */
401 uint32 unknown_2; /* 0x0000 020A */
402 uint8 pad1[8]; /* padding - zeros */
404 uint32 ptr2; /* pointer */
405 uint8 pad2[8]; /* padding - zeros */
407 uint32 ptr3; /* pointer */
408 NTTIME time; /* current time? */
413 typedef struct r_reg_enum_key_info
415 uint16 key_name_len; /* number of bytes in key name */
416 uint16 unknown_1; /* 0x0414 - matches with query unknown_1 */
418 uint32 ptr1; /* pointer */
419 uint32 unknown_2; /* 0x0000 020A */
420 uint32 unknown_3; /* 0x0000 0000 */
424 uint32 ptr2; /* pointer */
425 uint8 pad2[8]; /* padding - zeros */
427 uint32 ptr3; /* pointer */
428 NTTIME time; /* current time? */
430 NTSTATUS status; /* return status */
436 typedef struct q_reg_info_info
438 POLICY_HND pol; /* policy handle */
440 UNIHDR hdr_type; /* unicode product type header */
441 UNISTR2 uni_type; /* unicode product type - "ProductType" */
443 uint32 ptr_reserved; /* pointer */
445 uint32 ptr_buf; /* the next three fields follow if ptr_buf != 0 */
460 typedef struct r_reg_info_info
462 uint32 ptr_type; /* key type pointer */
463 uint32 type; /* key datatype */
465 uint32 ptr_uni_val; /* key value pointer */
466 BUFFER2 *uni_val; /* key value */
474 NTSTATUS status; /* return status */
479 /* REG_Q_OPEN_ENTRY */
480 typedef struct q_reg_open_entry_info
482 POLICY_HND pol; /* policy handle */
484 UNIHDR hdr_name; /* unicode registry string header */
485 UNISTR2 uni_name; /* unicode registry string name */
487 uint32 unknown_0; /* 32 bit unknown - 0x0000 0000 */
488 uint32 unknown_1; /* 32 bit unknown - 0x0200 0000 */
494 /* REG_R_OPEN_ENTRY */
495 typedef struct r_reg_open_entry_info
497 POLICY_HND pol; /* policy handle */
498 NTSTATUS status; /* return status */
503 typedef struct q_reg_shutdown_info
508 UNIHDR hdr_msg; /* shutdown message */
509 UNISTR2 uni_msg; /* seconds */
510 uint32 timeout; /* seconds */
516 typedef struct r_reg_shutdown_info
518 NTSTATUS status; /* return status */
522 /* REG_Q_ABORT_SHUTDOWN */
523 typedef struct q_reg_abort_shutdown_info
528 } REG_Q_ABORT_SHUTDOWN;
530 /* REG_R_ABORT_SHUTDOWN */
531 typedef struct r_reg_abort_shutdown_info
533 NTSTATUS status; /* return status */
535 } REG_R_ABORT_SHUTDOWN;
538 #endif /* _RPC_REG_H */