予約済みプロパティ識別子
予約済みプロパティ識別子は、プロパティ識別子 (ID) として使用できません。 0、1、および 0x80000000 以上の値を除き、任意のプロパティ識別子 (ID) を使用できます。 これらのプロパティ識別子の値は、アプリケーションで使用するために予約されています。
次の表に、予約済みプロパティ ID と、プロパティ ID の予約対象の説明を示します。
予約済みプロパティ ID | 説明 |
---|---|
0 | オプションの プロパティ セット表示名ディクショナリを作成するために予約されています。 これにより、プロパティ セットのユーザーは、型インジケーターによって提供されるプロパティを超えて、プロパティに意味を付けることができます。 |
1 | プロパティ セット内の文字列を解釈するときに使用するコード ページ (Windows) またはスクリプト (Macintosh) のインジケーターとして予約されています。 プロパティ セット内のすべての文字列値は、同じコード ページで格納する必要があります。 プロパティ セット ヘッダーの元のオペレーティング システム値 (PROPERTYSETHEADER::d wOSVer) は、コード ページ インジケーターが Windows コード ページと Macintosh スクリプトのどちらに対応するかを決定します。 |
0x80000000 | プロパティ セットが書き込まれるロケールを示すものとして予約されています。 プロパティ セットの既定のロケールは、システムの既定のロケール (LOCALE_SYSTEM_DEFAULT) です。 LOCALE_SYSTEM_DEFAULTの詳細については、Win32 API に関するページを参照してください。 既定値は、ロケール インジケーターがプロパティ セットに存在しない場合に使用されます。 |
0x80000003 | プロパティ セットの動作を示すインジケーターとして予約されています。 このプロパティ ID 値はVT_UI4であり、値VT_UI4含む DWORD データ型で始まり、その後にプロパティ セットの動作を示す DWORD が続きます。 現在、この値で定義されているビットは下位ビット (0x1) のみです。 このビットが設定されている場合は、プロパティ ID 0 で示されるプロパティ セット名を大文字と小文字を区別する必要があることを示します。 このビットが設定されていない場合、または動作プロパティ (ID 0x80000003) が存在しない場合、名前は大文字と小文字を区別しないと見なす必要があります。 |
0xFFFFFFFF | プログラミングの利便性のために予約されています。 シリアル化されたプロパティ セットには表示されません。 |
上位ビットセット (つまり負の値) を持つプロパティ識別子は、Microsoft が将来使用するために予約されています。
予約済みプロパティのうち、0xBFFFFFFFに0x80000000範囲の ID 値を持つプロパティは、その意味を理解していない実装では読み取り専用と見なされます。 たとえば、実装がプロパティ0x80000000の意味を理解していない場合は、そのプロパティを読み取るが書き込んだり削除したりできないようにする必要があります。 このような実装では、0xC0000000範囲内のプロパティを読み取り、書き込み、または削除0xFFFFFFFEできるようにする必要があります。 プロパティ ID 0xFFFFFFFFは予約値であり、シリアル化されたプロパティ セットには含めてはいけません。
プロパティ セットのロケール
アプリケーションでは、ロケールをサポートするか、既定の動作を使用するかを選択できます。 アプリケーションでは、ユーザーが作業ロケールを指定できるようにすることをお勧めします。 このようなアプリケーションでは、ユーザー指定のロケール識別子を プロパティに書き込む必要があります。 ユーザーの既定のロケール (LOCALE_USER_DEFAULT) を使用するアプリケーションでは、ユーザーの既定のロケール識別子を プロパティに書き込む必要があります。 LOCALE_USER_DEFAULTの詳細については、Win32 API に関するページを参照してください。
Note
プロパティ セットを作成するために IPropertySetStorage インターフェイスを使用する場合、ユーザーの既定のロケールは自動的にロケール インジケーターとして書き込まれます。
また、アプリケーションでは、ロケールがアプリケーション ロケール、ユーザー ロケール、またはシステム ロケールではない外部オブジェクトのケースも処理する必要があります。
ロケール インジケーター プロパティは VT_U14 型であるため、Win32 API で定義されているように、VT_U14を含む DWORD の後にロケール識別子 (LCID) を含む DWORD で構成されます。
コード ページ インジケーター
プロパティ セットの作成者ではないアプリケーションが、セット内の string 型のプロパティを変更する場合は、コード ページ インジケーターを調べて、次のいずれかのアクションを実行する必要があります。
- コード ページ インジケーターで指定された形式で文字列を書き込みます。
- を置き換えて書き換えて、コード ページを変更します。
アプリケーションがこのインジケーターを認識できない場合は、 プロパティを変更しないでください。 プロパティ セットのすべての作成者は、コード ページ インジケーターを記述する必要があります。ただし、コード ページ インジケーターが存在しない場合は、リーダーのコンピューター上の一般的なコード ページを想定する必要があります。
Note
プロパティ セットの作成に IPropertySetStorage インターフェイスを使用すると、コード ページ インジケーターが自動的に書き込まれます。
コード ページで使用できる値は、Win32 API (詳細については 、GetACP 関数を参照) と Inside Macintosh Volume VI (14 から 111 ページ) で指定できます。 (これらのリソースは、一部の言語や国では使用できない場合があります)。たとえば、コード ページ US ANSI は0x04E4 (10 進数では 1252) で表され、Unicode のコード ページは0x04B0 (10 進数では 1200) です。
可能な場合は Unicode コード ページを使用し、VT_LPSTRではなく VT_LPWSTR を使用して、ストレージと取得中のマルチバイト <-> Unicode 変換を回避することをお勧めします。 世界中で相互運用可能なプロパティ セットを実現する唯一の方法は、すべてのプロパティ セットに同じコード ページを使用することです。 Unicode コード ページまたは Unicode 以外のコード ページでは、VT_LPSTRまたはVT_BSTRの開始時のカウントは バイト 数であり、 文字数 ではないことに注意してください。 このバイト数には、文字列の末尾にある 1 つまたは 2 つのゼロ バイト (文字列の NULL 終端記号) が含まれます。
プロパティ ID 1 はVT_I2型であり、コード ページを示す SHORT VT_I2値を含む DWORD で始まります。