Win32 API 日本語リファレンス
ホームSecurity › SYSTEM_ALARM_CALLBACK_OBJECT_ACE

SYSTEM_ALARM_CALLBACK_OBJECT_ACE

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

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

フィールド

フィールドサイズx64x86説明
HeaderACE_HEADER4+0+0ACEの種別やフラグを示すヘッダ。
MaskDWORD4+4+4アラーム対象とするアクセス権を示すアクセスマスク。
FlagsSYSTEM_AUDIT_OBJECT_ACE_FLAGS4+8+8ObjectTypeとInheritedObjectTypeの有効性を示すフラグ。
ObjectTypeGUID16+12+12対象のオブジェクト種別を識別するGUID。
InheritedObjectTypeGUID16+28+28継承可能な子オブジェクト種別を識別するGUID。
SidStartDWORD4+44+44SIDの先頭。これに続いて条件式バイナリが配置される。

各言語での定義

#include <windows.h>

// ACE_HEADER  (x64 4 / x86 4 バイト)
typedef struct ACE_HEADER {
    BYTE AceType;
    BYTE AceFlags;
    WORD AceSize;
} ACE_HEADER;

// SYSTEM_ALARM_CALLBACK_OBJECT_ACE  (x64 48 / x86 48 バイト)
typedef struct SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
    ACE_HEADER Header;
    DWORD Mask;
    SYSTEM_AUDIT_OBJECT_ACE_FLAGS Flags;
    GUID ObjectType;
    GUID InheritedObjectType;
    DWORD SidStart;
} SYSTEM_ALARM_CALLBACK_OBJECT_ACE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ACE_HEADER
{
    public byte AceType;
    public byte AceFlags;
    public ushort AceSize;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SYSTEM_ALARM_CALLBACK_OBJECT_ACE
{
    public ACE_HEADER Header;
    public uint Mask;
    public uint Flags;
    public Guid ObjectType;
    public Guid InheritedObjectType;
    public uint SidStart;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ACE_HEADER
    Public AceType As Byte
    Public AceFlags As Byte
    Public AceSize As UShort
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SYSTEM_ALARM_CALLBACK_OBJECT_ACE
    Public Header As ACE_HEADER
    Public Mask As UInteger
    Public Flags As UInteger
    Public ObjectType As Guid
    Public InheritedObjectType As Guid
    Public SidStart As UInteger
End Structure
import ctypes
from ctypes import wintypes

class ACE_HEADER(ctypes.Structure):
    _fields_ = [
        ("AceType", ctypes.c_ubyte),
        ("AceFlags", ctypes.c_ubyte),
        ("AceSize", ctypes.c_ushort),
    ]

class SYSTEM_ALARM_CALLBACK_OBJECT_ACE(ctypes.Structure):
    _fields_ = [
        ("Header", ACE_HEADER),
        ("Mask", wintypes.DWORD),
        ("Flags", wintypes.DWORD),
        ("ObjectType", GUID),
        ("InheritedObjectType", GUID),
        ("SidStart", wintypes.DWORD),
    ]
#[repr(C)]
pub struct ACE_HEADER {
    pub AceType: u8,
    pub AceFlags: u8,
    pub AceSize: u16,
}

#[repr(C)]
pub struct SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
    pub Header: ACE_HEADER,
    pub Mask: u32,
    pub Flags: u32,
    pub ObjectType: GUID,
    pub InheritedObjectType: GUID,
    pub SidStart: u32,
}
import "golang.org/x/sys/windows"

type ACE_HEADER struct {
	AceType byte
	AceFlags byte
	AceSize uint16
}

type SYSTEM_ALARM_CALLBACK_OBJECT_ACE struct {
	Header ACE_HEADER
	Mask uint32
	Flags uint32
	ObjectType windows.GUID
	InheritedObjectType windows.GUID
	SidStart uint32
}
type
  ACE_HEADER = record
    AceType: Byte;
    AceFlags: Byte;
    AceSize: Word;
  end;

  SYSTEM_ALARM_CALLBACK_OBJECT_ACE = record
    Header: ACE_HEADER;
    Mask: DWORD;
    Flags: DWORD;
    ObjectType: TGUID;
    InheritedObjectType: TGUID;
    SidStart: DWORD;
  end;
const ACE_HEADER = extern struct {
    AceType: u8,
    AceFlags: u8,
    AceSize: u16,
};

const SYSTEM_ALARM_CALLBACK_OBJECT_ACE = extern struct {
    Header: ACE_HEADER,
    Mask: u32,
    Flags: u32,
    ObjectType: GUID,
    InheritedObjectType: GUID,
    SidStart: u32,
};
type
  ACE_HEADER {.bycopy.} = object
    AceType: uint8
    AceFlags: uint8
    AceSize: uint16

  SYSTEM_ALARM_CALLBACK_OBJECT_ACE {.bycopy.} = object
    Header: ACE_HEADER
    Mask: uint32
    Flags: uint32
    ObjectType: GUID
    InheritedObjectType: GUID
    SidStart: uint32
struct ACE_HEADER
{
    ubyte AceType;
    ubyte AceFlags;
    ushort AceSize;
}

struct SYSTEM_ALARM_CALLBACK_OBJECT_ACE
{
    ACE_HEADER Header;
    uint Mask;
    uint Flags;
    GUID ObjectType;
    GUID InheritedObjectType;
    uint SidStart;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SYSTEM_ALARM_CALLBACK_OBJECT_ACE サイズ: 48 バイト(x64)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; Header : ACE_HEADER (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; Mask : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; Flags : SYSTEM_AUDIT_OBJECT_ACE_FLAGS (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; ObjectType : GUID (+12, 16byte)  varptr(st)+12 を基点に操作(16byte:入れ子/配列)
; InheritedObjectType : GUID (+28, 16byte)  varptr(st)+28 を基点に操作(16byte:入れ子/配列)
; SidStart : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global ACE_HEADER
    #field byte AceType
    #field byte AceFlags
    #field short AceSize
#endstruct

#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global SYSTEM_ALARM_CALLBACK_OBJECT_ACE
    #field ACE_HEADER Header
    #field int Mask
    #field int Flags
    #field GUID ObjectType
    #field GUID InheritedObjectType
    #field int SidStart
#endstruct

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