[project,bus] Two commits: #inclusion and bus freeing
[people/sha0/winvblock.git] / src / include / registry.h
1 /**
2  * Copyright (C) 2009, Shao Miller <shao.miller@yrdsb.edu.on.ca>.
3  * Copyright 2006-2008, V.
4  * For WinAoE contact information, see http://winaoe.org/
5  *
6  * This file is part of WinVBlock, derived from WinAoE.
7  *
8  * WinVBlock is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * WinVBlock is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
20  */
21 #ifndef WV_M_REGISTRY_H_
22 #  define WV_M_REGISTRY_H_
23
24 /**
25  * @file
26  *
27  * Registry specifics
28  *
29  */
30
31 /**
32  * Note BOOT.INI-style OsLoadOptions from registry
33  *
34  * @v w_str_ptr         Pointer to pointer to wide-char string to hold options
35  * @ret ntstatus        NT status
36  *
37  * The caller must eventually free the wide-char string.
38  */
39 extern NTSTATUS registry__note_os_load_opts (
40   LPWSTR * w_str_ptr
41  );
42
43 /**
44  * Open registry key
45  *
46  * @v reg_key_name  Registry key name
47  * @v reg_key       Registry key to fill in
48  * @ret ntstatus    NT status
49  */
50 extern winvblock__lib_func NTSTATUS registry__open_key (
51   LPCWSTR reg_key_name,
52   PHANDLE reg_key
53  );
54
55 /**
56  * Close registry key
57  *
58  * @v reg_key   Registry key
59  */
60 extern winvblock__lib_func void registry__close_key (
61   HANDLE reg_key
62  );
63
64 /**
65  * Fetch registry key value information
66  *
67  * @v reg_key     Registry key
68  * @v value_name  Registry value name
69  * @v kvi         Key value information block to allocate and fill in
70  * @ret ntstatus  NT status
71  *
72  * The caller must eventually free the allocated key value information
73  * block.
74  */
75 extern winvblock__lib_func NTSTATUS registry__fetch_kvi (
76   HANDLE reg_key,
77   LPCWSTR value_name,
78   PKEY_VALUE_PARTIAL_INFORMATION * kvi
79  );
80
81 /**
82  * Fetch registry string value
83  *
84  * @v reg_key     Registry key
85  * @v value_name  Registry value name
86  * @v value       String value to allocate and fill in
87  * @ret ntstatus  NT status
88  *
89  * The caller must eventually free the allocated value.
90  */
91 extern winvblock__lib_func NTSTATUS registry__fetch_sz (
92   HANDLE reg_key,
93   LPCWSTR value_name,
94   LPWSTR * value
95  );
96
97 /**
98  * Fetch registry multiple-string value
99  *
100  * @v reg_key     Registry key
101  * @v value_name  Registry value name
102  * @v values      Array of string values to allocate and fill in
103  * @ret ntstatus  NT status
104  *
105  * The caller must eventually free the allocated values.
106  */
107 extern winvblock__lib_func NTSTATUS registry__fetch_multi_sz (
108   HANDLE reg_key,
109   LPCWSTR value_name,
110   LPWSTR ** values
111  );
112
113 /**
114  * Store registry string value
115  *
116  * @v reg_key     Registry key
117  * @v value_name  Registry value name
118  * @v value       String value to store
119  * @ret ntstatus  NT status
120  */
121 extern winvblock__lib_func NTSTATUS registry__store_sz (
122   HANDLE reg_key,
123   LPCWSTR value_name,
124   LPWSTR value
125  );
126
127 /**
128  * Store registry dword value
129  *
130  * @v reg_key     Registry key
131  * @v value_name  Registry value name
132  * @v value       String value to store, or NULL
133  * @ret ntstatus  NT status
134  */
135 extern winvblock__lib_func NTSTATUS registry__store_dword (
136   HANDLE reg_key,
137   LPCWSTR value_name,
138   winvblock__uint32 value
139  );
140
141 #endif  /* WV_M_REGISTRY_H_ */