KNOWNFOLDER_DEFINITION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| category | KF_CATEGORY | 4 | +0 | +0 | 既知フォルダのカテゴリ(仮想・固定・共通・ユーザー単位)。 |
| pszName | LPWSTR | 8/4 | +8 | +4 | 既知フォルダの正規名(非ローカライズ、Unicode)。 |
| pszDescription | LPWSTR | 8/4 | +16 | +8 | フォルダの説明文(Unicode)。 |
| fidParent | GUID | 16 | +24 | +12 | 親既知フォルダのGUID。ルートの場合は空。 |
| pszRelativePath | LPWSTR | 8/4 | +40 | +28 | 親フォルダからの相対パス(Unicode)。NULL可。 |
| pszParsingName | LPWSTR | 8/4 | +48 | +32 | フォルダの解析名(GUID表現やパス、Unicode)。 |
| pszTooltip | LPWSTR | 8/4 | +56 | +36 | フォルダのツールチップ文字列(Unicode)。NULL可。 |
| pszLocalizedName | LPWSTR | 8/4 | +64 | +40 | ローカライズ名のリソース参照文字列(Unicode)。NULL可。 |
| pszIcon | LPWSTR | 8/4 | +72 | +44 | アイコンリソースの参照文字列(Unicode)。NULL可。 |
| pszSecurity | LPWSTR | 8/4 | +80 | +48 | 既定のセキュリティ記述子(SDDL文字列)。NULL可。 |
| dwAttributes | DWORD | 4 | +88 | +52 | フォルダのファイルシステム属性(FILE_ATTRIBUTE_定数)。 |
| kfdFlags | DWORD | 4 | +92 | +56 | 既知フォルダ定義のフラグ(KF_DEFINITION_FLAG_定数)。 |
| ftidType | GUID | 16 | +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 Structureimport 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: GUIDstruct 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