r6303: Setting up for 3.0.15pre1
[Samba.git] / source / include / rpc_reg.h
blobf70fb5f03cf218412ad3c82f140fa3c3ae16bb3d
1 /*
2 Unix SMB/CIFS implementation.
3 SMB parameters and setup
4 Copyright (C) Andrew Tridgell 1992-1997.
5 Copyright (C) Luke Kenneth Casson Leighton 1996-1997.
6 Copyright (C) Paul Ashton 1997.
7 Copyright (C) Jeremy Cooper 2004.
8 Copyright (C) Gerald Carter 2002-2005.
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 #ifndef _RPC_REG_H /* _RPC_REG_H */
26 #define _RPC_REG_H
28 /* RPC opnum */
30 #define REG_OPEN_HKCR 0x00
31 #define REG_OPEN_HKLM 0x02
32 #define REG_OPEN_HKPD 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_OPEN_ENTRY 0x0f
43 #define REG_QUERY_KEY 0x10
44 #define REG_INFO 0x11
45 #define REG_RESTORE_KEY 0x13
46 #define REG_SAVE_KEY 0x14
47 #define REG_SET_KEY_SEC 0x15
48 #define REG_SET_VALUE 0x16
49 #define REG_SHUTDOWN 0x18
50 #define REG_ABORT_SHUTDOWN 0x19
51 #define REG_GETVERSION 0x1a
52 #define REG_SHUTDOWN_EX 0x1e
55 #define HKEY_CLASSES_ROOT 0x80000000
56 #define HKEY_CURRENT_USER 0x80000001
57 #define HKEY_LOCAL_MACHINE 0x80000002
58 #define HKEY_USERS 0x80000003
59 #define HKEY_PERFORMANCE_DATA 0x80000004
61 #define KEY_HKLM "HKLM"
62 #define KEY_HKU "HKU"
63 #define KEY_HKCR "HKCR"
64 #define KEY_PRINTING "HKLM\\SYSTEM\\CurrentControlSet\\Control\\Print"
65 #define KEY_EVENTLOG "HKLM\\SYSTEM\\CurrentControlSet\\Services\\Eventlog"
66 #define KEY_TREE_ROOT ""
68 /* Registry data types */
70 #define REG_NONE 0
71 #define REG_SZ 1
72 #define REG_EXPAND_SZ 2
73 #define REG_BINARY 3
74 #define REG_DWORD 4
75 #define REG_DWORD_LE 4 /* DWORD, little endian */
76 #define REG_DWORD_BE 5 /* DWORD, big endian */
77 #define REG_LINK 6
78 #define REG_MULTI_SZ 7
79 #define REG_RESOURCE_LIST 8
80 #define REG_FULL_RESOURCE_DESCRIPTOR 9
81 #define REG_RESOURCE_REQUIREMENTS_LIST 10
84 * INTERNAL REGISTRY STRUCTURES
87 /* structure to contain registry values */
89 typedef struct {
90 fstring valuename;
91 uint16 type;
92 uint32 size; /* in bytes */
93 uint8 *data_p;
94 } REGISTRY_VALUE;
96 /* container for registry values */
98 typedef struct {
99 TALLOC_CTX *ctx;
100 uint32 num_values;
101 REGISTRY_VALUE **values;
102 } REGVAL_CTR;
104 /* container for registry subkey names */
106 typedef struct {
107 TALLOC_CTX *ctx;
108 uint32 num_subkeys;
109 char **subkeys;
110 } REGSUBKEY_CTR;
114 * container for function pointers to enumeration routines
115 * for vitural registry view
118 typedef struct {
119 /* functions for enumerating subkeys and values */
120 int (*subkey_fn)( char *key, REGSUBKEY_CTR *subkeys);
121 int (*value_fn) ( char *key, REGVAL_CTR *val );
122 BOOL (*store_subkeys_fn)( char *key, REGSUBKEY_CTR *subkeys );
123 BOOL (*store_values_fn)( char *key, REGVAL_CTR *val );
124 } REGISTRY_OPS;
126 typedef struct {
127 const char *keyname; /* full path to name of key */
128 REGISTRY_OPS *ops; /* registry function hooks */
129 } REGISTRY_HOOK;
133 /* structure to store the registry handles */
135 typedef struct _RegistryKey {
137 struct _RegistryKey *prev, *next;
139 POLICY_HND hnd;
140 pstring name; /* full name of registry key */
141 REGISTRY_HOOK *hook;
143 } REGISTRY_KEY;
146 * RPC REGISTRY STRUCTURES
149 /***********************************************/
151 typedef struct {
152 uint16 *server;
153 uint32 access;
154 } REG_Q_OPEN_HIVE;
156 typedef struct {
157 POLICY_HND pol;
158 WERROR status;
159 } REG_R_OPEN_HIVE;
162 /***********************************************/
164 typedef struct {
165 POLICY_HND pol;
166 } REG_Q_FLUSH_KEY;
168 typedef struct {
169 WERROR status;
170 } REG_R_FLUSH_KEY;
173 /***********************************************/
175 typedef struct {
176 POLICY_HND pol;
177 uint32 sec_info;
178 uint32 ptr;
179 BUFHDR hdr_sec;
180 SEC_DESC_BUF *data;
181 } REG_Q_SET_KEY_SEC;
183 typedef struct {
184 WERROR status;
185 } REG_R_SET_KEY_SEC;
188 /***********************************************/
190 typedef struct {
191 POLICY_HND pol;
192 uint32 sec_info;
193 uint32 ptr;
194 BUFHDR hdr_sec;
195 SEC_DESC_BUF *data;
196 } REG_Q_GET_KEY_SEC;
198 typedef struct {
199 uint32 sec_info;
200 uint32 ptr;
201 BUFHDR hdr_sec;
202 SEC_DESC_BUF *data;
203 WERROR status;
204 } REG_R_GET_KEY_SEC;
206 /***********************************************/
208 typedef struct {
209 POLICY_HND pol;
210 UNISTR4 name;
211 uint32 type;
212 RPC_DATA_BLOB value;
213 uint32 size;
214 } REG_Q_SET_VALUE;
216 typedef struct {
217 WERROR status;
218 } REG_R_SET_VALUE;
220 /***********************************************/
222 typedef struct {
223 POLICY_HND pol;
224 uint32 val_index;
225 UNISTR4 name;
226 uint32 *type;
227 REGVAL_BUFFER *value; /* value, in byte buffer */
228 uint32 *len_value1;
229 uint32 *len_value2;
230 } REG_Q_ENUM_VALUE;
232 typedef struct {
233 UNISTR4 name;
234 uint32 *type;
235 REGVAL_BUFFER *value;
236 uint32 *len_value1;
237 uint32 *len_value2;
238 WERROR status;
239 } REG_R_ENUM_VALUE;
241 /***********************************************/
243 typedef struct {
244 POLICY_HND pnt_pol;
245 UNISTR4 name;
246 UNISTR4 class;
247 uint32 reserved;
248 uint32 access;
249 uint32 *sec_info;
250 uint32 ptr2;
251 BUFHDR hdr_sec;
252 uint32 ptr3;
253 SEC_DESC_BUF *data;
254 uint32 unknown_2; /* 0x0000 0000 */
255 } REG_Q_CREATE_KEY;
257 typedef struct {
258 POLICY_HND key_pol;
259 uint32 unknown;
260 WERROR status;
261 } REG_R_CREATE_KEY;
263 /***********************************************/
265 typedef struct {
266 POLICY_HND pnt_pol;
267 UNISTR4 name;
268 } REG_Q_DELETE_KEY;
270 typedef struct {
271 POLICY_HND key_pol;
272 WERROR status;
273 } REG_R_DELETE_KEY;
275 /***********************************************/
277 typedef struct {
278 POLICY_HND pnt_pol;
279 UNISTR4 name;
280 } REG_Q_DELETE_VALUE;
282 typedef struct {
283 POLICY_HND key_pol;
284 WERROR status;
285 } REG_R_DELETE_VALUE;
287 /***********************************************/
289 typedef struct {
290 POLICY_HND pol;
291 UNISTR4 class;
292 } REG_Q_QUERY_KEY;
294 typedef struct {
295 UNISTR4 class;
296 uint32 num_subkeys;
297 uint32 max_subkeylen;
298 uint32 reserved; /* 0x0000 0000 - according to MSDN (max_subkeysize?) */
299 uint32 num_values;
300 uint32 max_valnamelen;
301 uint32 max_valbufsize;
302 uint32 sec_desc; /* 0x0000 0078 */
303 NTTIME mod_time; /* modified time */
304 WERROR status;
305 } REG_R_QUERY_KEY;
308 /***********************************************/
310 typedef struct {
311 POLICY_HND pol; /* policy handle */
312 } REG_Q_GETVERSION;
314 typedef struct {
315 uint32 unknown; /* 0x0500 0000 */
316 WERROR status; /* return status */
317 } REG_R_GETVERSION;
320 /***********************************************/
322 typedef struct {
323 POLICY_HND pol;
324 UNISTR4 filename;
325 uint32 flags;
326 } REG_Q_RESTORE_KEY;
328 typedef struct {
329 WERROR status; /* return status */
330 } REG_R_RESTORE_KEY;
333 /***********************************************/
336 /* I have no idea if this is correct since I
337 have not seen the full structure on the wire
338 as of yet */
340 typedef struct {
341 uint32 max_len;
342 uint32 len;
343 SEC_DESC *secdesc;
344 } REG_SEC_DESC_BUF;
346 typedef struct {
347 uint32 size; /* size in bytes of security descriptor */
348 REG_SEC_DESC_BUF secdesc;
349 uint8 inherit; /* see MSDN for a description */
350 } SECURITY_ATTRIBUTE;
352 typedef struct {
353 POLICY_HND pol;
354 UNISTR4 filename;
355 SECURITY_ATTRIBUTE *sec_attr;
356 } REG_Q_SAVE_KEY;
358 typedef struct {
359 WERROR status; /* return status */
360 } REG_R_SAVE_KEY;
363 /***********************************************/
365 typedef struct {
366 POLICY_HND pol; /* policy handle */
367 } REG_Q_CLOSE;
369 typedef struct {
370 POLICY_HND pol;
371 WERROR status;
372 } REG_R_CLOSE;
375 /***********************************************/
377 typedef struct {
378 POLICY_HND pol;
379 uint32 key_index;
380 uint16 key_name_len; /* 0x0000 */
381 uint16 unknown_1; /* 0x0414 */
382 uint32 ptr1; /* pointer */
383 uint32 unknown_2; /* 0x0000 020A */
384 uint8 pad1[8]; /* padding - zeros */
385 uint32 ptr2; /* pointer */
386 uint8 pad2[8]; /* padding - zeros */
387 uint32 ptr3; /* pointer */
388 NTTIME time; /* current time? */
389 } REG_Q_ENUM_KEY;
391 typedef struct {
392 uint16 key_name_len; /* number of bytes in key name */
393 uint16 unknown_1; /* 0x0414 - matches with query unknown_1 */
395 uint32 ptr1; /* pointer */
396 uint32 unknown_2; /* 0x0000 020A */
397 uint32 unknown_3; /* 0x0000 0000 */
399 UNISTR3 key_name;
401 uint32 ptr2; /* pointer */
402 uint8 pad2[8]; /* padding - zeros */
404 uint32 ptr3; /* pointer */
405 NTTIME time; /* current time? */
407 WERROR status; /* return status */
408 } REG_R_ENUM_KEY;
411 /***********************************************/
413 typedef struct {
414 POLICY_HND pol; /* policy handle */
415 UNISTR4 name;
417 uint32 ptr_reserved; /* pointer */
419 uint32 ptr_buf; /* the next three fields follow if ptr_buf != 0 */
420 uint32 ptr_bufsize;
421 uint32 bufsize;
422 uint32 buf_unk;
424 uint32 unk1;
425 uint32 ptr_buflen;
426 uint32 buflen;
428 uint32 ptr_buflen2;
429 uint32 buflen2;
431 } REG_Q_INFO;
433 typedef struct {
434 uint32 *type;
435 REGVAL_BUFFER *value; /* key value */
436 uint32 *buf_max_len;
437 uint32 *buf_len;
438 WERROR status; /* return status */
439 } REG_R_INFO;
442 /***********************************************/
444 typedef struct {
445 POLICY_HND pol;
446 UNISTR4 name;
447 uint32 unknown_0; /* 32 bit unknown - 0x0000 0000 */
448 uint32 access;
449 } REG_Q_OPEN_ENTRY;
451 typedef struct {
452 POLICY_HND pol;
453 WERROR status;
454 } REG_R_OPEN_ENTRY;
456 /***********************************************/
458 typedef struct {
459 uint16 *server;
460 UNISTR4 *message;
461 uint32 timeout; /* in seconds */
462 uint8 force; /* boolean: force shutdown */
463 uint8 reboot; /* boolean: reboot on shutdown */
464 } REG_Q_SHUTDOWN;
466 typedef struct {
467 WERROR status; /* return status */
468 } REG_R_SHUTDOWN;
470 /***********************************************/
472 typedef struct {
473 uint16 *server;
474 UNISTR4 *message;
475 uint32 timeout; /* in seconds */
476 uint8 force; /* boolean: force shutdown */
477 uint8 reboot; /* boolean: reboot on shutdown */
478 uint32 reason; /* reason - must be defined code */
479 } REG_Q_SHUTDOWN_EX;
481 typedef struct {
482 WERROR status;
483 } REG_R_SHUTDOWN_EX;
485 /***********************************************/
487 typedef struct {
488 uint16 *server;
489 } REG_Q_ABORT_SHUTDOWN;
491 typedef struct {
492 WERROR status;
493 } REG_R_ABORT_SHUTDOWN;
496 #endif /* _RPC_REG_H */