DEVPROP_TYPE_STRING_INDIRECT
DEVPROP_TYPE_STRING_INDIRECT 識別子は、間接参照された文字列を含み NULL で終わる Unicode 文字列の基本データ型識別子を表します。
解説
間接参照された文字列は、実際の文字列を含む文字列リソースを表します。 間接参照された文字列は、次のいずれかの形式で表示されます。
@[path\]FileName,-ResourceID
Windows によって、パスと FileName エントリで指定されたモジュールから文字列が抽出され、その文字列のリソース識別子が ResourceID エントリによって提供されます (必須の負符号を除く)。 文字列リソースは、呼び出し元の優先 UI 言語のいずれかに最も一致するモジュール リソースのセクションから読み込まれます。 パスのエントリはオプションです。 パスのエントリを指定する場合、モジュールはシステム定義の検索パスにあるディレクトリに配置する必要があります。
@InfName,%strkey%
Windows によって、InfName エントリによって名前が指定された %SystemRoot%\inf ディレクトリの中の INF 文字列 セクションから文字列が抽出されます。 strkey トークンの識別子は、呼び出し元の優先 UI 言語のいずれかに最も一致する 文字列 セクション内の行のキーと一致する必要があります。 言語固有の文字列セクションが存在しない場合、Windows では既定の文字列セクションを使用します。
プロパティ データ型修飾子と DEVPROP_TYPE_STRING_INDIRECT を組み合わせることはできません。
この型のプロパティを設定する
基本データ型が DEVPROP_TYPE_STRING_INDIRECT であるプロパティを設定するには、対応する SetupDiSetXxx のプロパティ関数を呼び出し、関数の入力パラメーターを次のように設定します。
PropertyType パラメーターを DEVPROP_TYPE_STRING_INDIRECT に設定します。
PropertyBuffer パラメーターを、文字列の間接参照を指定する文字列で NULL で終わる文字列を含むバッファーを指すポインターに設定します。
PropertyBufferSize パラメーターを、文字列のサイズ (バイト単位) に設定します。
必要に応じて他の関数パラメーターを設定し、プロパティを設定してください。
このプロパティ型の値を取得する
アプリケーションが SetupDiGetXxx のプロパティ関数を呼び出してこの基本データ型のプロパティの値を取得すると、Windows ではプロパティが参照する実際の文字列が検索されます。 実際の文字列を取得できる場合、呼び出し元に実際の文字列が返され、取得したプロパティの基本データ型が DEVPROP_TYPE_STRING として識別されます。 それ以外の場合は間接参照された文字列が返され、取得したプロパティの基本データ型が DEVPROP_TYPE_STRING_INDIRECT として識別されます。
静的テキストのローカライズ
Windows Vista 以降では、静的テキストのプロパティの型を DEVPROP_TYPE_STRING_INDIRECT に設定することで、PE イメージの文字列またはリソース テーブルにあるリソースを使用して、カスタムもしくは標準的な文字列型の PnP 静的テキストのプロパティをローカライズできます。 静的テキストとして書式設定できるようなローカライズされていない置換文字列データも、追加することができます。
PE イメージの STRINGTABLE リソース内にある文字列 (通常は LoadString によって実行されます) には、次の形式が使われている必要があります。
"@"System32\mydll.dll,-21[;Fallback" String]"
"@System32\mydll.dll,-21[;Fallback String with %1, %2, … to %n[;(Arg1,Arg2,...,ArgN)]]"
PE イメージのメッセージ テーブルのリソース内にある文字列 (通常は RtlFindMessage によって実行され、ドライバーでよく使用されます) は、次の形式が使用されている必要があります。
"@System32\drivers\mydriver.sys,#21[;Fallback String]"
"@System32\drivers\mydriver.sys,#21[;Fallback String with %1, %2, … to %n[;(Arg1,Arg2,...,ArgN)]]"
「Fallback String」は省略可能ですが、リソースが見つからない場合や読み込まれていない場合に返ってくる可能性があるため便利です。 フォールバック文字列は、ユーザーを偽装していない非対話型のシステム プロセスに対しても返されるため、ローカライズされたテキストをユーザーに表示することはできません。
この手法を使用すると、呼び出し元のロケールに最も一致する文字列またはメッセージ テーブルのリソースからプルされた静的テキストをローカライズできます。
Windows では、それぞれのリソース テーブルから取得されるときに、末尾の引数を文字列 (またはフォールバック文字列) に書式設定します。これは RtlFormatMessage と同じ方法です。
カスタムおよび標準の文字列型 PnP 静的テキストは、設定操作を実行するコンポーネントからリソースを読み込んでプロパティを設定するとローカライズされます。これは通常、システムレベルのコンポーネントにおいてシステム既定のロケールで行われます。
注: PE イメージでは、どちらの種類のリソース テーブルでも (STRINGTABLE リソースまたはメッセージ テーブルのリソース) 使用できます。
要件
バージョン |
Windows Vista 以降のバージョンの Windows。 |
ヘッダー |
Devpropdef.h (Devpropdef.h を含む) |