web-dev-qa-db-ja.com

「HKLM」は「HKEY_LOCAL_MACHINE」のエイリアスですか?

HKLMは、HKEY_LOCAL_MACHINEの略語としてよく使用されます。予期せぬことに、これはregに値を要求したときにも当てはまるようです。

C:\>reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CurrentVersion"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
    CurrentVersion    REG_SZ    6.1


C:\>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CurrentVersion"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
    CurrentVersion    REG_SZ    6.1

それらが同等である、または一方が他方のエイリアスであることを主張する参照がありますか?または、実際には、それらが同じではない場合はありますか?

61
Joe Kearney

いいえ、HKLMはHKEY_LOCAL_MACHINEの省略形ですが、常に同等であるというMicrosoftの公式声明はありません。実際、これらのショートカットを利用できるかどうかは、使用しているソフトウェアによって異なり、一般に「一般的に使用される略語」と呼ばれていることを明記しています。

ポリシーの定義 の場合など、HKEY_LOCAL_MACHINEをHKLMに短縮することが許可されない場合があります。

以下の条件が適用されます。

  1. レジストリパスはパーセント記号(%)で囲む必要があります。
  2. レジストリ設定は、REG_SZまたはREG_EXPAND_SZタイプである必要があります。レジストリ値に環境変数が含まれている場合、これらはポリシーが評価されるときに展開されます。
  3. HKEY_LOCAL_MACHINEの省略形としてHKLMを使用しないでください。また、HKEY_CURRENT_USERの省略形としてHKCUを使用しないでください。
  4. レジストリパスルールには、サフィックスパスを含めることもできます。

ソフトウェア制限ポリシーのドキュメントから、私が追加した太字)

79
Twinkles

はい。

HKLMはHKEY_LOCAL_MACHINE変数の略です。

HKCUはHKEY_CURRENT_USERの略です。

彼らは同じものです。

Wikipedia によると:

Win32 APIで定義された定数ハンドルに従って、または同義語の省略形(アプリケーションに応じて)によって伝統的に名前が付けられた、7つの定義済みルートキーがあります。

  • HKEY_LOCAL_MACHINEまたはHKLM
  • HKEY_CURRENT_CONFIGまたはHKCC(Windows 9xおよびNTのみ)
  • HKEY_CLASSES_ROOTまたはHKCR
  • HKEY_CURRENT_USERまたはHKCU
  • HKEY_USERSまたはHKU
  • HKEY_PERFORMANCE_DATA(Windows NTでのみ、Windowsレジストリエディターでは非表示)
  • HKEY_DYN_DATA(Windows 9xでのみ、Windowsレジストリエディターで表示可能)
4
Kunal

PowerShellを使用すると、HKLMはHKEY_LOCAL_MACHINEのマウントとして存在するため、変更可能であることを追加します。例

 PS> Get-Item HKLM:
 Name Property 
 ---- -------- 
 HKEY_LOCAL_MACHINE 
 
 PS> Remove-PSDrive HKLM 
 
 PS> Get-Item HKLM:
 Get-Item:ドライブが見つかりません。 「HKLM」という名前のドライブは存在しません。
3
Steven Penny

Twinklesが指摘するように、これは一般的に使用される略語です。使用できないと明記されているソースはありませんが、Windows 2000レジストリサブツリーの一般的に使用される略語を示す表が見つかりました。これは、現在のセットとほとんど同じです(Windows 7以降)。ここに私が見つけたものがあります:

From Windows 2000のレジストリの概要 (このサイトのフォーマット用に変更):

Table 16.1 Registry Subtrees
HKEY_CLASSES_ROOT  HKCR
HKEY_CURRENT_USER HKCU
HKEY_LOCAL_MACHINE HKLM
HKEY_USERS HKU
HKEY_CURRENT_CONFIG HKCC
HKEY_PERFORMANCE_DATA No commonly used abbreviation

そのリストは XPサポート記事 にも示されていますが、パフォーマンスデータサブツリー(今ではなくなっていると思いますが、Pankaj/Wikipediaはその考えをサポートしています)を差し引いています。

Windowsレジストリリファレンス もあります。これは、さまざまなサブツリーをリストする事前定義されたキーページにリンクしています。各サブツリーには、特定のページへのリンクがあります(そのほとんどは、何らかの理由で)。そこには、上記と一致する略語もリストされています。

これらのページのいずれも、プログラミングで略語を使用できるかどうかについては説明していません。そのため、明示的にどこにも明記されていないことがわかります。 。

2
Joe