レガシー Windows API(概要)について

ここで紹介しているAPIは、Windows95、Windows NT3.5時代のAPI群であり、最新のAPIは含まれていないことに注しして欲しい。なお、当時の解説書は現在よりもより詳細に解説しているため、参考になるはずである。

  • レイアウトを変換する際、崩れているページがあります。
  • 概要およびSampleコードはありますが、APIの解説はありません。

ご要望があれば旧版のWin32 API(HELP形式)をお譲りします。問い合わせフォームより申し込みください。

Windows API レジストリと初期化ファイルの概要

Microsoft(R) Windows(TM) では、 アプリケーションは、 アプリケーションがクローズすると失われるような情報を初期化ファイルに格納します。通常、 初期化ファイルには、 アプリケーションのユーザー設定などを格納します。しかし、 初期化ファイルには、 本質的に次のような制限があります。

通常、 初期化ファイルの情報は、 その情報を格納したアプリケーションからしか利用できません。

初期化ファイルはテキスト形式であるため、 初心者が間違って変更してしまう可能性があります。

各アプリケーションにそれぞれ初期化ファイルがあると、 アプリケーションの数が多くなった場合にファイルの個数が増えてしまいます。

初期化ファイルを干渉から保護する方法はありません。

初期化ファイルは複数のユーザーをサポートしません。

初期化ファイルは同じアプリケーションの異なるバージョンはサポートしません。

初期化ファイルを修復することはできません。

初期化ファイルの情報へのアクセスや管理を、 統一的に行うことはできません。

Microsoft Windowsバージョン3.1には、 新機能の登録データベースがあります。登録データベースには、 (Windowsファイル マネージャなどの) シェル アプリケーションやオブジェクトのリンクと埋め込み (OLE) を使うアプリケーションをサポートするための情報が格納されています。データベース内の各情報は、 キーで識別されます。各キーには、 値 (データ) が関連付けられています。Windows 3.1では、 データベースの情報を問い合わせたり設定するための関数のセットを追加しています。このデータベースはアプリケーションがプライベートな構成情報を格納するためのものではないため、 プライベートな情報には初期化ファイルが必要です。

Win32アプリケーション プログラミング インターフェイス (API) では、 バージョン3.1の登録データベースを2つの方向で拡張しています。データベースは、 より多くのキーが使えるようになり、 各キーにはより多くのデータを格納できるようになりました。新しいデータベースは、 「レジストリ」と呼ばれます。Windows 3.1の登録データベースを操作する関数もWin32レジストリを扱えますが、 一部の関数はWin32 APIの拡張バージョンの関数で置き換えられています。

レジストリの目的は、 次に示すことを実現することです。

構成情報の格納場所を1つにまとめることによって、 初期化ファイルや構成ファイル (CONFIG.SYSWIN.INIなど) を不要にすること。

しかし、 以前のバージョンのWindowsとの互換性を保つため、 初期化ファイルや設定ファイルの多くは残されています。

コンピュータ上のアプリケーションやデバイス ドライバ、 オペレーティング システムの列挙、 管理、 構成

コンピュータ上のハードウェアの列挙と管理

Windowsコントロール パネルによる、 構成情報のユーザー インターフェイスの標準化

構成情報の構文エラーの低減

ユーザー関連情報、 アプリケーション関連情報、 コンピュータ関連情報の分離。これによって、 複数のユーザーの情報を1つのコンピュータで管理できます。

構成データのセキュリティの実現。セキュリティによって、 重要なデータを許可なく変更できないようにしつつ、 ユーザーが個人的な設定を直接制御できるようにします。

ネットワーク上の情報を設定したり問い合わせるネットワーク関数の実現。これによって、 ネットワーク上の構成データを直接調べることができます。

システムがクラッシュした後でも、 記憶域が修復できるようにします。

構成状態を編集します。

アプリケーションやデバイス ドライバ、 そしてシステム自体もレジストリを使ってデータを格納、 取得します。また、 レジストリは、 ドライバやファイル システム、 サービスのロードにも使われます。レジストリは、 ファイル システム内のファイルに、 このデータを格納します。これらのファイルは、 専用のバイナリ形式で格納され、 システムや特定のプログラムだけがアクセスできるようにオープンされてままになっています。このため、 アプリケーションはレジストリのファイルに直接書き込むことはできませんが、 APIを使ってアクセスすることはできます。

次に示すトピックでは、 Win32のレジストリ関数と初期化ファイル関数について説明しています。

レジストリの構造

マッピングと初期化ファイル

HKEY_LOCAL_MACHINEの構造

Hardware

SecuritySAM

Software

System

HKEY_USERSの構造

レジストリへの情報の格納

記憶域

アプリケーションとレジストリ

レジストリ関数の使用

キーと値の列挙の例

レジストリと初期化ファイルの関数

レジストリの構造

レジストリは、 Microsoft(R) Windows NT(TM) SYSTEM32\CONFIGディレクトリに、 バイナリ形式のファイルとして格納されています。このファイルは、 「ハイブ」に対応します。ハイブとは、 レジストリ情報のひとかたまりで、 レジストリ階層のルートにあります。レジストリのサイズはユーザーが変更でき、 システム リソースにだけ制限されます。デフォルトのレジストリのサイズは、 システムのページド プール サイズの1/4に制限されます。

レジストリのデータは、 階層構造のツリーで構成されています。ツリーの各エントリ ノードは、 「キー」と呼ばれます。レジストリはファイル システムに似ており、 各キーには「サブキー」 (ディレクトリのようなもの) とデータ エントリ (ファイルのようなもの) があります。

アプリケーションは、 初期化ファイルと同様に、 レジストリを使って情報を格納、 取得できます。

キーが存在すること自体が情報である場合と、 キーをオープンしてそのキーに対応するデータを使う場合があります。Windows 3.1の登録データベースでは、 このデータは文字列形式です。Win32のレジストリでは、 キーにはデータ エントリを何個でも追加でき、 データの形式は任意です。各データ エントリは「値」と呼ばれます。

各キーには、 次に示す項目があります。

キーの要素 説明

名前キーのアクセスに使われる文字列です。この名前は、 同じ階層レベルのほかのサブキーに対して一意でなければなりません (つまり、 KeyAKeyBにそれぞれサブキーKeyCを置くことはできますが、 KeyAKeyCサブキーを2つ置くことはできません)。キー名には、 円記号 (\) NULL文字を含めることはできません。このキー要素は必須です。

クラスオブジェクトのクラス名です。レジストリに格納されているクラス インスタンスにクラス メソッド コードを関連付けるのに使われます。通常、 アプリケーションが使うことはありません。このキー要素は省略可能です。

セキュリティ記述子キーにはWindows NTの標準セキュリティ記述子が使われるため、 監査制御や完全なアクセス制御を表現できます。通常のセキュリティ継承規則が適用されます。このキー要素は省略可能です。

最新書き込み時刻キーが最後に修正された時刻を示すタイム スタンプです。値の変更は、 その値の親キーの修正とみなされます。

0個以上のキーに格納されている情報です。このキー要素は省略可能です。値は、 次の3つの部分で構成されます。

値の要素 説明

名前 値を識別します。名前のサイズは32,767 Unicode文字 (65,534バイト) までのデータを識別します。値の名前には、 円記号 (\) も使えます。Windows 3.1との互換性のため、 NULLの名前 ("") も使えるようになっています。

種類 この値に格納されているデータの種類を定義します。Windows 3.1では、 この種類は常にREG_SZで、 NULLで終わる文字列を示します。Win32 APIでは、 ほとんどのデータ形式の種類が定義されています。システムはこの種類情報を使いませんが、 アプリケーションは、 定義済みの種類を使って、 レジストリ ツールが値のデータを調べたり操作できるようにしてください。0x7FFFFFFF以下の種類はシステム用に予約されています。

データ 任意の長さと形式のユーザー データを示します。Windows NT 3.1では、 1Mバイトまでです。

レジストリの文字列は、 すべてUnicode形式で格納されます。レジストリは、 文字列の大文字と小文字の区別を保存しますが、 操作では大文字と小文字を区別しません (値のデータ セクションに格納するデータは任意ですが、 文字列の場合はUnicodeで格納しなければなりません)Unicodeについて詳しくは、 文字列操作とUnicodeの概要を参照してください。

レジストリの変更は、 常にひとまとめにして行われます。値エントリの変更を指示した場合、 変更が完全に行われるか、 またはまったく行われないかのどちらかです。つまり、 名前、 種類、 サイズ、 データは常に一致し、 値エントリのデータはすべて一貫性があります。値エントリの更新中にシステムがクラッシュしても、 一貫性は保たれます。キーは、 常にその値エントリと一貫性があります。繰り返しますが、 更新中にシステムがクラッシュしてもレジストリの一貫性は保たれます。

システムは、 同じキーの複数の値同士や、 複数のキー同士の一貫性については関与しません。複数の値を書き込むアプリケーションは、 値同士の一貫性が必要ならば、 レジストリの一貫性維持機構のほかに、 トランザクション機構を自分で用意しなければなりません。

アプリケーションは、 キーをオープンするとき、 すでにオープンされているレジストリのほかのキーのハンドルを指定しなければなりません。システムは、 常にオープンされている4つの標準キーを定義しています。レジストリを使い始めるときのエントリ ポイントには、 次に示すキーを使ってください。

エントリ ポイント 用途

HKEY_CLASSES_ROOT このハンドルの下のレジストリ エントリは、 ドキュメントの種類 (クラス) と、 そのクラスのプロパティを定義します。

これは、 Windowsバージョン3.1で使われるエントリ ポイントです。このエントリの情報は、 Windows NTでは変更されていません。

このハンドルに格納されている情報は、 Windowsシェル アプリケーションやOLEアプリケーションで使われます。ファイル名拡張子は、 この種類のファイルを操作できるアプリケーションに関連付けられています。OLE情報には、 サーバーのコマンド ライン、 適切なデータ型、 アクティブ化されたOLEオブジェクトの動作があります。このハンドルは、 HKEY_LOCAL_MACHINESoftware\Classesのエイリアスです。

HKEY_CURRENT_USER このハンドルの下のレジストリ エントリは、 現在のユーザーの好みに合わせた設定を定義します。この情報には、 環境変数の設定、 プログラム グループに関する情報、 色、 プリンタ、 ネットワーク接続、 アプリケーションの設定などが含まれます。このハンドルの情報は、 HKEY_USERSキーに格納されています。

HKEY_LOCAL_MACHINE このハンドルの下のレジストリ エントリは、 バスの種類やシステム メモリ、 インストールされているハードウェアやソフトウェアに関する情報など、 コンピュータの物理状態を定義します。

HKEY_USERS このハンドルの下のレジストリ エントリは、 ローカル コンピュータの新しいユーザーのデフォルト ユーザー構成と、 現在のユーザーの構成を定義します (このハンドルの下のサブツリーには、 ユーザーのプロファイルがあります。HKEY_CURRENT_USERは、 現在のユーザーのプロファイルのエイリアスです)

HKEY_CURRENT_USERHKEY_LOCAL_MACHINEに同様のデータがあれば、 HKEY_CURRENT_USERのデータが優先されます。つまり、 通常は、 ユーザーごとの設定はマシンごとのデフォルトよりも優先されます。しかし、 システムがこの規約を強制しているわけではなく、 この規約を実際に適用するのはアプリケーションのコードの責任です。

キーの標準化によって、 アプリケーションはレジストリを調べることができ、 システム管理者がさまざまな情報を操作するためのツールを開発できます。レジストリにデータを追加するアプリケーションは、 管理ツールが新しいデータを調べて使えるように、 定義済みキーに従ってデータを操作してください。上記の4つのエントリ ポイントのほかにも、 さまざまな定義済みキーがあります。

レジストリの内容を見るには、 Windows NTに付属しているレジストリ エディタ (REGEDT32.EXE) アプリケーションを起動してください。このアプリケーションは、 レジストリを修正するための標準の手段ではありません。しかし、 このアプリケーションは、 レジストリの内容を理解して監視するのに役立ちます。

注意 Windows NT 3.5用のハイブ形式はWindows NT 3.1用のものと異なるので、 Windows NT 3.5のマシンからRegSaveKeyで保存されたハイブ (レジストリ データ) は、 Windows NT 3.1のマシンにRegLoadKeyで書き込むことはできません。しかし、 Windows NT 3.5は新旧どちらのハイブ形式もサポートしているので、 Windows NT 3.1のマシンから保存されたハイブは、 Windows NT 3.5のマシンでも使えます。

後にWindows NT 3.1のマシンで使うために、 Windows NT 3.5のマシンからハイブを保存するには、 Win32のレジストリAPI関数でキーによってレジストリを読み、 テキスト ファイルに値で保存します。その後、 Window NT 3.1のマシンでAPI関数を使って、 テキスト ファイルを読んで、 レジストリ情報を格納します。

マッピングと初期化ファイル

情報をレジストリに明示的に読み書きしないアプリケーションでも、 レジストリの恩恵を受けることができます。アプリケーションが「プロファイル」関数やプライベート プロファイル関数を使って構成ファイルや初期化ファイルの情報を取得したり設定するとき、 プロファイル関数は、 指定されたファイルではなくレジストリにマップされます。このマッピングは、 レジストリの次に示すキーに初期化ファイルとセクションが指定されているときに発生します。

HKEY_LOCAL_MACHINE\Software\Microsoft\

Windows NT\CurrentVersion\IniFileMapping

WIN.INI SYSTEM.INI CONTROL.INI WINFILE.INIなど、 システムの一部の初期化ファイルをアプリケーションが修正すると、 システムは、 関数呼び出しをレジストリにマップします。記憶場所が変更されても、 GetPrivateProfileInt関数の動作には影響はありません。

アプリケーションは、 IniFileMappingキーを使って、 インストール手順を簡素化できます。このキーを使うには、 GetPrivateProfileStringWritePrivateProfileStringなどの関数を呼び出すインストール ルーチンを使います。このルーチンは、 ホスト システムがWindows NTで動作しているかどうかに応じて、 レジストリかプライベートな初期化ファイルに書き込みます。たとえば、 ABC.INIという名前の初期化ファイルに書き込む場合、 IniFileMappingキーにABC.INIという名前のサブキーを追加しておけば、 標準初期化ルーチンによってレジストリを読み書きできます。

HKEY_LOCAL_MACHINEの構造

:レジストリ情報の引数は、 このマニュアルの出版時から変更されている可能性があります。

ほとんどのアプリケーションは、 インストール手続き時に、 情報をHKEY_LOCAL_MACHINEキーに格納します。このキーは、 ユーザーにかかわらずローカル コンピュータに固有な情報を格納します。インストールするソフトウェアの名前やバージョン、 OLE対応アプリケーションの機能、 デバイス ドライバの名前や種類は、 このキーに格納されます。

HKEY_LOCAL_MACHINEキーには、 Hardware Security SamSoftware System_win32_System_key5つのサブキーがあります。アプリケーションはHardwareSoftware、 およびSystemキーを問い合わせることができますが、 情報を追加できるのはSoftwareキーとSystemキーだけです。

Hardware

Hardwareキーは、 「揮発性キー」です。このキーの情報は、 システムの起動時にシステムによって収集されます。このキーには、 ローカル コンピュータに接続されている物理デバイスの種類や状態をアプリケーションが判断するために問い合わせる情報が格納されています。このキーはコンピュータが起動されるたびに上書きされるため、 アプリケーションはこのキーに情報を設定することはできません。

Hardwareキーには、 Description DeviceMap ResourceMap3つのサブキーがあります。

Description

HardwareキーのDescriptionサブキーには、 ローカル コンピュータのハードウェアに関する情報が格納されています。ハードウェアの各部分は、 次に示す名前付きの値で記述されます。

名前付きの値 内容

Component information 要素を識別するバイナリ データ

Identifier 要素の名前を示す文字列

Configuration data 要素の構成を示すバイナリ データ

Descriptionキー下のツリー構造は、 コンピュータの種類 (ISA EISA ARCなど) とコンピュータのバス アーキテクチャ (コンピュータが持つバスの種類と数) によって多少変化します。

一般的な配置では、 キーの名前がCentralProcessorEisaAdapterなどの一般的なオブジェクトの種類を識別します。このキーの下には、 そのオブジェクトのさまざまなインスタンスを表す0 1などの名前のキーがあります。オブジェクトが (バスなどの) コンテナ オブジェクトならば、 その下にさらにツリー構造があります。たとえば、 キーの名前は次のようになります。

...\Description\EisaAdapter\0\DiskController\0

...\Description\EisaAdapter\1\DiskController\2

1つ目のキーは、 マシンの第1 EISAバスの0番目のディスク コントローラを記述します。2つ目のキーは、 マシンの第2 EISAバスの2番目のディスク コントローラを記述します。

特定の種類のデバイスを探そうとするアプリケーションは、 デバイスをすべて見つけようとする場合、 ツリーを順番に調べて、 (DiskControllerなどの) デバイスのすべてのインスタンスを見つけなければなりません。

...\EisaAdapter\0のようなキーには、 バス自体に関する構成データを報告する値エントリがあります。この構成データはバスから読み取られますが、 システムはこのデータを解釈できません。

CentralProcessor

CentralProcessorサブキーには、 ローカル コンピュータのCPUの個数に対応する番号キーがあります。CPU1つしかなければ、 サブキー0CPUを記述します。特に、 これらのキーの値は、 プロセッサのモデルとバージョンを示します。

MultifunctionAdapter

MultifunctionAdapterサブキーには、 ローカル コンピュータの多機能アダプタ (バス コントローラ) に対応する、 0から始まる番号キーがあります。各番号キーには、 次に示す0から始まる番号キーがあります。

キー 内容

DiskController ディスク コントローラに対応するキーがあります。フロッピー ディスク ドライブは、 DiskControllerの各番号付きサブキーのFloppyDiskPeripheralサブキーにリストされています。各フロッピー ディスク ドライブを記述する値は、 FloppyDiskPeripheralの番号付きサブキーに関連付けられています。

DisplayController ディスプレイ コントローラに対応するキーがあります。ディスプレイは、 DisplayControllerの各番号付きサブキーのMonitorPeripheralサブキーにリストされています。各ディスプレイを記述する値は、 MonitorPeripheralの番号付きサブキーに関連付けられています。

KeyboardController キーボード コントローラに対応するキーがあります。キーボードは、 KeyboardControllerの各番号付きサブキーのKeyboardPeripheralサブキーにリストされています。各キーボードを記述する値は、 KeyboardPeripheralの番号付きサブキーに関連付けられています。

ParallelController パラレル ポートのコントローラに対応するキーがあります。

PointerController ポインタ コントローラに対応するキーがあります。ポインタは、 PointerControllerの各番号付きサブキーのPointerPeripheralサブキーにリストされています。各ポインタを記述する値は、 PointerPeripheralの番号付きサブキーに関連付けられています。

SerialController シリアル ポートのコントローラに対応するキーがあります。

DeviceMap

HardwareキーのDeviceMapサブキーは、 デバイスをそのドライバにマップします。DeviceMapにある各キーには、 関連するドライバ情報のレジストリ内での位置を示す名前付きの値が1つ以上あります。たとえば、 ローカル コンピュータにマウス デバイスが1つだけあるとき、 PointerPortキーには、 次に示す値が1つだけあります。

\Device\PointerPort0 : REG_SZ :

\REGISTRY\Machine\System\ControlSet1\Services\Inport

上記の例のコロンは、 値の名前、 種類、 データの各要素を区切っています。この例は表示上の都合で2行になっていますが、 実際の値データには改行はありません。

このパスによって、 システムは、 マウス ドライバに関する情報を取得できます。マウス ドライバの情報は、 次に示すキーに格納されています。

HKEY_LOCAL_MACHINE\System\ControlSet001\Services\Inport

通常、 DeviceMapキーには、 次に示すキーがあります。

Keyboard Class

Keyboard Port

Parallel Ports

Pointer Class

Pointer Port

Serialcomm

Video

SCSI

ResourceMap

HardwareキーのResourceMapサブキーは、 デバイス ドライバを、 そのドライバが使用するリソースのリストにマップします。アプリケーションがこのデータを使うことはありませんが、 割り込みやDMAチャネルなどのリソースがシステム上のでどのように割り当てられているのかを把握するためにそれを読み取ってもかまいません。たとえば、 インストール プログラムは、 リソース マップを読み取り、 割り込みベクタがサポートしているカードが使用できるベクタのうち、 どのベクタがシステム内のどこかで使用中であるかを計算することができます。

リソース マップについて詳しくは、 ヘッダー ファイルNTConfig.hを参照してください。アプリケーションWinMSD.exeを使えば、 リソース マップ データの検査を行うことができます。

SecuritySAM

SecurityキーとSAMキーには、 ローカル コンピュータのセキュリティ情報がすべてあります。SecuritySAMに含まれるキーをアプリケーションが修正することはできません。セキュリティ情報を問い合わせるアプリケーションは、 セキュリティ関数を使わなければなりません。セキュリティについて詳しくは、 セキュリティの概要を参照してください。

Software

Softwareキーには、 ユーザーごとの構成に無関係な、 ローカル コンピュータのソフトウェアに関する情報があります。つまり、 このキーには、 ソフトウェアのメーカーやバージョン番号などの情報があります。また、 このキーには、 ファイルの関連付けやOLEに関する情報があります。

Softwareキーには、 Classes Company name Program Groups3つのサブキーがあります (Company nameは、 実際の社名のプレースホルダです)

クラス

SoftwareキーのClassesサブキーは、 ドキュメントの種類 (クラス) を定義します。Windowsのシェル アプリケーションやOLEアプリケーションは、 このキーに格納されている情報を使います。ある種類のファイルを処理できるアプリケーションには、 その種類のファイル名拡張子が関連付けられています。OLE情報には、 サーバー起動用コマンド ライン、 適切なデータ型、 アクティブ化されたOLEオブジェクトの動作が定義されています。

HKEY_CLASSES_ROOTエントリ ポイント キーは、 HKEY_LOCAL_MACHINE\Software\Classesキーにマップされます。

Classesキーには、 2種類のキーが含まれています。1つはファイル名拡張子キーで、 その拡張子を持つファイルに関連付けられているアプリケーションを示します。もう1つはクラス定義キーで、 そのクラスのドキュメントのシェル プロパティやOLEプロパティを示します。

ファイル名拡張子キー

ファイル名拡張子キーの名前の形式は.extです。.extキーは、 その拡張子を持つすべてのファイルを指定されているクラスのメンバとして定義します。登録アプリケーションは、 .extキー名に関連付けられている値を使って、 拡張子のドキュメント クラスを指定します。

.extキー名は、 特定のファイル名拡張子とクラスを関連付けます。たとえば、 TALK.EXEという名前の音声メモ アプリケーションがOLEサーバーとして登録されているとします。このアプリケーションはファイル名拡張子キーとして.tlkを使用し、 そのキーの値としてTalkを使用します。この場合、 クラス定義キーとしてTalkを作成します。

クラス定義キー

クラス定義キーの名前は、 ドキュメント クラスの名前です。たとえば、 音声メモ アプリケーションがファイル名拡張子キーとして.tlkを使用し、 そのキーの値としてTalkを使用しているとします。この場合、 クラス定義キーとしてTalkを使用します。クラス定義キーの値には、 自分自身の名前 (「音声メモ」など) を記録します。

クラス定義キーの下のレジストリ エントリは、 クラスのプロパティを記述します。レジストリには、 ドキュメントの各クラスについて、 シェル プロパティとプロトコル プロパティの2種類のプロパティがあります。

シェル プロパティは、 特定のクラスのドキュメントとWindowsシェル アプリケーションの関係を記述します。シェル プロパティには、 openprint2つのキー名があります。openプロパティは、 Windowsシェル アプリケーションからのドキュメント オープン要求に対するクラスの応答を記述します。printプロパティは、 Windowsプリント マネージャからのドキュメント印刷要求に対するクラスの応答を記述します。openキーとprintキーには、 commandサブキーがなければなりません。commandに設定されている値は、 アプリケーションを起動するために使われるコマンド ラインを示します。この値には、 必要ならばコマンド ライン オプションを含めることができます。たとえば、 ペイントブラシ (PBRUSH.EXE) openキーの値はpbrush.exe %1です。

また、 動的データ交換 (DDE) をサポートする場合は、 openキーやprintキーにddeexecサブキーを定義してください。ddeexecキー名に指定されている値は、 DDEコマンドとして扱われます。特に、 アプリケーションがすでにDDEopenコマンドとprintコマンドをサポートしているときは、 ddeexecが役立ちます。DDEメッセージによってアプリケーションの柔軟性が向上します。マルチ ドキュメント インターフェイス (MDI) をサポートしている場合は、 DDEメッセージ文字列で複数のコマンドを指定できるため、 特に役立ちます。ddeexecキーのサブキーを次に示します。

キー 内容

applicationDDE対話の確立で使われるアプリケーション名です。登録アプリケーションがapplicationキーを指定しなければ、 システムは、 commandキーで指定されているアプリケーション名を使用します。

topicDDE対話のトピック名です。アプリケーションがtopicキーを指定しなければ、 システムは、 デフォルトのトピック名としてSystemトピックを使用します。

ifexecDDE対話の開始が失敗したとき (アプリケーションが動作していないときなど) に使われるDDEコマンドです。対話の開始が失敗すると、 commandキーで指定されているコマンドが実行され、 ifexecキーで指定されている文字列が送られます(アプリケーションがifexecキーの値を指定していない場合、 開始が失敗すると、 commandキーで指定されているコマンドが実行され、 ddeexecキーで指定されている文字列がもう一度送られます。

DDEについて詳しくは、 動的データ交換の概要および動的データ交換管理ライブラリの概要を参照してください。

プロトコル プロパティとは、 各ドキュメント クラスを記述するドキュメント プロパティです。プロトコルとは、 ドキュメントなどのデータの集合体を操作するための規約です。Protocolキーには、 プロトコルのプロパティを記述するキーが含まれます。クラスでは任意の個数のプロトコルをサポートできますが、 現在定義されているプロトコルは2つだけです。どちらのプロトコル名も、 キー名として使われています。最も一般的なプロトコルであるStdFileEditingは、 OLEをサポートするドキュメントすべてで使われます。もう1つのStdExecuteプロトコルは、 OLEサーバー アプリケーションにDDE実行コマンドを送らなければならないOLEクライアント アプリケーションが使用します。これらのプロトコルの使用について詳しくは、 OLEのマニュアルを参照してください。

StdFileEditingプロトコルには、 次に示すサブキーが含まれます。

キー 説明

serverOLEクライアント アプリケーションがリンク オブジェクトや埋め込みオブジェクトのサーバー アプリケーションを起動するために使うコマンド ラインです。

handlerOLEオブジェクトのオブジェクト ハンドラとして動作するダイナミック リンク ライブラリ (DLL) の名前です。

verb このキーには値はありません。このキーのサブキーは、 サーバーがオブジェクトをオープンしたときに実行すべき動詞の種類を識別します。各サブキーには、 0から始まる連続した番号が付けられます。0サブキーは、 サーバーがサポートするオブジェクトの主動詞に対応します。たとえば、 0の値がEditで、 1サブキーの値がPlayになります。

企業名

Softwareキーの「企業名」キーは、 ローカル コンピュータにインストールされているソフトウェアの名前とバージョン番号を示します (「企業名」は、 ソフトウェアを作成した企業の名前のプレースホルダです)。アプリケーションをインストールするときは、 この情報を次のように記録してください。

HKEY_LOCAL_MACHINE\Software\CompanyName\
ProductName\Version

この情報は、 ローカル コンピュータに固有です。アプリケーションの構成に関する情報は、 HKEY_CURRENT_USERキーにユーザーごとに格納されます。

Program Groups

SoftwareキーのProgram Groupsサブキーは、 一般的なプログラム グループを示します。このサブキーが示すプログラム グループは、 そのコンピュータのユーザー間でよく使われるプログラム グループです (プログラム グループとは、 アプリケーションを表すアイコンを含むプログラム マネージャ内のウィンドウです)。各ユーザーのプログラム グループは、 HKEY_CURRENT_USER\Program Groupsなどの、 レジストリ内の別の場所に格納されます。Program Groupsキーの各サブキーの名前は、 よく使われるプログラム グループの名前です。各サブキーの値は、 そのプログラム グループを記述するバイナリ データです。このデータを変更するには、 シェル動的データ交換 (DDE) インターフェイスを使ってください。シェルDDEについて、 詳しくはシェル動的データ交換インターフェイスの概要を参照してください。

System

Systemキーには、 デバイスやサービスに関する情報があります。以前のバージョンのWindowsWindowsWindows用アプリケーションがCONFIG.SYS設定ファイルから取得していた情報は、 このキーに格納されるようになりました。デバイス ドライバやサービスを提供するアプリケーションは、 このキーに情報を追加したり情報を修正します。Systemキーには、 次に示すキーがあります。

ControlSetnnn

Select

Setup

Clone

CurrentControlSet

ControlSet<nnn>

SystemキーのControlSetnnnサブキーは、 「制御セット」を記述します。制御セットは、 各コンピュータの構成オプションのセットです。コンピュータは、 起動後に1つ以上のControlSetnnnサブキーを持ちますが、 同時に複数のControlSetnnnサブキーを使うことはできません。CurrentControlSetキーは、 現在使われているControlSetnnnキーの別名です。これは、 キーにシンボリック リンクを提供します。

通常、 アプリケーションは、 ControlSetnnnキーの情報を修正しません。設定情報の修正は、 CurrentControlSetキーに対して行います。

システムが起動するとき、 システムは、 ControlSetnnnキーから構成情報を取得します。システムが最初に起動したとき、 保護のために、 起動に使われたControlSetnnnキーのコピーがCloneキーとして格納されます。正常に起動されたとシステムが判断したとき、 システムはほかのControlSetnnnキーにCloneキーをコピーし、 Cloneキーにアクセスできなくします。次のControlSetnnnキーは、 Cloneからコピーされ、 バックアップとして保持されます。これらの構成情報は、 起動するシステムの能力を保証します。

ControlSetnnnキーによって、 コンピュータを起動できないような構成情報が作成されないようにできます。構成情報が不正なためにシステムが起動できないとき、 システムは、 Selectキーを調べて、 以前に正常にシステムを起動できた制御セットを見つけて、 その制御セットを使って起動手順を完了します。CurrentControlSetキーは、 正常に起動できる制御セットを示します。

ControlSetnnnキーには、 ControlサブキーとServicesサブキーがあります。

Control

ControlSetnnnキーのControlサブキーには、 コンピュータの構成情報があります。Controlキーには、 次に示すキーがあります。

キー 内容

ComputerName デフォルトのコンピュータ名とアクティブなコンピュータ名を示すComputerNameキーとActiveComputerNameキーがあります。

GroupOrderList グループ内に、 ドライバを読み込む順序を指定します。

Keyboard Layout キーボード配列に使われるDLLを示します。デフォルトの配列として使われます。

Lsa ローカルなセキュリティ オーソリティの認承パッケージです。

NetworkProviderActiveキーとOrderキーがあります。Activeキーには、 アクティブなネットワーク プロバイダを示すサブキー (LanmanWorkstationなど) があります。Orderキーにはサブキーはありません。このキーの値は、 システムがプロバイダをロードする順番を示します。

Nls 国別言語サポートに関する情報です。Nlsキーには、 CodePage Language OEMLocale3つのサブキーがあります。CodePageサブキーの値は、 利用可能なコード ページを示します。Languageサブキーの値は、 利用可能な限度とデフォルト設定を示します。

Print 現在のプリンタと印刷環境に関する情報です。このサブキーには、 次に示すキーがあります。

サブキー 内容

Environments このキーには値はありません。このキーのサブキーは、 環境 (Windows NT x86Windows NT R4000など) の名前を示します。Environmentの各サブキーには、 DriversサブキーとPrint Processorsサブキーがあります。

Driversキーには、 プリンタ ドライバと同じ名前のサブキーがあります。このサブキーの値は、 ドライバによって異なります。

Print Processorsキーには、 印刷プロセッサ (WinPrintなど) を示すサブキーがあります。

Monitors このキーのサブキーの名前は、 ネットワーク印刷モニタです。この名前とサブキーおよびその値は、 モニタによって異なります。

Printers このキーには値はありません。このキーのサブキーの名前は、 インストールされているプリンタを示します。各サブキーには、 プリンタのパラメータを記述する値があります。プリンタ サブキーには、 それぞれ、 PrinterDriverDataという名前のサブキーがあります。

ProductOptions 製品の種類 (WinNtなど) です。

ServiceGroupOrder システムがサービスをロードする順番です。サービスに必要なデータは、 GroupOrderListキーに格納されています。

Session Manager セッション マネージャが使うグローバル変数と、 次に示すサブキーがあります。

サブキー 内容

DOS Devices PRN AUX NUL PIPE MAILSLOT UNCなどのMS-DOSデバイス。

Environment ComSpec Os2LibPath LibPath Path NtVersion WinDirなどの環境変数。

KnownDLLs セッション マネージャDLLが格納されているディレクトリとDLLの名前。名前付きの値として、 DllDirectory kernel32 gdi32 user32 rpcrt4 advapi32があります。

Memory Management ページング オプション。名前付きの値として、 PagedPoolSize NonPagedPoolSize PagingFilesがあります。

SubSystems 利用可能なサブシステム。名前付きの値として、 Required Optional Debug Windows Os2 Posixがあります。

Setup ハードウェア設定オプションです。名前付きの値として、 Video Pointer Keyboardがあります。

TimeZoneInformation タイム ゾーン情報を示す名前付きの値 (Bias StandardName StandardStart StandardBias DaylightName DaylightStart DaylightBias ActiveTimeBias) があります。

VirtualDeviceDrivers 仮想デバイス ドライバです。

WindowsWindowsのディレクトリとシステム ディレクトリです。名前付きの値として、 DirectorySystemDirectoryがあります。

WOWWindows-on-Windowsのオプションです。名前付きの値として、 LogonSwitch cmdline size wowcmdline wowsizeがあります。

hivelist レジストリ情報を含むファイルの位置です。各ハイブごとに、 そのハイブが格納されているファイルのパスを示す値があります。

Services

ControlSetnnnキーのServicesサブキーには、 コンピュータが使うデバイス ドライバ、 ファイル システム、 ハードウェア アダプタ、 およびサービス プログラムなどに関する情報があります。

Servicesキーの各サブキーは、 デバイス ドライバの名前です (デバイス ドライバなど)。各サブキーには、 少なくとも、 Type Start Group ErrorControl4つの名前付きの値があります。また、 ほとんどのドライバは、 DependenciesTagという名前付きの値を使います。

Servicesキーのサブキーにキーがあるときは、 そのキーはLinkageParametersです。Linkageキーの名前付きの値は、 ドライバのリンク オプションを示します。名前付きの値は、 BindExportです。Parametersキーの名前付きの値は、 デバイス ドライバによって異なります。

Select

SystemキーのSelectサブキーには、 ローカル コンピュータの制御セットに関する情報があります。このキーにはサブキーはありませんが、 次に示す名前付きの値があります。

名前付きの値 内容

CurrentCurrentControlSetキーの内容となっている制御セットです。この値が0x1ならば、 CurrentControlSetの生成するキーはControlSet001です。

Default デフォルトの制御セットです。この値が0x1ならば、 デフォルトの制御セットはControlSet001です。

LastKnownGood 最後にシステムを正常に起動できた制御セットです。この値が0x1ならば、 正常であることがわかっている最新のセットはControlSet001です。

Failed Default値が示す制御セットでシステムを正常に起動できたかどうかを示すフラグです。この値が0ならば、 デフォルトの制御セットで正常に起動できています。この値が1ならば、 デフォルトの制御セットではシステムを正常に起動できず、 Current値とLastKnownGood値は、 代わりに使われた制御セットを示します。

システム管理者は、 上記の値を使って、 Systemに情報を書き込むアプリケーションがレジストリを正常に修正するかどうか確認できます。

Setup

SystemキーのSetupサブキーには、 セットアップの種類とコマンド ラインを示す値があります。名前付きの値はSetupTypeCmdLineです。

Clone

SystemキーのCloneサブキーは、 システムの起動に使われた制御セットのコピーです。システムは、 制御セットを変更する前にコピーを作成します。変更前にコピーを作成することによって、 正常な制御セットが常にコンピュータに残ります。

システムが正常に起動すれば、 このキーはLastKnownGoodで示されます。

CurrentControlSet

SystemキーのCurrentControlSetサブキーには、 ローカル コンピュータの現在の構成情報があります。このキーの情報は、 ControlSetnnnの情報とまったく同じ形式です。

HKEY_USERSの構造

HKEY_USERSキーには、 .DEFAULTサブキーと、 ユーザーのセキュリティ識別子 (SID) を名前に持つサブキーが1つ以上あります。.DEFAULTキーのサブキーは、 ユーザー キーのサブキーのサブセットです。.DEFAULTキーの情報は、 ローカル システムの新しいアカウントに割り当てられます。

既存の各ユーザーに関する情報は、 Windows NT...\SYSTEM32\CONFIGディレクトリの個別のファイルに直接格納されています。

HKEY_CURRENT_USERキーは、 現在のユーザーへのエントリ ポイントです (このキーの名前は、 現在のユーザーのSIDになります).DEFAULTキーの構造はSIDキーのサブセットであるため、 ここでのHKEY_CURRENT_USERに関する記述には、 HKEY_USERSの情報も含まれます。

HKEY_CURRENT_USERキーには、 現在のユーザーに固有の構成情報があります。以前は、 このような情報はWIN.INI初期化ファイルに格納されていました。ローカル コンピュータにログオンする各ユーザーについて、 ユーザー 「プロファイル」(構成情報のセット) が保存されます。ユーザーがログオンするとき、 そのユーザーのSIDは、 レジストリの既知のSIDと比較されます。ログオンするユーザーのSIDに一致する既知のSIDがあれば、 システムはそのユーザーのプロファイルをロードします。そうでないときは、 システムは、 HKEY_USERS\.DEFAULTに格納されている構成情報を使います。

セキュリティ識別子について詳しくは、 セキュリティの概要を参照してください。

HKEY_CURRENT_USERキーには、 次に示すキーがあります。

キー 内容

Console コンソールのオプションとウィンドウ サイズを示すサブキーがあります (コンソールとは、 文字モード アプリケーションの入出力を実現するインターフェイスです)

Control PanelWindowsコントロール パネル アプリケーションを記述するサブキーがあります。

Environment ユーザーの環境変数を示す値があります。

Keyboard Layout 現在のキーボード配列を示す値があります。

Network リダイレクトされているデバイス (ドライブ文字など) を示すサブキーがあります。各サブキーには、 RemotePath UserName ProviderName ConnectionType4つの名前付きの値があります。

Printers デフォルトのプリンタを示す値があります。

Program Groups ユーザーのプログラム グループを記述するサブキーがあります (共通のプログラム グループは、 HKEY_LOCAL_MACHINE\Software\ProgramGroupsに格納されます)

Software インストールされているソフトウェアのユーザー設定オプションを記述するサブキーがあります。インストール アプリケーションやユーザー オプションを格納するアプリケーションは、 このキーに情報を書き込みます。

Console

HKEY_CURRENT_USERキーのConsoleサブキーには、 コンソールのオプションとウィンドウ サイズを示すサブキーがあります。Consoleキーには、 標準サブキーのConfigurationがあります。

Configurationキーには、 コンソールの構成を記述する名前付きの値があります。値の名前は、 FillAttr CommandRecallBufferSize ScreenBufferColumns ScreenBufferRows WindowColumns WindowRows ImeBehaviorです。

ほかのキーは、 コンソール アプリケーションの構成を記述します。キーの名前はアプリケーションの名前で、 システムによって異なります。

Control Panel

HKEY_CURRENT_USERキーのControl Panelサブキーには、 コントロール パネル アプリケーションを記述するサブキーがあります。次に示すキーが定義されています。

キー 内容

Color Schemes[画面の色]アプリケーションの[配色]セクションの配色を記述する値があります。値の名前は配色の名前で、 「さくら さくら」や「エーゲ海」などがあります。

Colors[画面の色]アプリケーションの[色を指定する部分]セクションで設定される画面要素の色を記述する値があります。値の名前は画面要素の名前で、 「壁」や「ウィンドウ内のテキスト」などがあります。

Current 現在の色設定を記述する値があります。この値の名前は「標準の色」です。

Custom Colors ユーザーが[画面の色]アプリケーションの[作成した色]セクションで定義したカスタム カラーを記述する値があります。値の名前は、 ColorAからColorPまでです。

Desktop[画面のデザイン]アプリケーションのオプションの設定を記述する値があります。このキーには、 次に示す値があります。

内容

CoolSwitch Alt+Tabキーを押したときに、 オープンされている各アプリケーションのタイトルとアイコンを画面に表示しながらアプリケーションを切り換えることができる場合は、 1です。Alt+Tabキーを押したときに、 単にアプリケーションを切り換えるだけである場合は、 0です。

CursorBlinkRate 1200 (点滅速度最低) から200 (最高) までの間の値です。

BorderWidth 境界線の幅 (ピクセル単位) です。

ScreenSaveTimeOut システムが使われなくなってからスクリーン セーバーを起動するまでの秒数です。

ScreenSaveActive スクリーン セーバーがアクティブならば1で、 アクティブでないときは0です。

SCRNSAVE.SCR データはありません。この値の名前は、 デフォルトのスクリーン セーバーを含むファイルを示します。この値にはデータは関連付けられていません。

Pattern ユーザーが[画面のデザイン]アプリケーションの[背景の模様]セクションで選択したパターンの記述です。データは、 ビットマップを記述する一連の整数です。

Wallpaper 現在の壁紙のビットマップ ファイルの名前です。

TileWallPaper 壁紙を並べて表示するときは1で、 中央に表示するときは0です。

GridGranularity ウィンドウのサイズ変更と移動の単位をピクセル単位で示します。

IconSpacing アイコンの間隔 (ピクセル単位) です。

IconVerticalSpacing アイコンの垂直間隔 (ピクセル単位) です。

IconTitleWrap 長いアイコン タイトルを折り返すときは1で、 アイコン タイトルを折り返さないときは0です。

IconTitleFaceName アイコン タイトルに使われるフォントの名前です。

IconTitleSize アイコン タイトルのサイズ (ポイント単位) です。

IconTitleStyle アイコン タイトルのスタイルです。この値が0ならば、 デフォルトのスタイルが使われます。

International[各国対応]アプリケーションの設定を示す値があります。sで始まる値は文字列で、 iで始まる値は整数です。

説明

Locale ロケール識別子です。

sLanguage 言語です。

sCountry 国です。

iCountry 国別コードです。

sList 区切り記号です。

iMeasure インチ系のときは1で、 メートル系のときは0です。

sDecimal 小数点に使われる文字です。

sThousand 999より大きい数値を3桁ごとに区切るのに使われる文字です。

iDigits デフォルトの小数点以下の桁数です。

iLZero 1未満の数値の小数点の前に0を付けるときは1で、 0を付けないときは1です。

sCurrency 通貨を示すのに使われる通貨記号です。米国では、 この記号はドル記号 ($) です。

iCurrDigits 通貨の値の小数点以下の桁数です。

iCurrency 通貨の値の通貨記号の位置です。次に示す値が定義されています。

意味

0 $1

1 1$

2 $ 1

3 1 $

iNegCurr 負の通貨の値を示すの方法です。次の値が定義されています。

意味

0 ($123.45)

1 -$123.45

2 $-123.45

3 $123.45-

4 (123.45$)

5 -123.45$

6 123.45-$

7 123.45$-

8 -123.45 $

9 -$ 123.45

10 123.45 $-

sDate 日付の年月日を区切るのに使われる文字です。

sTime 時刻の時分秒を区切るのに使われる文字です。

sShortDate 短い形式の日付に使われる書式です。次に示す値が定義されています。

意味

M/d/yy //年の下2

d/M/yy //年の下2

yy/M/d 年の下2//

sLongDate 長い形式の日付に使われる書式です。次に示す値が定義されています。

意味

dddd, MMMM dd, yyyy 曜日、 月日、 年

dddd, dd MMMM, yyyy 曜日、 日月、 年

dddd, yyyy MMMM, dd 曜日、 年月、 日

iDate 短いM/d/yy形式のときは0 d/M/yy形式のときは1 yy/M/d形式のときは2です。

iTime 時刻の表示が12時間制のときは0 24時間制のときは1です。

iCentury 年を4桁で示すときは0 2桁で示すときは1です。

iTLZero 時刻の値が1桁のときに0を前に付けない場合は0 0を前に付ける場合は1です。

iDayLZero 日付の日が1桁のときに0を前に付けない場合は0 0を前に付ける場合は1です。

iMonLZero 日付の月が1桁のときに0を前に付けない場合は0 0を前に付ける場合は1です。

s1159 11:59までの時刻に付けられる文字列です。

s2359 23:59までの時刻に付けられる文字列です。

Keyboard[キーボード]アプリケーションの設定を示す名前付きの値があります。このキーには、 次に示す値があります。

内容

KeyboardSpeed キーボードのリピート間隔です。データは、 0 (最低速) から31 (最高速) までの値です。

KeyboardDelay オート リピートを開始するまでの時間 (秒単位) です。データは、 3 (最長) から0 (最短) までの値です。

InitialKeyboardIndicators キーボードのインジケータの初期状態です。デフォルトの設定は0です。

MMCPL コントロール パネルのアプリケーション数、 [コントロール パネル]ウィンドウの寸法、 ユーザーがコントロール パネルに追加したアプリケーションのパスを示す名前付きの値です。このキーの名前は、 Multimedia Control Panelからとったものです。このキーには、 次に示す値があります。

内容

NumApps コントロール パネルのアプリケーション数です。

X [コントロール パネル]ウィンドウの左上隅のX座標です。

Y [コントロール パネル]ウィンドウの左上隅のY座標です。

W [コントロール パネル]ウィンドウのピクセル単位の幅です。

H [コントロール パネル]ウィンドウのピクセル単位の高さです。

Mouse[マウス]アプリケーションのオプションに対応する名前付きの値があります。このキーには、 次に示す値があります。

内容

SwapMouseButtons マウス ボタンの機能が交換されているかを示すフラグです。この値が0ならば、 ボタンは交換されていません。Yesならば、 ボタンは交換されています。

DoubleClickSpeed 2回のマウス クリックを1回のダブルクリックとして認識するのに必要な時間 (ミリ秒単位) です。最長の設定は900で、 最短の設定は100です。

MouseThreshold1 マウス ボタン1のマウスしきい値 (ピクセル単位) です (マウスしきい値とは、 2回のクリックがダブルクリックとして認識されるマウスの移動範囲です)。最小の設定は0で、 最大の設定は4です。

MouseThreshold2 マウス ボタン2のマウスしきい値 (ピクセル単位) です。最小の設定は0で、 最大の設定は6です。

MouseSpeed マウスのトラッキング速度です。最低は0で、 最高は2です。

マウスしきい値のデータは、 [マウス]アプリケーションのオプションでは設定できず、 システムが設定します。

Patterns ユーザーが[画面のデザイン]アプリケーションで指定できるパターンに対応する名前付きの値があります。値の名前は、 [背景の模様]リスト ボックスに表示される名前です。

Screen Saver.name 各スクリーン セーバーの設定に対応する名前付きの値があります。キー名のname部分は、 MarqueeStarsなど、 スクリーン セーバーの名前を示します。各キーの値は、 スクリーン セーバーの設定オプションによって異なります。

Sound 名前付きの値Beepがあります。ビープがアクティブならば、 データはyesになります。

Environment

HKEY_CURRENT_USERキーのEnvironmentサブキーには、 ユーザーがコントロール パネルの[システム]アプリケーションで指定できる「ユーザー環境変数」に対応する名前付きの値があります。各値の名前は環境変数の名前で、 tmpincludeなどがあります。以前のバージョンのWindowsでは、 この情報はAUTOEXEC.BATファイルに格納されていました。

Keyboard Layout

HKEY_CURRENT_USERキーのKeyboard Layoutサブキーには、 現在アクティブなキーボード配列を定義するActiveという名前の値があります。この値は、 コントロール パネルの[各国対応]アプリケーションの[キーボードの種類]リスト ボックスで設定します。

Network

HKEY_CURRENT_USERキーのNetworkサブキーには、 リダイレクトされているデバイス (ドライブ文字など) を示すサブキーがあります。各サブキーには、 RemotePath UserName ProviderName ConnectionType4つの名前付きの値があります。

Printers

HKEY_CURRENT_USERキーのPrintersサブキーには、 Defaultという名前の値があります。この値のデータは、 デフォルト プリンタの名前です。

Program Groups

HKEY_CURRENT_USERキーのProgram Groupsサブキーには、 ユーザーのプログラム グループを記述するサブキーがあります (共通プログラム グループは、 HKEY_LOCAL_MACHINE\Software\Program Groupsキーに格納されています)

Software

HKEY_CURRENT_USERキーのSoftwareサブキーには、 インストールされているソフトウェアの設定を記述するサブキーがあります。ユーザーがカスタマイズできるアプリケーションや、 クローズするときに状態を保存するアプリケーションは、 Softwareキーに情報を保存してください。このキーには、 以前のバージョンのWindowsではWIN.INI初期化ファイルやプライベートなファイルに格納されていた情報のほとんどがあります。

Softwareキーの各サブキーの名前の形式を次に示します。

Software\CompanyName\ApplicationName[\AnyRequiredSubkeys]

たとえば、 Windows NT [時計]アプリケーション (CLOCK.EXE) は、 設定情報を次に示すキー名で格納します。

Software\Microsoft\Clock

Clockキーに関連付けられている値は、 [時計]アプリケーションの設定情報を示します。

Windowsの設定情報の多くは、 次のようにSoftwareキーに格納されています。

Software\Microsoft\Windows NT\CurrentVersion

CurrentVersionキーには、 次に示すキーがあります。

キー 内容

Extensions 指定されたファイル名拡張子に関連付けられている実行可能ファイルを示す値があります。たとえば、 .TXT拡張子を持つファイルをWindowsメモ帳に関連付ける値の名前はtxtです。この値のデータは、 notepad.exe ^.txtです。

Print Manager Print Managerという名前の値があります。この値のデータは、 バイナリの初期化情報です。このキーには、 Printersというサブキーがあります。Printersサブキーには、 現在のプリンタを名前に持ち、 バイナリ初期化情報をデータに持つ値があります。

Program Manager プログラム マネージャの設定を記述するキーがあります。キーには、 GroupsRestrictions Settingsがあります。

Groupsキーには、 プログラム グループの順番を記述する値があります。値の名前は、 Group1からGroupnまでです。各値のデータは、 プログラム グループの名前です。

Restrictionsキーには、 現在のユーザーがプログラム マネージャを使うときの制限を示す値があります。各値のデータはフラグで、 1ならば制限が適用され、 0ならば制限は適用されません。値の名前には、 NoRun NoClose EditLevel Restrictions NoFileMenu NoSaveSettingsがあります。

Settingsキーには、 プログラム マネージャの設定を記述する、 次に示す値があります。

内容

MinOnRun プログラム マネージャからアプリケーションを起動するときにプログラム マネージャをアイコン化するかどうかを示すフラグです。プログラム マネージャをアイコン化するときは1で、 そうでないときは0です。

AutoArrange プログラム マネージャのアイコンを自動的に整列するかどうかを示すフラグです。アイコンを自動的に整列するときは1で、 そうでないときは0です。

SaveSettings プログラム マネージャが終了するときに設定を保存するかどうかを示すフラグです。設定を保存するときは1で、 そうでないときは0です。

display.drv ディスプレイ ドライバの名前です。

Window [プログラム マネージャ]ウィンドウの左上隅のx座標とy座標、 幅と高さを示す整数があります。

Order [プログラム マネージャ]ウィンドウにプログラム グループを表示するときの順番を示す整数があります。この整数は、 Program ManagerキーのGroupサブキーが示すグループ番号に対応します。

TrueType ユーザーがコントロール パネルの[フォント]アプリケーションで設定できるTrueTypeオプションに対応する値があります。TTEnable値はフラグで、 TrueTypeフォントが使用可能ならば1、 そうでないときは0です。TTonly値はフラグで、 TrueTypeフォントだけを使うときは1、 そうでないときは0です。

WindowsWindowsの設定可能オプションの一部を示す値があります。この値は、 WIN.INIファイルの[windows]セクションに対応します。このキーには、 次に示す値があります。

内容

load Windowsの起動時にアイコン化状態で実行されるアプリケーションのファイル名またはパスとファイル名です。

run Windowsが起動するときに実行されるアプリケーションのファイル名に関連付けられているドキュメントのファイル名または名前です。

NullPort NULLポートです。

Programs 実行可能ファイルを識別するファイル名拡張子です。たとえば、 com exe bat pif cmdのようになります。

レジストリへの情報の格納

レジストリは、 比較的小さな初期化データと構成データを格納するのに適しています。アプリケーションが格納できるデータの種類とサイズには技術的な制限はほとんどありませんが、 実際にはシステムを効率的にするためのガイドラインがいくつかあります。構成データと初期化データはレジストリに格納されますが、 それ以外の情報はほかの場所に格納されなければなりません。

記憶域

一般に、 数Kバイト以上のデータは、 値ではなくファイルとして格納して、 レジストリのキーからそのファイルを参照するようにしてください。また、 大きなデータがレジストリに何度もあらわれるときは、 データをファイルに格納し、 レジストリからはそのファイルを参照するようにしてください。実行可能イメージをレジストリに格納すると、 ユーザーのプロファイルをCPUの異なるコンピュータで使えなくなるため、 実行可能イメージはレジストリに格納しないでください。

レジストリに情報を格納すると、 ファイル システムに情報を格納する場合よりも、 リソースの消費量がかなり少なくなります。1バイトのデータをファイルに格納すると、 512バイトから8000バイトのオーバーヘッドが必要になります。レジストリに格納する場合は、 これよりも非常に効率的です。レジストリの各部分に必要な記憶域のだいたいの量を次の表に示します。

要素 およそのサイズ

セキュリティ記述子20バイトと、 セキュリティ記述子自体のサイズ

38バイトと、 値の名前、 データ

値のリストエントリごとに4バイト

サブキーのリストエントリごとに4または5バイト

キー90バイトと、 この表の上記の項目

値エントリに必要な領域はキーよりもかなり少なく、 セキュリティ記述子のサイズを考慮するととくに少なくなります。記憶域を節約するため、 アプリケーションは、 構造体の各メンバを個別のキーに格納せずに、 同様のデータを構造体としてグループ化し、 その構造体を値としてく格納してください (データをバイナリ形式で格納することによって、 互換性のないデータを1つにまとめて格納できます)。キーはセキュリティ記述子で保護されるため、 個別にアクセス権が必要なときは個別のキーを使ってください。

値エントリ1つのサイズは、 1Mバイトに制限されています。レジストリのサイズはユーザーが構成することができ、 システム リソースにだけ制限されます。デフォルトのレジストリ サイズはシステムのページド プールのサイズの1/4です。

このバージョンのWindows NTでは、 1つのアプリケーションがレジストリに書き込める情報の量には制限はありません。しかし、 記憶容量の問題が発生するのを避けるため、 アプリケーションは、 ここで示されている通りにレジストリを使ってください。

アプリケーションとレジストリ

アプリケーションは、 レジストリに構成データや初期化データを置く前に、 データを2つのカテゴリ (コンピュータ固有データとユーザー固有データ) に分類しなければなりません。この分類を行うことによって、 アプリケーションは複数のユーザーをサポートできます。また、 ユーザー固有データをネットワークを通じて取得し、 ほかの場所にあるデータを使えるようにすることによって、 場所に依存しないプロファイル情報を実現できます。

アプリケーションは、 インストール時に、 コンピュータ固有データをHKEY_LOCAL_MACHINEキーに登録してください。特に、 メーカー名、 製品名、 バージョン番号のキーを次の例のように作成してください。

HKEY_LOCAL_MACHINE\Software\CompanyName\ProductName\Version

OLEをサポートするアプリケーションは、 HKEY_LOCAL_MACHINE\Software\ClassesOLE情報を記録してください。

ユーザー固有データは、 次に示すように、 HKEY_CURRENT_USERキーに格納してください。

HKEY_CURRENT_USER\Software\CompanyName\ProductName\Version\...

このユーザー固有Versionキーのサブキーは、 アプリケーション固有です。

Windows 3.1では、 登録データベースを変更するには、 エントリをリストしたテキスト ファイルを作成してから、 レジストリ エディタ (REGEDT32.EXE) のコマンド ライン オプションを使ってデータベースにそのファイルをマージしていました。Windows NTのレジストリのキーの値のデータ形式は任意であるため、 このレジストリ変更方法はWindows NTではサポートされていません。

レジストリ関数の使用

アプリケーションは、 キーのオープンと作成、 レジストリの問い合わせ、 レジストリへの書き込み、 レジストリ ファイルの操作、 レジストリの情報の削除ができます。

キーのオープン、 作成、 クローズ

キーをオープンしたり作成するときは、 現在オープンされているキーのサブキーとしてオープンまたは作成します。4つの定義済みキー (HKEY_LOCAL_MACHINEHKEY_CLASSES_ROOTHKEY_USERS HKEY_CURRENT_USER) は常にオープンされています。キーをオープンするには、 次に示す関数を使います。

関数 説明

RegOpenKey キーをオープンします。この関数は、 Windowsバージョン3.1との互換性を保つために用意されています。この関数では、 特定のアクセス権を要求できません。

RegOpenKeyEx 指定されたアクセス権でキーをオープンします。

キーを作成するには、 次に示す関数を使います。

関数 説明

RegCreateKey キーを作成またはオープンします。この関数は、 Windowsバージョン3.1との互換性を保つために用意されています。この関数では、 セキュリティ属性を設定できません。

RegCreateKeyEx 指定されたセキュリティ属性とアクセス権でキーを作成またはオープンします。

キーをクローズして、 そのキーの情報をレジストリに書き込むには、 RegCloseKey関数を使います。この関数は、 レジストリに情報を書き込んでから戻るとは限りません。キャッシュがハード ディスクにフラッシュされるには、 最大で数秒かかる場合があります。レジストリ情報を明示的にハード ディスクに書き込むには、 RegFlushKey関数を使ってください。しかし、 RegFlushKeyは大量のシステム リソースを使うため、 必要なときだけ呼び出してください。

レジストリの問い合わせ

通常、 レジストリの情報を問い合わせるには、 必要なキーが見つかるまでキーのサブキーを列挙し、 そのキーに関連付けられている値のデータを取得します。

サブキーを列挙するには、 次に示す関数のいずれかを呼び出します。

関数 説明

RegEnumKey 指定されたキーのサブキーを列挙します。

RegEnumKeyEx 指定されたキーのサブキーを列挙し、 サブキーのクラスを返します。

特定のサブキーに関する詳細な情報を取得するには、 RegQueryInfoKey関数を呼び出してください。RegGetKeySecurity関数は、 キーを保護するセキュリティ記述子のコピーを取得します。セキュリティ記述子について詳しくは、 セキュリティの概要を参照してください。

キーに関連付けられている値を取得するには、 次に示す関数を使います。

関数 説明

RegEnumValue 指定されたキーの値を列挙します。

RegQueryValue 指定されたキーの値を取得します。この関数はWindows 3.1にもありましたが、 バージョン3.1では、 キーには値は1つしかなく、 値に名前はありませんでした。このため、 この関数は、 名前がNULLの値のデータしか取得できません。

RegQueryValueEx 名前付きの値の種類とデータ情報を取得します。通常、 アプリケーションは、 RegEnumValue関数を呼び出して値の名前を調べてから、 RegQueryValueEx関数を呼び出して名前のデータを取得します。

また、 RegQueryValue関数とRegQueryValueEx関数は、 展開されていない環境変数の参照の扱いも異なります。展開されていない環境変数 (%PATH%など) が名前のない値にあると、 RegQueryValueは、 パラメータに指定されている記憶域バッファでその変数を展開します。しかし、 RegQueryValueExは、 このような参照を展開しません (環境変数を展開するには、 ExpandEnvironmentStrings関数を使ってください)

レジストリへの書き込み

値とのそのデータをキーに関連付けるには、 RegSetValue関数かRegSetValueEx関数を使います。RegSetValueWindowsバージョン3.1で追加された関数で、 文字列 (REG_SZタイプ) しか操作できません。しかし、 RegSetValueExは、 任意の種類のデータを持つ値を書き込めます。この2つの関数は、 キーとその値を同時に作成できます。

キーのセキュリティを変更するには、 RegSetKeySecurity関数を使います。セキュリティ記述子について詳しくは、 セキュリティの概要を参照してください。

レジストリ ファイルの操作

アプリケーションは、 レジストリの一部をファイルに保存したり、 そのファイルの内容をレジストリにロードすることができます。この機能は、 大量の情報を操作するときや、 レジストリに多数のエントリを作成するとき、 一時的な情報をロードしてもう一度アンロードしなければならないときに役立ちます。また、 レジストリの一部をバックアップして復元する場合も、 このレジストリ ファイルを使います。

キーとそのサブキー、 値をレジストリ ファイルに保存するには、 RegSaveKey関数を使います。レジストリ ファイルをレジストリに書き戻すには、 次に示す関数のいずれかを呼び出します。

関数 説明

RegLoadKey 指定されたファイルから、 呼び出し側のコンピュータまたはリモート コンピュータのHKEY_USERSHKEY_LOCAL_MACHINEの下の指定されたサブキーへ、 レジストリ情報を読み込みます。この関数は指定されたサブキーを作成します。指定されたサブキーが既に存在する場合、 関数はサブキーの作成に失敗します。

この関数を呼び出した後、 RegUnLoadKey関数を使ってレジストリを元の状態に復元できます。

RegReplaceKey 指定されたファイル内に含まれている情報を使って、 レジストリ内のキー、 キーのサブキーすべて、 値を置き換えます。新しい情報は、 次のシステム起動時に有効になります。

RegRestoreKey 指定されたファイルから、 呼び出し側のコンピュータまたはリモート コンピュータの指定されたキーへ、 レジストリ情報を読み込みます。この関数は、 指定されたキーの下のキーと値を、 ファイル内のトップ レベル キーの下のキーと値に置き換えます。

レジストリの情報の削除

キーから値を削除するには、 RegDeleteValue関数を使います。キーを削除するには、 RegDeleteKey関数を使います。

キーを削除しても、 その最後のハンドルがクローズされるまで、 実際には削除されません。削除したキーの下にサブキーや値を作成することはできません。

キーと値の列挙

次の例は、 RegEnumKey関数、 RegEnumValue関数、 RegQueryInfoKey関数の使い方を示しています。各関数に渡すhKeyパラメータは、 オープンされているキーのハンドルです。このキーは、 関数を呼び出す前にオープンし、 呼び出した後はクローズしなければなりません。

VOID QueryKey(HWND hDlg, HANDLE hKey)

{

CHARachKey[MAX_PATH];

CHARachClass[MAX_PATH] = "";/* buffer for class name*/

DWORDcchClassName = MAX_PATH;/* length of class string*/

DWORDcSubKeys;/* number of subkeys*/

DWORDcbMaxSubKey; /* longest subkey size*/

DWORDcchMaxClass;/* longest class string*/

DWORDcValues;/* number of values for key*/

DWORDcchMaxValue;/* longest value name*/

DWORDcbMaxValueData;/* longest value data*/

DWORDcbSecurityDescriptor; /* size of security descriptor */

FILETIME ftLastWriteTime;/* last write time*/

DWORD i, j;

DWORD retCode, retValue;

CHARachValue[MAX_VALUE_NAME];

DWORD cchValue = MAX_VALUE_NAME;

CHARachBuff[80];

/* Get the class name and the value count. */

RegQueryInfoKey(hKey,/* key handle*/

achClass,/* buffer for class name*/

&cchClassName,/* length of class string*/

NULL,/* reserved*/

&cSubKeys,/* number of subkeys*/

&cbMaxSubKey, /* longest subkey size*/

&cchMaxClass, /* longest class string*/

&cValues,/* number of values for this key */

&cchMaxValue, /* longest value name */

&cbMaxValueData,/* longest value data */

&cbSecurityDescriptor,/* security descriptor*/

&ftLastWriteTime);/* last write time*/

SetDlgItemText(hDlg, IDE_CLASS, achClass);

SetDlgItemInt(hDlg, IDE_CVALUES, cValues, FALSE);

SendMessage(GetDlgItem(hDlg, IDL_LISTBOX),

LB_ADDSTRING, 0, (LONG) "..");

/*

* Loop until RegEnumKey fails. Then get the name of each child

* key and type it into the box.

*/

/* Enumerate the child keys. */

SetCursor(LoadCursor(NULL, IDC_WAIT));

for (i = 0, retCode = ERROR_SUCCESS;

retCode == ERROR_SUCCESS; i++) {

retCode = RegEnumKey(hKey, i, achKey, MAX_PATH);

if (retCode == (DWORD)ERROR_SUCCESS)

SendMessage(GetDlgItem(hDlg, IDL_LISTBOX),

LB_ADDSTRING, 0, (LONG) achKey);

}

SetCursor(LoadCursor (NULL, IDC_ARROW));

/* Enumerate the key values. */

SetCursor(LoadCursor(NULL, IDC_WAIT));

if (cValues)

for (j = 0, retValue = ERROR_SUCCESS;

j < cValues; j++) {

cchValue = MAX_VALUE_NAME;

achValue[0] = '\0';

retValue = RegEnumValue(hKey, j, achValue,

&cchValue,

NULL,

NULL,/* &dwType, */

NULL,/* &bData, */

NULL); /* &bcData*/

.ifndef REF

if (retValue != (DWORD) ERROR_SUCCESS &&

retValue != ERROR_INSUFFICIENT_BUFFER) {

wsprintf (achBuff,

"Line:%d 0 based index = %d, retValue = %d, "

"ValueLen = %d",

__LINE__, j, retValue, cchValue);

MessageBox (hDlg, achBuff, "Debug", MB_OK);

}

achBuff[0] = '\0';

.endif

/* Add each value to a list box. */

if (!lstrlen(achValue))

lstrcpy(achValue, "<NO NAME>");

wsprintf(achBuff, "%d) %s ", j, achValue);

SendMessage(GetDlgItem(hDlg,IDL_LISTBOX2),

LB_ADDSTRING, 0, (LONG) achBuff);

}

SetCursor(LoadCursor(NULL, IDC_ARROW));

}

レジストリと初期化ファイルの関数

関数とメッセージ

レジストリと初期化ファイルに関する関数とメッセージを次に示します。

関数

GetPrivateProfileInt

GetPrivateProfileSection

GetPrivateProfileString

GetProfileInt

GetProfileSection

GetProfileString

RegCloseKey

RegConnectRegistry

RegCreateKey

RegCreateKeyEx

RegDeleteKey

RegDeleteValue

RegEnumKey

RegEnumKeyEx

RegEnumValue

RegFlushKey

RegGetKeySecurity

RegLoadKey

RegNotifyChangeKeyValue

RegOpenKey

RegOpenKeyEx

RegQueryInfoKey

RegQueryValue

RegQueryValueEx

RegReplaceKey

RegRestoreKey

RegSaveKey

RegSetKeySecurity

RegSetValue

RegSetValueEx

RegUnLoadKey

WritePrivateProfileSection

WritePrivateProfileString

WriteProfileSection

WriteProfileString

メッセージ

WM_DEVMODECHANGE

WM_WININICHANGE

▲ページトップに戻る

【本を読んでもよくらからない】 … 個別指導でわかりやすくお教えします
inserted by FC2 system