CeRegSetValueEx (rapi)
Last changed: lwoodard@sstdevgroup.com-205.162.224.251

.
Summary
This function stores data in the value field of an open registry key. It can also set additional value and type information for the specified key.

C# Signature:

[DllImport("rapi.dll", CharSet=CharSet.Unicode)]
public static extern int CeRegSetValueEx(
    uint hKey,
    string lpValueName,
    int lpReserved,
    int dwType,
    byte[] lpData,
    int cbData);

User-Defined Types:

uint HKEY_CLASSES_ROOT = 0x80000000;
uint HKEY_CURRENT_USER = 0x80000001;
uint HKEY_LOCAL_MACHINE = 0x80000002;
uint HKEY_USERS = 0x80000003;

Notes:

function info on msdn at http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceactsy/html/cerefCeRegSetValueExRAPI.asp

Tips & Tricks:

Please add some!

Sample Code:

uint key;
uint ret = CeRegOpenKeyEx(HKEY_CURRENT_USER,"Software\\TestApp\\Settings",0,0x1,out key);

if(ret == 0)
{
    // we have to convert everything to byte arrays and add the null terminator ourselves because of
    // issues with pocket pc 2003 (worked fine with strings in 2000 and 2002)

    byte[] lpData = new byte[System.Text.Encoding.Unicode.GetByteCount(textValue) + 1];
    byte[] tmp = System.Text.Encoding.Unicode.GetBytes(textValue);
    for(int i = 0; i < tmp.Length; i++)
        lpData[i] = tmp[i];
    lpData[lpData.Length - 1] = Convert.ToByte('\0');
    CeRegSetValueEx(key,"thisVal",0, 1, lpData, lpData.Length + 1);
}

CeRegCloseKey(key);

Visual Basic

    Private Sub SaveValue(ByVal thisval As String, ByVal textvalue As String)
    'please check this code below
    Dim key As UInteger
    Dim ret As UInteger = CeRegOpenKeyEx(HKEY_CURRENT_USER, "Software\TestApp\Settings", 0, &H1, key)

    If ret = 0 Then
        ' we have to convert everything to byte arrays and add the null terminator ourselves because of
        ' issues with pocket pc 2003 (worked fine with strings in 2000 and 2002)

        Dim lpData As Byte() = New Byte(System.Text.Encoding.Unicode.GetByteCount(textvalue)) {}
        Dim tmp As Byte() = System.Text.Encoding.Unicode.GetBytes(textvalue)
        For i As Integer = 0 To tmp.Length - 1
        lpData(i) = tmp(i)
        Next
        lpData(lpData.Length - 1) = Convert.ToByte(ControlChars.NullChar)
        CeRegSetValueEx(key, thisval, 0, 1, lpData, lpData.Length + 1) '??
    End If

    CeRegCloseKey(key)

    End Sub

Alternative Managed API:

Documentation