Win32 API 日本語リファレンス
ホームUI.Shell › KNOWNFOLDER_DEFINITION

KNOWNFOLDER_DEFINITION

構造体
サイズx64: 112 バイト / x86: 76 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
categoryKF_CATEGORY4+0+0既知フォルダのカテゴリ(仮想・固定・共通・ユーザー単位)。
pszNameLPWSTR8/4+8+4既知フォルダの正規名(非ローカライズ、Unicode)。
pszDescriptionLPWSTR8/4+16+8フォルダの説明文(Unicode)。
fidParentGUID16+24+12親既知フォルダのGUID。ルートの場合は空。
pszRelativePathLPWSTR8/4+40+28親フォルダからの相対パス(Unicode)。NULL可。
pszParsingNameLPWSTR8/4+48+32フォルダの解析名(GUID表現やパス、Unicode)。
pszTooltipLPWSTR8/4+56+36フォルダのツールチップ文字列(Unicode)。NULL可。
pszLocalizedNameLPWSTR8/4+64+40ローカライズ名のリソース参照文字列(Unicode)。NULL可。
pszIconLPWSTR8/4+72+44アイコンリソースの参照文字列(Unicode)。NULL可。
pszSecurityLPWSTR8/4+80+48既定のセキュリティ記述子(SDDL文字列)。NULL可。
dwAttributesDWORD4+88+52フォルダのファイルシステム属性(FILE_ATTRIBUTE_定数)。
kfdFlagsDWORD4+92+56既知フォルダ定義のフラグ(KF_DEFINITION_FLAG_定数)。
ftidTypeGUID16+96+60フォルダの種別を示すGUID(汎用・ライブラリ等)。

各言語での定義

#include <windows.h>

// KNOWNFOLDER_DEFINITION  (x64 112 / x86 76 バイト)
typedef struct KNOWNFOLDER_DEFINITION {
    KF_CATEGORY category;
    LPWSTR pszName;
    LPWSTR pszDescription;
    GUID fidParent;
    LPWSTR pszRelativePath;
    LPWSTR pszParsingName;
    LPWSTR pszTooltip;
    LPWSTR pszLocalizedName;
    LPWSTR pszIcon;
    LPWSTR pszSecurity;
    DWORD dwAttributes;
    DWORD kfdFlags;
    GUID ftidType;
} KNOWNFOLDER_DEFINITION;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KNOWNFOLDER_DEFINITION
{
    public int category;
    public IntPtr pszName;
    public IntPtr pszDescription;
    public Guid fidParent;
    public IntPtr pszRelativePath;
    public IntPtr pszParsingName;
    public IntPtr pszTooltip;
    public IntPtr pszLocalizedName;
    public IntPtr pszIcon;
    public IntPtr pszSecurity;
    public uint dwAttributes;
    public uint kfdFlags;
    public Guid ftidType;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KNOWNFOLDER_DEFINITION
    Public category As Integer
    Public pszName As IntPtr
    Public pszDescription As IntPtr
    Public fidParent As Guid
    Public pszRelativePath As IntPtr
    Public pszParsingName As IntPtr
    Public pszTooltip As IntPtr
    Public pszLocalizedName As IntPtr
    Public pszIcon As IntPtr
    Public pszSecurity As IntPtr
    Public dwAttributes As UInteger
    Public kfdFlags As UInteger
    Public ftidType As Guid
End Structure
import ctypes
from ctypes import wintypes

class KNOWNFOLDER_DEFINITION(ctypes.Structure):
    _fields_ = [
        ("category", ctypes.c_int),
        ("pszName", ctypes.c_void_p),
        ("pszDescription", ctypes.c_void_p),
        ("fidParent", GUID),
        ("pszRelativePath", ctypes.c_void_p),
        ("pszParsingName", ctypes.c_void_p),
        ("pszTooltip", ctypes.c_void_p),
        ("pszLocalizedName", ctypes.c_void_p),
        ("pszIcon", ctypes.c_void_p),
        ("pszSecurity", ctypes.c_void_p),
        ("dwAttributes", wintypes.DWORD),
        ("kfdFlags", wintypes.DWORD),
        ("ftidType", GUID),
    ]
#[repr(C)]
pub struct KNOWNFOLDER_DEFINITION {
    pub category: i32,
    pub pszName: *mut core::ffi::c_void,
    pub pszDescription: *mut core::ffi::c_void,
    pub fidParent: GUID,
    pub pszRelativePath: *mut core::ffi::c_void,
    pub pszParsingName: *mut core::ffi::c_void,
    pub pszTooltip: *mut core::ffi::c_void,
    pub pszLocalizedName: *mut core::ffi::c_void,
    pub pszIcon: *mut core::ffi::c_void,
    pub pszSecurity: *mut core::ffi::c_void,
    pub dwAttributes: u32,
    pub kfdFlags: u32,
    pub ftidType: GUID,
}
import "golang.org/x/sys/windows"

type KNOWNFOLDER_DEFINITION struct {
	category int32
	pszName uintptr
	pszDescription uintptr
	fidParent windows.GUID
	pszRelativePath uintptr
	pszParsingName uintptr
	pszTooltip uintptr
	pszLocalizedName uintptr
	pszIcon uintptr
	pszSecurity uintptr
	dwAttributes uint32
	kfdFlags uint32
	ftidType windows.GUID
}
type
  KNOWNFOLDER_DEFINITION = record
    category: Integer;
    pszName: Pointer;
    pszDescription: Pointer;
    fidParent: TGUID;
    pszRelativePath: Pointer;
    pszParsingName: Pointer;
    pszTooltip: Pointer;
    pszLocalizedName: Pointer;
    pszIcon: Pointer;
    pszSecurity: Pointer;
    dwAttributes: DWORD;
    kfdFlags: DWORD;
    ftidType: TGUID;
  end;
const KNOWNFOLDER_DEFINITION = extern struct {
    category: i32,
    pszName: ?*anyopaque,
    pszDescription: ?*anyopaque,
    fidParent: GUID,
    pszRelativePath: ?*anyopaque,
    pszParsingName: ?*anyopaque,
    pszTooltip: ?*anyopaque,
    pszLocalizedName: ?*anyopaque,
    pszIcon: ?*anyopaque,
    pszSecurity: ?*anyopaque,
    dwAttributes: u32,
    kfdFlags: u32,
    ftidType: GUID,
};
type
  KNOWNFOLDER_DEFINITION {.bycopy.} = object
    category: int32
    pszName: pointer
    pszDescription: pointer
    fidParent: GUID
    pszRelativePath: pointer
    pszParsingName: pointer
    pszTooltip: pointer
    pszLocalizedName: pointer
    pszIcon: pointer
    pszSecurity: pointer
    dwAttributes: uint32
    kfdFlags: uint32
    ftidType: GUID
struct KNOWNFOLDER_DEFINITION
{
    int category;
    void* pszName;
    void* pszDescription;
    GUID fidParent;
    void* pszRelativePath;
    void* pszParsingName;
    void* pszTooltip;
    void* pszLocalizedName;
    void* pszIcon;
    void* pszSecurity;
    uint dwAttributes;
    uint kfdFlags;
    GUID ftidType;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; KNOWNFOLDER_DEFINITION サイズ: 76 バイト(x86)
dim st, 19    ; 4byte整数×19(構造体サイズ 76 / 4 切り上げ)
; category : KF_CATEGORY (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pszName : LPWSTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; pszDescription : LPWSTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; fidParent : GUID (+12, 16byte)  varptr(st)+12 を基点に操作(16byte:入れ子/配列)
; pszRelativePath : LPWSTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; pszParsingName : LPWSTR (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; pszTooltip : LPWSTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; pszLocalizedName : LPWSTR (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; pszIcon : LPWSTR (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; pszSecurity : LPWSTR (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwAttributes : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; kfdFlags : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ftidType : GUID (+60, 16byte)  varptr(st)+60 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; KNOWNFOLDER_DEFINITION サイズ: 112 バイト(x64)
dim st, 28    ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; category : KF_CATEGORY (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pszName : LPWSTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pszDescription : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; fidParent : GUID (+24, 16byte)  varptr(st)+24 を基点に操作(16byte:入れ子/配列)
; pszRelativePath : LPWSTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; pszParsingName : LPWSTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; pszTooltip : LPWSTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; pszLocalizedName : LPWSTR (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; pszIcon : LPWSTR (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; pszSecurity : LPWSTR (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; dwAttributes : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; kfdFlags : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; ftidType : GUID (+96, 16byte)  varptr(st)+96 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global KNOWNFOLDER_DEFINITION
    #field int category
    #field intptr pszName
    #field intptr pszDescription
    #field GUID fidParent
    #field intptr pszRelativePath
    #field intptr pszParsingName
    #field intptr pszTooltip
    #field intptr pszLocalizedName
    #field intptr pszIcon
    #field intptr pszSecurity
    #field int dwAttributes
    #field int kfdFlags
    #field GUID ftidType
#endstruct

stdim st, KNOWNFOLDER_DEFINITION        ; NSTRUCT 変数を確保
st->category = 100
mes "category=" + st->category