shtypes.h (ITEMIDLIST 結構)

包含項目識別碼的清單。

語法

typedef struct _ITEMIDLIST {
  SHITEMID mkid;
} ITEMIDLIST;

成員

mkid

類型: SHITEMID

項目識別碼的清單。

備註

這個結構的指標稱為 PIDL,可用來識別 Shell 命名空間中的物件。 如需專案標識碼清單指標 () 和專案標識碼的詳細資訊,請參閱 Shell命名空間簡介

ITEMIDLIST Strict 類型

從 Windows Vista 起,有數種 形式的 ITEMIDLIST 可作為數據類型使用。 這三個主要類型包括:
  • IDLIST_ABSOLUTE:與命名空間根目錄相對的完整 ITEMIDLIST 。 可能是多層級的。
  • IDLIST_RELATIVE:相對於父資料夾 的ITEMIDLIST 。 可能是多層級的。
  • ITEMID_CHILD:相對於父資料夾的單一層級 ITEMIDLIST 。 它只包含一個 SHITEMID 結構。
如果您在包含Shell頭檔之前,使用符號STRICT_TYPED_ITEMIDS編譯程式代碼,就會使用這些類型,如下列範例程式代碼所示。

#define STRICT_TYPED_ITEMIDS    // Better type safety for IDLists

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

您可以使用下列一或多個修飾詞來改變這些類型的意義:

  • 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 的結果。 它只包含一個 SHITEMID 結構。
  • 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 [僅限桌面應用程式]
標頭 shtypes.h