merge from 2.2
[kai/samba.git] / source3 / include / rpc_reg.h
1 /* 
2    Unix SMB/Netbios implementation.
3    Version 1.9.
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
8    
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.
13    
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.
18    
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.
22 */
23
24 #ifndef _RPC_REG_H /* _RPC_REG_H */
25 #define _RPC_REG_H 
26
27
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
46 #define REG_INFO                0x11
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
56
57 #define HKEY_CLASSES_ROOT       0x80000000
58 #define HKEY_CURRENT_USER       0x80000001
59 #define HKEY_LOCAL_MACHINE      0x80000002
60 #define HKEY_USERS              0x80000003
61
62 #define REG_SZ          1
63 #define REG_BINARY      3
64 #define REG_DWORD       4
65 #define REG_MULTI_SZ    7
66
67 /* REG_Q_OPEN_HKCR   */
68 typedef struct q_reg_open_hkcr_info
69 {
70         uint32 ptr;
71         uint16 unknown_0; /* 0x5428      - 16 bit unknown */
72         uint16 unknown_1; /* random.  changes */
73         uint32 level;     /* 0x0000 0002 - 32 bit unknown */
74
75 } REG_Q_OPEN_HKCR  ;
76
77 /* REG_R_OPEN_HKCR   */
78 typedef struct r_reg_open_hkcr_info
79 {
80         POLICY_HND pol;       /* policy handle */
81         NTSTATUS status;         /* return status */
82
83 } REG_R_OPEN_HKCR;
84
85
86 /* REG_Q_OPEN_HKLM   */
87 typedef struct q_reg_open_hklm_info
88 {
89         uint32 ptr;
90         uint16 unknown_0;       /* 0xE084      - 16 bit unknown */
91         uint16 unknown_1;       /* random.  changes */
92         uint32 access_mask;     /* 0x0000 0002 - 32 bit unknown */
93
94 }
95 REG_Q_OPEN_HKLM;
96
97 /* REG_R_OPEN_HKLM   */
98 typedef struct r_reg_open_hklm_info
99 {
100         POLICY_HND pol;         /* policy handle */
101         NTSTATUS status;                /* return status */
102
103 }
104 REG_R_OPEN_HKLM;
105
106
107 /* REG_Q_OPEN_HKU */
108 typedef struct q_reg_open_hku_info
109 {
110         uint32 ptr;
111         uint16 unknown_0; /* 0xE084      - 16 bit unknown */
112         uint16 unknown_1; /* random.  changes */
113         uint32 level;     /* 0x0000 0002 - 32 bit unknown */
114
115 } REG_Q_OPEN_HKU;
116
117 /* REG_R_OPEN_HKU */
118 typedef struct r_reg_open_hku_info
119 {
120         POLICY_HND pol;       /* policy handle */
121         NTSTATUS status;         /* return status */
122
123 } REG_R_OPEN_HKU;
124
125
126 /* REG_Q_FLUSH_KEY */
127 typedef struct q_reg_open_flush_key_info
128 {
129         POLICY_HND pol;       /* policy handle */
130
131 } REG_Q_FLUSH_KEY;
132
133 /* REG_R_FLUSH_KEY */
134 typedef struct r_reg_open_flush_key_info
135 {
136         NTSTATUS status;         /* return status */
137
138 } REG_R_FLUSH_KEY;
139
140
141 /* REG_Q_SET_KEY_SEC */
142 typedef struct q_reg_set_key_sec_info
143 {
144         POLICY_HND pol;         /* policy handle */
145
146         uint32 sec_info;       /* xxxx_SECURITY_INFORMATION */
147
148         uint32 ptr;       /* pointer */
149         BUFHDR hdr_sec;    /* header for security data */
150         SEC_DESC_BUF *data;    /* security data */
151         
152 } REG_Q_SET_KEY_SEC;
153
154 /* REG_R_SET_KEY_SEC */
155 typedef struct r_reg_set_key_sec_info
156 {
157         NTSTATUS status;
158         
159 } REG_R_SET_KEY_SEC;
160
161
162 /* REG_Q_GET_KEY_SEC */
163 typedef struct q_reg_get_key_sec_info
164 {
165         POLICY_HND pol;         /* policy handle */
166
167         uint32 sec_info;       /* xxxx_SECURITY_INFORMATION */
168
169         uint32 ptr;       /* pointer */
170         BUFHDR hdr_sec;    /* header for security data */
171         SEC_DESC_BUF *data;    /* security data */
172         
173 } REG_Q_GET_KEY_SEC;
174
175 /* REG_R_GET_KEY_SEC */
176 typedef struct r_reg_get_key_sec_info
177 {
178         uint32 sec_info;       /* xxxx_SECURITY_INFORMATION */
179
180         uint32 ptr;       /* pointer */
181         BUFHDR hdr_sec;    /* header for security data */
182         SEC_DESC_BUF *data;    /* security data */
183
184         NTSTATUS status;
185         
186 } REG_R_GET_KEY_SEC;
187
188 /* REG_Q_CREATE_VALUE */
189 typedef struct q_reg_create_value_info
190 {
191         POLICY_HND pol;    /* policy handle */
192
193         UNIHDR hdr_name;   /* name of value */
194         UNISTR2 uni_name;
195
196         uint32 type;       /* 1 = UNISTR, 3 = BYTES, 4 = DWORD, 7 = MULTI_UNISTR */
197
198         BUFFER3 *buf_value; /* value, in byte buffer */
199
200 } REG_Q_CREATE_VALUE;
201
202 /* REG_R_CREATE_VALUE */
203 typedef struct r_reg_create_value_info
204
205         NTSTATUS status;         /* return status */
206
207 } REG_R_CREATE_VALUE;
208
209 /* REG_Q_ENUM_VALUE */
210 typedef struct q_reg_query_value_info
211 {
212         POLICY_HND pol;    /* policy handle */
213
214         uint32 val_index;  /* index */
215
216         UNIHDR hdr_name;   /* name of value */
217         UNISTR2 uni_name;
218
219         uint32 ptr_type;   /* pointer */
220         uint32 type;       /* 1 = UNISTR, 3 = BYTES, 4 = DWORD, 7 = MULTI_UNISTR */
221
222         uint32 ptr_value;  /* pointer */
223         BUFFER2 buf_value; /* value, in byte buffer */
224
225         uint32 ptr1;       /* pointer */
226         uint32 len_value1; /* */
227
228         uint32 ptr2;       /* pointer */
229         uint32 len_value2; /* */
230
231 } REG_Q_ENUM_VALUE;
232
233 /* REG_R_ENUM_VALUE */
234 typedef struct r_reg_enum_value_info
235
236         UNIHDR hdr_name;        /* name of value */
237         UNISTR2 uni_name;
238
239         uint32 ptr_type;            /* pointer */
240         uint32 type;        /* 1 = UNISTR, 3 = BYTES, 4 = DWORD, 7 = MULTI_UNISTR */
241
242         uint32 ptr_value;       /* pointer */
243         BUFFER2 *buf_value;    /* value, in byte buffer */
244
245         uint32 ptr1;            /* pointer */
246         uint32 len_value1;       /* */
247
248         uint32 ptr2;            /* pointer */
249         uint32 len_value2;       /* */
250
251         NTSTATUS status;         /* return status */
252
253 } REG_R_ENUM_VALUE;
254
255 /* REG_Q_CREATE_KEY */
256 typedef struct q_reg_create_key_info
257 {
258         POLICY_HND pnt_pol;       /* parent key policy handle */
259
260         UNIHDR hdr_name;
261         UNISTR2 uni_name;
262
263         UNIHDR hdr_class;
264         UNISTR2 uni_class;
265
266         uint32 reserved; /* 0x0000 0000 */
267         SEC_ACCESS sam_access; /* access rights flags, see rpc_secdes.h */
268
269         uint32 ptr1;
270         uint32 sec_info; /* xxxx_SECURITY_INFORMATION */
271
272         uint32 ptr2;       /* pointer */
273         BUFHDR hdr_sec;    /* header for security data */
274         uint32 ptr3;       /* pointer */
275         SEC_DESC_BUF *data;
276
277         uint32 unknown_2; /* 0x0000 0000 */
278
279 } REG_Q_CREATE_KEY;
280
281 /* REG_R_CREATE_KEY */
282 typedef struct r_reg_create_key_info
283 {
284         POLICY_HND key_pol;       /* policy handle */
285         uint32 unknown; /* 0x0000 0000 */
286
287         NTSTATUS status;         /* return status */
288
289 } REG_R_CREATE_KEY;
290
291 /* REG_Q_DELETE_KEY */
292 typedef struct q_reg_delete_key_info
293 {
294         POLICY_HND pnt_pol;       /* parent key policy handle */
295
296         UNIHDR hdr_name;
297         UNISTR2 uni_name;
298 } REG_Q_DELETE_KEY;
299
300 /* REG_R_DELETE_KEY */
301 typedef struct r_reg_delete_key_info
302 {
303         POLICY_HND key_pol;       /* policy handle */
304
305         NTSTATUS status;         /* return status */
306
307 } REG_R_DELETE_KEY;
308
309 /* REG_Q_DELETE_VALUE */
310 typedef struct q_reg_delete_val_info
311 {
312         POLICY_HND pnt_pol;       /* parent key policy handle */
313
314         UNIHDR hdr_name;
315         UNISTR2 uni_name;
316
317 } REG_Q_DELETE_VALUE;
318
319 /* REG_R_DELETE_VALUE */
320 typedef struct r_reg_delete_val_info
321 {
322         POLICY_HND key_pol;       /* policy handle */
323
324         NTSTATUS status;         /* return status */
325
326 } REG_R_DELETE_VALUE;
327
328 /* REG_Q_QUERY_KEY */
329 typedef struct q_reg_query_info
330 {
331         POLICY_HND pol;       /* policy handle */
332         UNIHDR hdr_class;
333         UNISTR2 uni_class;
334
335 } REG_Q_QUERY_KEY;
336
337 /* REG_R_QUERY_KEY */
338 typedef struct r_reg_query_key_info
339 {
340         UNIHDR hdr_class;
341         UNISTR2 uni_class;
342
343         uint32 num_subkeys;
344         uint32 max_subkeylen;
345         uint32 max_subkeysize; /* 0x0000 0000 */
346         uint32 num_values;
347         uint32 max_valnamelen;
348         uint32 max_valbufsize; 
349         uint32 sec_desc; /* 0x0000 0078 */
350         NTTIME mod_time;  /* modified time */
351
352         NTSTATUS status;         /* return status */
353
354 } REG_R_QUERY_KEY;
355
356
357 /* REG_Q_UNK_1A */
358 typedef struct q_reg_unk_1a_info
359 {
360         POLICY_HND pol;       /* policy handle */
361
362 } REG_Q_UNK_1A;
363
364 /* REG_R_UNK_1A */
365 typedef struct r_reg_unk_1a_info
366 {
367         uint32 unknown;         /* 0x0500 0000 */
368         NTSTATUS status;         /* return status */
369
370 } REG_R_UNK_1A;
371
372
373 /* REG_Q_CLOSE */
374 typedef struct reg_q_close_info
375 {
376         POLICY_HND pol; /* policy handle */
377
378 } REG_Q_CLOSE;
379
380 /* REG_R_CLOSE */
381 typedef struct reg_r_close_info
382 {
383         POLICY_HND pol; /* policy handle.  should be all zeros. */
384
385         NTSTATUS status; /* return code */
386
387 } REG_R_CLOSE;
388
389
390 /* REG_Q_ENUM_KEY */
391 typedef struct q_reg_enum_value_info
392 {
393         POLICY_HND pol;         /* policy handle */
394
395         uint32 key_index;       
396
397         uint16 key_name_len;    /* 0x0000 */
398         uint16 unknown_1;       /* 0x0414 */
399
400         uint32 ptr1;            /* pointer */
401         uint32 unknown_2;       /* 0x0000 020A */
402         uint8  pad1[8];         /* padding - zeros */
403
404         uint32 ptr2;            /* pointer */
405         uint8  pad2[8];         /* padding - zeros */
406
407         uint32 ptr3;            /* pointer */
408         NTTIME time;            /* current time? */
409
410 } REG_Q_ENUM_KEY;
411
412 /* REG_R_ENUM_KEY */
413 typedef struct r_reg_enum_key_info
414
415         uint16 key_name_len;    /* number of bytes in key name */
416         uint16 unknown_1;       /* 0x0414 - matches with query unknown_1 */
417
418         uint32 ptr1;            /* pointer */
419         uint32 unknown_2;       /* 0x0000 020A */
420         uint32 unknown_3;       /* 0x0000 0000 */
421
422         UNISTR3 key_name;
423
424         uint32 ptr2;            /* pointer */
425         uint8  pad2[8];         /* padding - zeros */
426
427         uint32 ptr3;            /* pointer */
428         NTTIME time;            /* current time? */
429
430         NTSTATUS status;         /* return status */
431
432 } REG_R_ENUM_KEY;
433
434
435 /* REG_Q_INFO */
436 typedef struct q_reg_info_info
437 {
438         POLICY_HND pol;         /* policy handle */
439
440         UNIHDR  hdr_type;       /* unicode product type header */
441         UNISTR2 uni_type;       /* unicode product type - "ProductType" */
442
443         uint32 ptr_reserved;    /* pointer */
444   
445         uint32 ptr_buf;         /* the next three fields follow if ptr_buf != 0 */
446         uint32 ptr_bufsize;
447         uint32 bufsize;
448         uint32 buf_unk;
449
450         uint32 unk1;
451         uint32 ptr_buflen;
452         uint32 buflen;
453   
454         uint32 ptr_buflen2;
455         uint32 buflen2;
456
457 } REG_Q_INFO;
458
459 /* REG_R_INFO */
460 typedef struct r_reg_info_info
461
462         uint32 ptr_type;        /* key type pointer */
463         uint32 type;            /* key datatype  */
464
465         uint32 ptr_uni_val;     /* key value pointer */
466         BUFFER2 *uni_val;       /* key value */
467
468         uint32 ptr_max_len;
469         uint32 buf_max_len;
470
471         uint32 ptr_len;
472         uint32 buf_len;
473   
474         NTSTATUS status;        /* return status */
475
476 } REG_R_INFO;
477
478
479 /* REG_Q_OPEN_ENTRY */
480 typedef struct q_reg_open_entry_info
481 {
482         POLICY_HND pol;        /* policy handle */
483
484         UNIHDR  hdr_name;       /* unicode registry string header */
485         UNISTR2 uni_name;       /* unicode registry string name */
486
487         uint32 unknown_0;       /* 32 bit unknown - 0x0000 0000 */
488         uint32 unknown_1;       /* 32 bit unknown - 0x0200 0000 */
489
490 } REG_Q_OPEN_ENTRY;
491
492
493
494 /* REG_R_OPEN_ENTRY */
495 typedef struct r_reg_open_entry_info
496 {
497         POLICY_HND pol;       /* policy handle */
498         NTSTATUS status;         /* return status */
499
500 } REG_R_OPEN_ENTRY;
501
502 /* REG_Q_SHUTDOWN */
503 typedef struct q_reg_shutdown_info
504 {
505         uint32 ptr_0;
506         uint32 ptr_1;
507         uint32 ptr_2;
508         UNIHDR hdr_msg;         /* shutdown message */
509         UNISTR2 uni_msg;        /* seconds */
510         uint32 timeout;         /* seconds */
511         uint16 flags;
512                 
513 } REG_Q_SHUTDOWN;
514
515 /* REG_R_SHUTDOWN */
516 typedef struct r_reg_shutdown_info
517 {
518         NTSTATUS status;                /* return status */
519
520 } REG_R_SHUTDOWN;
521
522 /* REG_Q_ABORT_SHUTDOWN */
523 typedef struct q_reg_abort_shutdown_info
524 {
525         uint32 ptr_server;
526         uint16 server;
527
528 } REG_Q_ABORT_SHUTDOWN;
529
530 /* REG_R_ABORT_SHUTDOWN */
531 typedef struct r_reg_abort_shutdown_info
532
533         NTSTATUS status; /* return status */
534
535 } REG_R_ABORT_SHUTDOWN;
536
537
538 #endif /* _RPC_REG_H */
539