ホーム › Security.Authorization › EXPLICIT_ACCESS_W
EXPLICIT_ACCESS_W
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| grfAccessPermissions | DWORD | 4 | +0 | +0 | 付与または拒否するアクセス権のビットマスク。 |
| grfAccessMode | ACCESS_MODE | 4 | +4 | +4 | アクセスの許可/拒否/監査等を示すACCESS_MODE値。 |
| grfInheritance | ACE_FLAGS | 4 | +8 | +8 | 子オブジェクトへの継承方法を示すACE_FLAGSビット値。 |
| Trustee | TRUSTEE_W | 32/20 | +16 | +12 | アクセス権が適用される対象トラスティ(Unicode)。 |
各言語での定義
#include <windows.h>
// TRUSTEE_W (x64 32 / x86 20 バイト)
typedef struct TRUSTEE_W {
TRUSTEE_W* pMultipleTrustee;
MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
TRUSTEE_FORM TrusteeForm;
TRUSTEE_TYPE TrusteeType;
LPWSTR ptstrName;
} TRUSTEE_W;
// EXPLICIT_ACCESS_W (x64 48 / x86 32 バイト)
typedef struct EXPLICIT_ACCESS_W {
DWORD grfAccessPermissions;
ACCESS_MODE grfAccessMode;
ACE_FLAGS grfInheritance;
TRUSTEE_W Trustee;
} EXPLICIT_ACCESS_W;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct TRUSTEE_W
{
public IntPtr pMultipleTrustee;
public int MultipleTrusteeOperation;
public int TrusteeForm;
public int TrusteeType;
public IntPtr ptstrName;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct EXPLICIT_ACCESS_W
{
public uint grfAccessPermissions;
public int grfAccessMode;
public uint grfInheritance;
public TRUSTEE_W Trustee;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure TRUSTEE_W
Public pMultipleTrustee As IntPtr
Public MultipleTrusteeOperation As Integer
Public TrusteeForm As Integer
Public TrusteeType As Integer
Public ptstrName As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure EXPLICIT_ACCESS_W
Public grfAccessPermissions As UInteger
Public grfAccessMode As Integer
Public grfInheritance As UInteger
Public Trustee As TRUSTEE_W
End Structureimport ctypes
from ctypes import wintypes
class TRUSTEE_W(ctypes.Structure):
_fields_ = [
("pMultipleTrustee", ctypes.c_void_p),
("MultipleTrusteeOperation", ctypes.c_int),
("TrusteeForm", ctypes.c_int),
("TrusteeType", ctypes.c_int),
("ptstrName", ctypes.c_void_p),
]
class EXPLICIT_ACCESS_W(ctypes.Structure):
_fields_ = [
("grfAccessPermissions", wintypes.DWORD),
("grfAccessMode", ctypes.c_int),
("grfInheritance", wintypes.DWORD),
("Trustee", TRUSTEE_W),
]#[repr(C)]
pub struct TRUSTEE_W {
pub pMultipleTrustee: *mut core::ffi::c_void,
pub MultipleTrusteeOperation: i32,
pub TrusteeForm: i32,
pub TrusteeType: i32,
pub ptstrName: *mut core::ffi::c_void,
}
#[repr(C)]
pub struct EXPLICIT_ACCESS_W {
pub grfAccessPermissions: u32,
pub grfAccessMode: i32,
pub grfInheritance: u32,
pub Trustee: TRUSTEE_W,
}import "golang.org/x/sys/windows"
type TRUSTEE_W struct {
pMultipleTrustee uintptr
MultipleTrusteeOperation int32
TrusteeForm int32
TrusteeType int32
ptstrName uintptr
}
type EXPLICIT_ACCESS_W struct {
grfAccessPermissions uint32
grfAccessMode int32
grfInheritance uint32
Trustee TRUSTEE_W
}type
TRUSTEE_W = record
pMultipleTrustee: Pointer;
MultipleTrusteeOperation: Integer;
TrusteeForm: Integer;
TrusteeType: Integer;
ptstrName: Pointer;
end;
EXPLICIT_ACCESS_W = record
grfAccessPermissions: DWORD;
grfAccessMode: Integer;
grfInheritance: DWORD;
Trustee: TRUSTEE_W;
end;const TRUSTEE_W = extern struct {
pMultipleTrustee: ?*anyopaque,
MultipleTrusteeOperation: i32,
TrusteeForm: i32,
TrusteeType: i32,
ptstrName: ?*anyopaque,
};
const EXPLICIT_ACCESS_W = extern struct {
grfAccessPermissions: u32,
grfAccessMode: i32,
grfInheritance: u32,
Trustee: TRUSTEE_W,
};type
TRUSTEE_W {.bycopy.} = object
pMultipleTrustee: pointer
MultipleTrusteeOperation: int32
TrusteeForm: int32
TrusteeType: int32
ptstrName: pointer
EXPLICIT_ACCESS_W {.bycopy.} = object
grfAccessPermissions: uint32
grfAccessMode: int32
grfInheritance: uint32
Trustee: TRUSTEE_Wstruct TRUSTEE_W
{
void* pMultipleTrustee;
int MultipleTrusteeOperation;
int TrusteeForm;
int TrusteeType;
void* ptstrName;
}
struct EXPLICIT_ACCESS_W
{
uint grfAccessPermissions;
int grfAccessMode;
uint grfInheritance;
TRUSTEE_W Trustee;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; EXPLICIT_ACCESS_W サイズ: 32 バイト(x86)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; grfAccessPermissions : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; grfAccessMode : ACCESS_MODE (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; grfInheritance : ACE_FLAGS (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; Trustee : TRUSTEE_W (+12, 20byte) varptr(st)+12 を基点に操作(20byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; EXPLICIT_ACCESS_W サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; grfAccessPermissions : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; grfAccessMode : ACCESS_MODE (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; grfInheritance : ACE_FLAGS (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; Trustee : TRUSTEE_W (+16, 32byte) varptr(st)+16 を基点に操作(32byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global TRUSTEE_W
#field intptr pMultipleTrustee
#field int MultipleTrusteeOperation
#field int TrusteeForm
#field int TrusteeType
#field intptr ptstrName
#endstruct
#defstruct global EXPLICIT_ACCESS_W
#field int grfAccessPermissions
#field int grfAccessMode
#field int grfInheritance
#field TRUSTEE_W Trustee
#endstruct
stdim st, EXPLICIT_ACCESS_W ; NSTRUCT 変数を確保
st->grfAccessPermissions = 100
mes "grfAccessPermissions=" + st->grfAccessPermissions