RegCreateKeyEx (coredll)
Last changed: fabio_rodrigues@student-partners.com-62.28.79.25

.
Summary
Creates the specified key. If the key already exists in the registry, it is opened.

C# Signature:

[DllImport("coredll.dll")]
public static extern int RegCreateKeyEx(
   UIntPtr hKey, string lpSubKey, uint dwReserved, string lpClass,
   uint dwOptions, int samDesired, IntPtr lpSecurityAttributes,
   out IntPtr phkResult, out RegistryDispositionValue lpdwDisposition);

User-Defined Types:

[Flags]
enum RegistryDispositionValue : uint
{
   REG_CREATED_NEW_KEY     = 0x00000001,
   REG_OPENED_EXISTING_KEY = 0x00000002
}

Notes:

The .NET Compact Framework does not contain a HandleRef type, so it may be necessary to call GC.KeepAlive after calling this function if the calling class wraps the hKey parameter as an unmanaged resource.

Tips & Tricks:

C#:

public UIntPtr HKEY_CLASSES_ROOT = (UIntPtr)0x80000000;
public const int REG_OPTION_NON_VOLATILE = 0;
:::
int iResult;
IntPtr ipKey = IntPtr.Zero;
string strRegKeyPath;
int iDisposition;

iResult = RegCreateKeyEx(HKEY_CLASSES_ROOT, strRegKeyPath, 0,
   null, REG_OPTION_NON_VOLATILE, 0, IntPtr.Zero, out ipKey,
   out iDisposition);

// Z.F.Zeynal

public enum RootRegKeys : uint
    {
        HKEY_CLASSES_ROOT = 0x8000000,
        HKEY_CURRENT_USER = 0x80000001,
        HKEY_LOCAL_MACHINE = 0x80000002,
        HKEY_USERS = 0x80000003
    };

    public enum RegValueTypes
    {
        REG_DWORD = 4,
        REG_SZ = 1
    };
private uint CreateKey(RootRegKeys rrk, string Path)
        {
            uint nKey = 0;
            uint nDisposition =0;
            int rez = RegCreateKeyEx ((uint) rrk,Path,0,String.Empty,0,0,0,ref nKey,ref nDisposition);
            if (rez != 0) throw new Exception ("Can't create key");
            return nKey; //Key handle
        }


Alternative Managed API:

CF V2.0

Microsoft.Win32.Registry.LocalMachine.CreateSubKey(SubKey as string)

Documentation