Rumah pangkalan data tutorial mysql Accessing 64 bit registry from a 32 bit process

Accessing 64 bit registry from a 32 bit process

Jun 07, 2016 pm 03:49 PM
bit from pr registry

As you may know, Windows is virtualizing some parts of the registry under 64 bit. So if you try to open, for example, this key : “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90″, from a 32 bit C# application running on a 6

As you may know, Windows is virtualizing some parts of the registry under 64 bit.

So if you try to open, for example, this key : “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90″, from a 32 bit C# application running on a 64 bit system, you will be redirected to : “HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server\90″

Why ? Because Windows uses the Wow6432Node registry entry to present a separate view of HKEY_LOCAL_MACHINE\SOFTWARE for 32 bit applications that runs on a 64 bit systems.

If you want to explicitly open the 64 bit view of the registry, here is what you have to perform :

You are using VS 2010 and version 4.x of the .NET framework

It’s really simple, all you need to do is, instead of doing :

//Will redirect you to the 32 bit view

RegistryKey sqlsrvKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\90");

do the following :

RegistryKey localMachineX64View = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);

RegistryKey sqlsrvKey = localMachineX64View.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\90");


Prior versions of the .NET framework

For the prior versions of the framework, we have to use P/Invoke and call the function RegOpenKeyExW with parameter KEY_WOW64_64KEY

enum RegWow64Options

{

    None = 0,

    KEY_WOW64_64KEY = 0x0100,

    KEY_WOW64_32KEY = 0x0200

}

 

enum RegistryRights

{

    ReadKey = 131097,

    WriteKey = 131078

}

 

/// <summary></summary>

/// Open a registry key using the Wow64 node instead of the default 32-bit node.

///

/// <param name="parentKey">Parent key to the key to be opened.

/// <param name="subKeyName">Name of the key to be opened

/// <param name="writable">Whether or not this key is writable

/// <param name="options">32-bit node or 64-bit node

/// <returns></returns>

static RegistryKey _openSubKey(RegistryKey parentKey, string subKeyName, bool writable, RegWow64Options options)

{

    //Sanity check

    if (parentKey == null || _getRegistryKeyHandle(parentKey) == IntPtr.Zero)

    {

        return null;

    }

 

    //Set rights

    int rights = (int)RegistryRights.ReadKey;

    if (writable)

        rights = (int)RegistryRights.WriteKey;

 

    //Call the native function >.

    int subKeyHandle, result = RegOpenKeyEx(_getRegistryKeyHandle(parentKey), subKeyName, 0, rights | (int)options, out subKeyHandle);

 

    //If we errored, return null

    if (result != 0)

    {

        return null;

    }

 

    //Get the key represented by the pointer returned by RegOpenKeyEx

    RegistryKey subKey = _pointerToRegistryKey((IntPtr)subKeyHandle, writable, false);

    return subKey;

}

 

/// <summary></summary>

/// Get a pointer to a registry key.

///

/// <param name="registryKey">Registry key to obtain the pointer of.

/// <returns>Pointer to the given registry key.</returns>

static IntPtr _getRegistryKeyHandle(RegistryKey registryKey)

{

    //Get the type of the RegistryKey

    Type registryKeyType = typeof(RegistryKey);

    //Get the FieldInfo of the 'hkey' member of RegistryKey

    System.Reflection.FieldInfo fieldInfo =

    registryKeyType.GetField("hkey", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

 

    //Get the handle held by hkey

    SafeHandle handle = (SafeHandle)fieldInfo.GetValue(registryKey);

    //Get the unsafe handle

    IntPtr dangerousHandle = handle.DangerousGetHandle();

    return dangerousHandle;

}

 

/// <summary></summary>

/// Get a registry key from a pointer.

///

/// <param name="hKey">Pointer to the registry key

/// <param name="writable">Whether or not the key is writable.

/// <param name="ownsHandle">Whether or not we own the handle.

/// <returns>Registry key pointed to by the given pointer.</returns>

static RegistryKey _pointerToRegistryKey(IntPtr hKey, bool writable, bool ownsHandle)

{

    //Get the BindingFlags for private contructors

    System.Reflection.BindingFlags privateConstructors = System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic;

    //Get the Type for the SafeRegistryHandle

    Type safeRegistryHandleType = typeof(Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid).Assembly.GetType("Microsoft.Win32.SafeHandles.SafeRegistryHandle");

    //Get the array of types matching the args of the ctor we want

    Type[] safeRegistryHandleCtorTypes = new Type[] { typeof(IntPtr), typeof(bool) };

    //Get the constructorinfo for our object

    System.Reflection.ConstructorInfo safeRegistryHandleCtorInfo = safeRegistryHandleType.GetConstructor(

    privateConstructors, null, safeRegistryHandleCtorTypes, null);

    //Invoke the constructor, getting us a SafeRegistryHandle

    Object safeHandle = safeRegistryHandleCtorInfo.Invoke(new Object[] { hKey, ownsHandle });

 

    //Get the type of a RegistryKey

    Type registryKeyType = typeof(RegistryKey);

    //Get the array of types matching the args of the ctor we want

    Type[] registryKeyConstructorTypes = new Type[] { safeRegistryHandleType, typeof(bool) };

    //Get the constructorinfo for our object

    System.Reflection.ConstructorInfo registryKeyCtorInfo = registryKeyType.GetConstructor(

    privateConstructors, null, registryKeyConstructorTypes, null);

    //Invoke the constructor, getting us a RegistryKey

    RegistryKey resultKey = (RegistryKey)registryKeyCtorInfo.Invoke(new Object[] { safeHandle, writable });

    //return the resulting key

    return resultKey;

}

 

[DllImport("advapi32.dll", CharSet = CharSet.Auto)]

public static extern int RegOpenKeyEx(IntPtr hKey, string subKey, int ulOptions, int samDesired, out int phkResult);


Then we can open our registry key like this :

RegistryKey sqlsrvKey = _openSubKey(Registry.LocalMachine, @"SOFTWARE\Microsoft\Microsoft SQL Server\90", false, RegWow64Options.KEY_WOW64_64KEY);

As you can see, the framework 4 make our life easier.


Referenced from: http://dotnetgalactics.wordpress.com/2010/05/10/accessing-64-bit-registry-from-a-32-bit-process/

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah nama penuh PR? Apakah nama penuh PR? Aug 22, 2022 pm 03:53 PM

Nama penuh PR ialah "Adobe Premiere Pro"; PR ialah perisian penyuntingan video yang dibangunkan oleh Adobe. Ia mempunyai keserasian yang baik dan boleh bekerjasama dengan perisian lain yang dilancarkan oleh Adobe. Ia digunakan secara meluas dalam pengeluaran pengiklanan.

Bagaimana untuk menyelesaikan masalah apabila pr mempunyai trek audio tetapi tiada bunyi Bagaimana untuk menyelesaikan masalah apabila pr mempunyai trek audio tetapi tiada bunyi Jun 26, 2023 am 11:07 AM

PR mempunyai trek audio tetapi tiada bunyi Penyelesaian: 1. Dalam aplikasi PR, seret bahan ke dalam garis masa 2. Dalam menu edit, buka pilihan 3. Dalam tetingkap pilihan, buka bar item perkakasan audio cari Kotak pilihan output lalai; 4. Dalam kotak pilihan, cari pilihan pembesar suara dan klik butang OK 5. Kembali ke aplikasi PR, mainkannya dalam tetingkap pratonton video, dan bunyi akan disiarkan.

Apakah yang perlu saya lakukan jika jenis pemampatan fail pr tidak disokong? Apakah yang perlu saya lakukan jika jenis pemampatan fail pr tidak disokong? Mar 23, 2023 pm 03:12 PM

Sebab dan penyelesaian untuk jenis pemampatan fail PR yang tidak disokong: 1. Versi PR yang diperkemas telah menyelaraskan banyak pengekod video dan menggunakan versi penuh Premiere 2. Disebabkan oleh pengekodan video yang tidak teratur, anda boleh menggunakan kilang format untuk Menukar video ke format WMV.

1 bit sama dengan berapa banyak bait 1 bit sama dengan berapa banyak bait Mar 09, 2023 pm 03:11 PM

1 bit adalah sama dengan satu perlapan daripada bait. Dalam sistem nombor binari, setiap 0 atau 1 ialah bit (bit), dan bit ialah unit terkecil storan data setiap 8 bit (bit, disingkat b) membentuk bait (Byte), jadi "1 bait (; Bait) = 8 bit”. Dalam kebanyakan sistem komputer, bait ialah unit data panjang 8-bit (bit) Kebanyakan komputer menggunakan bait untuk mewakili aksara, nombor atau aksara lain.

Bagaimanakah sari kata PR muncul perkataan demi perkataan? Bagaimanakah sari kata PR muncul perkataan demi perkataan? Aug 11, 2023 am 10:04 AM

Kaedah untuk sarikata pr muncul secara verbatim: 1. Buat trek sari kata; 3. Laraskan tempohnya; sari kata; 7. Pratonton dan eksport video.

Apa yang perlu dilakukan jika terdapat ralat semasa menyusun video dalam PR Apa yang perlu dilakukan jika terdapat ralat semasa menyusun video dalam PR Mar 22, 2023 pm 01:59 PM

Penyelesaian kepada ralat semasa menyusun video dalam PR: 1. Buka perisian pasca pengeditan Premiere pada komputer, dan kemudian pilih "Umum" dalam bar menu kanan tetapan projek 2. Masukkan tetingkap tetapan umum Premiere dan pilih "Mercury only" Playback Engine Software" 3. Klik "Confirm" untuk menyelesaikan ralat semasa menyusun video dalam PR.

Apakah maksud PR? Apakah maksud PR? Aug 03, 2023 am 10:15 AM

PR, singkatan untuk Perhubungan Awam, ialah alat pengurusan organisasi penting yang direka untuk meningkatkan reputasi dan kepercayaan organisasi dengan mewujudkan dan mengekalkan hubungan baik. Ia memerlukan ketelusan, ketulenan dan konsistensi, sambil disepadukan rapat dengan media baharu dan sosial. Melalui amalan PR yang berkesan, organisasi boleh mendapat pengiktirafan dan sokongan yang lebih luas, meningkatkan daya saing dan keupayaan pembangunan mampan mereka.

Apakah yang perlu saya lakukan jika bahan PR tidak boleh diseret ke garis masa? Apakah yang perlu saya lakukan jika bahan PR tidak boleh diseret ke garis masa? Aug 10, 2023 pm 03:41 PM

Penyelesaian mengapa bahan PR tidak boleh diseret ke garis masa: 1. Format tidak serasi Anda perlu mengesahkan format yang disokong oleh bahan PR dan menukarnya kepada format yang disokong oleh perisian 2. Untuk isu hak cipta, gunakan bahan yang dibenarkan atau hubungi pemegang hak cipta Jika seseorang telah memperoleh lesen 3. Masalah perisian, kemas kini perisian atau gunakan perisian lain yang disokong untuk cuba menyeret dan menjatuhkan bahan ke garis masa selesai, dan cuba muat turun semula atau pulihkan fail yang hilang.

See all articles