為什麼有些 HKLM 條目可以在 64 位元 PC 上讀取,但有些則不能從 VB6 讀取

為什麼有些 HKLM 條目可以在 64 位元 PC 上讀取,但有些則不能從 VB6 讀取

因此,我們的一位客戶在舊版 Windows 版本上使用我們的軟體,因為他們處於工業、隔離環境中,並且他們擁有 Windows XP 和一堆舊伺服器,這是唯一適合他們的東西。其中一些是 64 位元的。

閱讀註冊表時我注意到,在某些情況下,我們的 32 位元應用程式實際上可以直接讀取 64 位元 Window 上的以下條目 - 理論上這是不可能的:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer並從字串值“Version”中提取版本號。

但是,如果我們在同一台 PC 上建立一個金鑰(例如) HKEY_LOCAL_MACHINE\SOFTWARE\Our Software並新增一個字串值(例如「上次服務」),則無法讀取該金鑰。

當我們嘗試將其新增至其中時,權限和所有權與 IE 條目相同,但無濟於事。

當然,使用是\\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Our Software\Last Service Date可行的,但為什麼如果其他一些東西可以進入註冊表的“正常”部分並且可讀,有些則不能呢?從應用程式中提取資料來讀取服務日期時會更容易、更清晰,如果不小心將其錯誤地添加到標準 HKEY_LOCAL_MACHINE 中,則至關重要。

我錯過了什麼嗎?

答案1

您遇過 註冊表重定向器:

註冊表重定向器透過在 WOW64 上提供註冊表某些部分的單獨邏輯視圖來隔離 32 位元和 64 位元應用程式。註冊表重定向器會攔截對其各自邏輯註冊表視圖的 32 位元和 64 位元註冊表調用,並將它們對應到相應的實體註冊表位置。重定向過程對應用程式是透明的。因此,32 位元應用程式可以像在 32 位元 Windows 上運行一樣存取註冊表數據,即使數據儲存在 64 位元 Windows 上的不同位置也是如此。

某些應用程式註冊表項(例如HKEY_LOCAL_MACHINE\Software 始終重定向)。大多數註冊表配置單元都沒有重定向。

32/64 位元程式仍然可以透過在請求中包含特殊標誌來強制存取 64/32 位元版本的註冊表,如文章中所述 存取備用註冊表視圖。也可以看看 WOW64 上的登錄重定向範例

相關內容