ITEMIDLIST 構造体 (shtypes.h)

アイテム識別子の一覧を格納します。

構文

typedef struct _ITEMIDLIST {
  SHITEMID mkid;
} ITEMIDLIST;

メンバー

mkid

種類: SHITEMID

アイテム識別子の一覧。

注釈

この構造体へのポインターは、 PIDL と呼ばれ、シェル名前空間内のオブジェクトを識別するために使用されます。 項目識別子リスト (PIDL) と項目識別子へのポインターの詳細については、「 シェル名前空間の概要」を参照してください。

ITEMIDLIST 厳密な型

Windows Vista の時点では、データ型としていくつかの形式の ITEMIDLIST を使用できます。 3 つのメインの種類は次のとおりです。
  • IDLIST_ABSOLUTE: 名前空間のルートを基準とした完全修飾 ITEMIDLIST 。 複数レベルの場合があります。
  • IDLIST_RELATIVE: 親フォルダーを基準とした ITEMIDLIST 。 複数レベルの場合があります。
  • ITEMID_CHILD: 親フォルダーに対する単一レベル の ITEMIDLIST 。 それはちょうど1つの SITEMID構造を 含みます。
これらの型は、次のコード例に示すように、シェル ヘッダー ファイルを含める前に、シンボル STRICT_TYPED_ITEMIDSを使用してコードをコンパイルする場合に使用されます。

#define STRICT_TYPED_ITEMIDS    // Better type safety for IDLists

#include <shlobj.h>             // Typical Shell header file

これらの各型の意味は、次の修飾子の 1 つ以上で変更できます。

  • P: 型はポインターです。
  • C: 型は定数です。
  • U: 型が整列されていません。 32 ビット アーキテクチャでは DWORD 境界、64 ビット アーキテクチャでは QWORD 境界に配置されます。
これらの変更された型の例を次に示します。
  • PIDLIST_ABSOLUTE: ITEMIDLIST は絶対であり、非定数であることが示すように割り当てられています。 つまり、 ILFree は不要になったときに割り当てを解除する必要があります。 割り当てられたメモリへの直接ポインターであるため、配置されます。
  • PCIDLIST_ABSOLUTE: ITEMIDLIST は絶対および定数です。 これは通常、絶対 ITEMIDLIST をパラメーターとして渡されたが、それを所有していない場合に使用されるため、変更することはできません。
  • PCUIDLIST_ABSOLUTE: ITEMIDLIST は絶対、定数、整列されていません。 これはまれに使用されます。 絶対 ITEMIDLIST は、通常、32 ビット アーキテクチャの DWORD 境界と 64 ビット アーキテクチャの QWORD 境界にアラインされたメモリに割り当てられます。 絶対 ITEMIDLIST は、シリアル化形式などの他のデータと共にバイトパックされている場合にのみ、整列されません。
  • PITEMID_CHILD: ITEMIDLIST は、親フォルダーに対して割り当てられた子 ITEMIDLIST ( IEnumIDList::Next の結果など) です。 それはちょうど1つの SITEMID構造を 含みます。
  • PCUITEMID_CHILD: 子 ITEMIDLIST は相対、定数、および整列されていません。 これは、多くの場合、既存の PIDL の一部へのポインターを取得するときに発生します。 たとえば、絶対 PIDL があり、 ILFindLastID を呼び出すと、リスト内の最後の子 SHITEMID へのポインターが返されます。 バイト パック PIDL では、個々の SHITEMID 構造体がバイト境界に含まれないため、アラインされていません。 このような子 PIDL への参照は、メモリが絶対 PIDL によって所有されるため、常に一定です。
  • PCITEMID_CHILD: 子 ITEMIDLIST は定数で配置されます。 これは、子 PIDL として通常、より大きな PIDL の一部であるため、バイト境界にアラインされないため、ほとんど使用されません。
  • PUITEMID_CHILD: 子 ITEMIDLIST が整列されていません。 これは、この ITEMIDLIST のメモリが親 PIDL によって所有されているため、ほとんど使用されません。これは絶対です。 つまり、変更は親 PIDL に対してのみ行うことができるため、子 PIDL は定数である必要があります。
このリストは全てを網羅しているわけではありません。 他の型も存在できます。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
Header shtypes.h