//
// Microsoft.Win32/Win32RegistryApi.cs: wrapper for win32 registry API
//
// Authos:
// Erik LeBel (eriklebel@yahoo.ca)
// Jackson Harper (jackson@ximian.com)
//
// Copyright (C) Erik LeBel 2004
// (C) 2004 Novell, Inc (http://www.novell.com)
//
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace Microsoft.Win32
{
///
/// Function stubs, constants and helper functions for
/// the Win32 registry manipulation utilities.
///
internal class Win32RegistryApi : IRegistryApi
{
// bit masks for registry key open access permissions
public int OpenRegKeyRead {
get { return 0x00020019; }
}
public int OpenRegKeyWrite {
get { return 0x00020006; }
}
// type values for registry value data
public int RegStringType {
get { return 1; }
}
public int RegEnvironmentString {
get { return 2; }
}
public int RegBinaryType {
get { return 3; }
}
public int RegDwordType {
get { return 4; }
}
public int RegStringArrayType {
get { return 7; }
}
///
/// Create a registry key.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegCreateKey")]
private static extern int RegCreateKey_Internal (IntPtr keyBase,
string keyName, out IntPtr keyHandle);
public int RegCreateKey (IntPtr keybase, string keyname, out IntPtr handle)
{
return RegCreateKey_Internal (keybase, keyname, out handle);
}
///
/// Close a registry key.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegCloseKey")]
private static extern int RegCloseKey_Internal (IntPtr keyHandle);
public int RegCloseKey (IntPtr handle)
{
return RegCloseKey_Internal (handle);
}
///
/// Flush a registry key's current state to disk.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegFlushKey")]
private static extern int RegFlushKey_Internal (IntPtr keyHandle);
public int RegFlushKey (IntPtr handle)
{
return RegFlushKey_Internal (handle);
}
///
/// Open a registry key.
/// 'unknown' must be zero.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegopenKeyEx")]
private static extern int RegOpenKeyEx_Internal (IntPtr keyBase,
string keyName, IntPtr reserved, int access,
out IntPtr keyHandle);
public int RegOpenKeyEx (IntPtr keybase, string keyname, IntPtr reserved,
int access, out IntPtr handle)
{
return RegOpenKeyEx_Internal (keybase, keyname, reserved, access, out handle);
}
///
/// Delete a registry key.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegDeleteKey")]
private static extern int RegDeleteKey_Internal (IntPtr keyHandle,
string valueName);
public int RegDeleteKey (IntPtr handle, string valuename)
{
return RegDeleteKey_Internal (handle, valuename);
}
///
/// Delete a registry value.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegDeleteValue")]
private static extern int RegDeleteValue_Internal (IntPtr keyHandle,
string valueName);
public int RegDeleteValue (IntPtr handle, string valuename)
{
return RegDeleteValue_Internal (handle, valuename);
}
///
/// Fetch registry key subkeys itteratively.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegEnumKey")]
private static extern int RegEnumKey_Internal (IntPtr keyBase, int index,
[Out] byte[] nameBuffer, int bufferLength);
public int RegEnumKey (IntPtr keybase, int index,
[Out] byte [] namebuffer, int buffer_length)
{
return RegEnumKey_Internal (keybase, index, namebuffer, buffer_length);
}
///
/// Fetch registry key value names itteratively.
///
/// Arguments 'reserved', 'data', 'dataLength'
/// should be set to IntPtr.Zero.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegEnumValue")]
private static extern int RegEnumValue_Internal (IntPtr keyBase,
int index, StringBuilder nameBuffer,
ref int nameLength, IntPtr reserved,
ref int type, IntPtr data, IntPtr dataLength);
public int RegEnumValue (IntPtr keybase, int index, StringBuilder namebuffer,
ref int namelength, IntPtr reserved, ref int type, IntPtr data,
IntPtr datalength)
{
return RegEnumValue_Internal (keybase, index, namebuffer, ref namelength,
reserved, ref type, data, datalength);
}
///
/// Set a registry value with string builder data.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegSetValueEx")]
private static extern int RegSetValueEx_Internal (IntPtr keyBase,
string valueName, IntPtr reserved, int type,
StringBuilder data, int rawDataLength);
public int RegSetValueEx (IntPtr keybase, string valuename, IntPtr reserved,
int type, StringBuilder data, int datalength)
{
return RegSetValueEx_Internal (keybase, valuename, reserved,
type, data, datalength);
}
///
/// Set a registry value with string data.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegSetValueEx")]
private static extern int RegSetValueEx_Internal (IntPtr keyBase,
string valueName, IntPtr reserved, int type,
string data, int rawDataLength);
public int RegSetValueEx (IntPtr keybase, string valuename, IntPtr reserved,
int type, string data, int datalength)
{
return RegSetValueEx_Internal (keybase, valuename, reserved,
type, data, datalength);
}
///
/// Set a registry value with binary data (a byte array).
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegSetValueEx")]
private static extern int RegSetValueEx_Internal (IntPtr keyBase,
string valueName, IntPtr reserved, int type,
byte[] rawData, int rawDataLength);
public int RegSetValueEx (IntPtr keybase, string valuename, IntPtr reserved,
int type, byte [] data, int datalength)
{
return RegSetValueEx_Internal (keybase, valuename, reserved,
type, data, datalength);
}
///
/// Set a registry value to a DWORD value.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegSetValueEx")]
private static extern int RegSetValueEx_Internal (IntPtr keyBase,
string valueName, IntPtr reserved, int type,
ref int data, int rawDataLength);
public int RegSetValueEx (IntPtr keybase, string valuename, IntPtr reserved,
int type, ref int data, int datalength)
{
return RegSetValueEx_Internal (keybase, valuename, reserved, type,
ref data, datalength);
}
///
/// Get a registry value's info. No data.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegQueryValueEx")]
private static extern int RegQueryValueEx_Internal (IntPtr keyBase,
string valueName, IntPtr reserved, ref int type,
IntPtr zero, ref int dataSize);
public int RegQueryValueEx (IntPtr keybase, string valuename, IntPtr reserved,
ref int type, IntPtr zero, ref int datasize)
{
return RegQueryValueEx_Internal (keybase, valuename, reserved,
ref type, zero, ref datasize);
}
///
/// Get a registry value. Binary data.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegQueryValueEx")]
private static extern int RegQueryValueEx_Internal (IntPtr keyBase,
string valueName, IntPtr reserved, ref int type,
[Out] byte[] data, ref int dataSize);
public int RegQueryValueEx (IntPtr keybase, string valuename, IntPtr reserved,
ref int type, [Out] byte [] data, ref int datasize)
{
return RegQueryValueEx_Internal (keybase, valuename, reserved,
ref type, data, ref datasize);
}
///
/// Get a registry value. DWORD data.
///
[DllImport ("advapi32.dll", CharSet=CharSet.Unicode, EntryPoint="RegQueryValueEx")]
private static extern int RegQueryValueEx_Internal (IntPtr keyBase,
string valueName, IntPtr reserved, ref int type,
ref int data, ref int dataSize);
public int RegQueryValueEx (IntPtr keybase, string valuename, IntPtr reserved,
ref int type, ref int data, ref int datasize)
{
return RegQueryValueEx_Internal (keybase, valuename, reserved,
ref type, ref data, ref datasize);
}
}
}