ITEMIDLIST 구조체(shtypes.h)

항목 식별자 목록을 포함합니다.

구문

typedef struct _ITEMIDLIST {
  SHITEMID mkid;
} ITEMIDLIST;

멤버

mkid

형식: SHITEMID

항목 식별자 목록입니다.

설명

PIDL이라고 하는 이 구조체에 대한 포인터는 셸 네임스페이스의 개체를 식별하는 데 사용됩니다. PIDL(항목 식별자 목록) 및 항목 식별자에 대한 포인터에 대한 자세한 내용은 셸 네임스페이스 소개를 참조하세요.

ITEMIDLIST Strict 형식

Windows Vista를 기준으로 여러 형태의 ITEMIDLIST 를 데이터 형식으로 사용할 수 있습니다. 세 가지 기본 유형은 다음과 같습니다.
  • IDLIST_ABSOLUTE: 네임스페이스의 루트를 기준으로 정규화된 ITEMIDLIST 입니다. 다중 수준일 수 있습니다.
  • IDLIST_RELATIVE: 부모 폴더를 기준으로 하는 ITEMIDLIST 입니다. 다중 수준일 수 있습니다.
  • ITEMID_CHILD: 부모 폴더를 기준으로 하는 단일 수준 ITEMIDLIST 입니다. 정확히 하나의 SHITEMID 구조체가 포함되어 있습니다.
이러한 형식은 다음 예제 코드와 같이 셸 헤더 파일을 포함하기 전에 기호 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 는 serialization 형식과 같은 다른 데이터와 함께 바이트로 압축된 경우에만 정렬되지 않습니다.
  • PITEMID_CHILD: ITEMIDLISTIEnumIDList::Next의 결과와 같이 부모 폴더를 기준으로 할당된 자식 ITEMIDLIST입니다. 정확히 하나의 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