レジストリキーに値を設定するこのP/InvokeRegSetValueExWがあります。C#で
[DllImport("coredll.dll", EntryPoint = "RegSetValueExW")]
public static extern int RegSetValueExW(uint hKey, string lpValueName,
uint lpReserved,
uint lpType,
byte[] lpData,
uint lpcbData);
4番目のparambyte[]lpdataに問題があります。値が5(int)のDWORDを渡す必要があります。文字列(REG_SZ)を渡せば、すべて問題ありません。GetBytes関数を使用して変換する必要があります。
GetBytes( "5")を呼び出すと、ASCII値53に変換されるため、レジストリ値に5ではなく53が書き込まれます。