2 // Microsoft.Win32/Win32RegistryApi.cs: wrapper for win32 registry API
5 // Erik LeBel (eriklebel@yahoo.ca)
6 // Jackson Harper (jackson@ximian.com)
8 // Copyright (C) Erik LeBel 2004
9 // (C) 2004 Novell, Inc (http://www.novell.com)
13 using System.Runtime.InteropServices;
16 namespace Microsoft.Win32
19 /// Function stubs, constants and helper functions for
20 /// the Win32 registry manipulation utilities.
22 internal class Win32RegistryApi : IRegistryApi
24 // bit masks for registry key open access permissions
25 public int OpenRegKeyRead {
26 get { return 0x00020019; }
29 public int OpenRegKeyWrite {
30 get { return 0x00020006; }
33 // type values for registry value data
34 public int RegStringType {
38 public int RegEnvironmentString {
42 public int RegBinaryType {
46 public int RegDwordType {
50 public int RegStringArrayType {
55 /// Create a registry key.
57 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
58 private static extern int RegCreateKey_Internal (IntPtr keyBase,
59 string keyName, out IntPtr keyHandle);
61 public int RegCreateKey (IntPtr keybase, string keyname, out IntPtr handle)
63 return RegCreateKey_Internal (keybase, keyname, out handle);
67 /// Close a registry key.
69 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
70 private static extern int RegCloseKey_Internal (IntPtr keyHandle);
72 public int RegCloseKey (IntPtr handle)
74 return RegCloseKey_Internal (handle);
78 /// Flush a registry key's current state to disk.
80 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
81 private static extern int RegFlushKey_Internal (IntPtr keyHandle);
83 public int RegFlushKey (IntPtr handle)
85 return RegFlushKey_Internal (handle);
89 /// Open a registry key.
90 /// 'unknown' must be zero.
92 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
93 private static extern int RegOpenKeyEx_Internal (IntPtr keyBase,
94 string keyName, IntPtr reserved, int access,
95 out IntPtr keyHandle);
97 public int RegOpenKeyEx (IntPtr keybase, string keyname, IntPtr reserved,
98 int access, out IntPtr handle)
100 return RegOpenKeyEx_Internal (keybase, keyname, reserved, access, out handle);
104 /// Delete a registry key.
106 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
107 private static extern int RegDeleteKey_Internal (IntPtr keyHandle,
110 public int RegDeleteKey (IntPtr handle, string valuename)
112 return RegDeleteKey_Internal (handle, valuename);
116 /// Delete a registry value.
118 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
119 private static extern int RegDeleteValue_Internal (IntPtr keyHandle,
122 public int RegDeleteValue (IntPtr handle, string valuename)
124 return RegDeleteValue_Internal (handle, valuename);
128 /// Fetch registry key subkeys itteratively.
130 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
131 private static extern int RegEnumKey_Internal (IntPtr keyBase, int index,
132 [Out] byte[] nameBuffer, int bufferLength);
134 public int RegEnumKey (IntPtr keybase, int index,
135 [Out] byte [] namebuffer, int buffer_length)
137 return RegEnumKey_Internal (keybase, index, namebuffer, buffer_length);
141 /// Fetch registry key value names itteratively.
143 /// Arguments 'reserved', 'data', 'dataLength'
144 /// should be set to IntPtr.Zero.
146 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
147 private static extern int RegEnumValue_Internal (IntPtr keyBase,
148 int index, StringBuilder nameBuffer,
149 ref int nameLength, IntPtr reserved,
150 ref int type, IntPtr data, IntPtr dataLength);
152 public int RegEnumValue (IntPtr keybase, int index, StringBuilder namebuffer,
153 ref int namelength, IntPtr reserved, ref int type, IntPtr data,
156 return RegEnumValue_Internal (keybase, index, namebuffer, ref namelength,
157 reserved, ref type, data, datalength);
161 /// Set a registry value with string builder data.
163 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
164 private static extern int RegSetValueEx_Internal (IntPtr keyBase,
165 string valueName, IntPtr reserved, int type,
166 StringBuilder data, int rawDataLength);
168 public int RegSetValueEx (IntPtr keybase, string valuename, IntPtr reserved,
169 int type, StringBuilder data, int datalength)
171 return RegSetValueEx_Internal (keybase, valuename, reserved,
172 type, data, datalength);
176 /// Set a registry value with string data.
178 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
179 private static extern int RegSetValueEx_Internal (IntPtr keyBase,
180 string valueName, IntPtr reserved, int type,
181 string data, int rawDataLength);
183 public int RegSetValueEx (IntPtr keybase, string valuename, IntPtr reserved,
184 int type, string data, int datalength)
186 return RegSetValueEx_Internal (keybase, valuename, reserved,
187 type, data, datalength);
191 /// Set a registry value with binary data (a byte array).
193 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
194 private static extern int RegSetValueEx_Internal (IntPtr keyBase,
195 string valueName, IntPtr reserved, int type,
196 byte[] rawData, int rawDataLength);
198 public int RegSetValueEx (IntPtr keybase, string valuename, IntPtr reserved,
199 int type, byte [] data, int datalength)
201 return RegSetValueEx_Internal (keybase, valuename, reserved,
202 type, data, datalength);
206 /// Set a registry value to a DWORD value.
208 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
209 private static extern int RegSetValueEx_Internal (IntPtr keyBase,
210 string valueName, IntPtr reserved, int type,
211 ref int data, int rawDataLength);
213 public int RegSetValueEx (IntPtr keybase, string valuename, IntPtr reserved,
214 int type, ref int data, int datalength)
216 return RegSetValueEx_Internal (keybase, valuename, reserved, type,
217 ref data, datalength);
221 /// Get a registry value's info. No data.
223 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
224 private static extern int RegQueryValueEx_Internal (IntPtr keyBase,
225 string valueName, IntPtr reserved, ref int type,
226 IntPtr zero, ref int dataSize);
228 public int RegQueryValueEx (IntPtr keybase, string valuename, IntPtr reserved,
229 ref int type, IntPtr zero, ref int datasize)
231 return RegQueryValueEx_Internal (keybase, valuename, reserved,
232 ref type, zero, ref datasize);
236 /// Get a registry value. Binary data.
238 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
239 private static extern int RegQueryValueEx_Internal (IntPtr keyBase,
240 string valueName, IntPtr reserved, ref int type,
241 [Out] byte[] data, ref int dataSize);
243 public int RegQueryValueEx (IntPtr keybase, string valuename, IntPtr reserved,
244 ref int type, [Out] byte [] data, ref int datasize)
246 return RegQueryValueEx_Internal (keybase, valuename, reserved,
247 ref type, data, ref datasize);
251 /// Get a registry value. DWORD data.
253 [DllImport ("advapi32.dll", CharSet=CharSet.Unicode)]
254 private static extern int RegQueryValueEx_Internal (IntPtr keyBase,
255 string valueName, IntPtr reserved, ref int type,
256 ref int data, ref int dataSize);
258 public int RegQueryValueEx (IntPtr keybase, string valuename, IntPtr reserved,
259 ref int type, ref int data, ref int datasize)
261 return RegQueryValueEx_Internal (keybase, valuename, reserved,
262 ref type, ref data, ref datasize);