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

SYSTEM_AUDIT_CALLBACK_OBJECT_ACE

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

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

フィールド

フィールドサイズx64x86説明
HeaderACE_HEADER4+0+0ACE のサイズと種類を指定する ACE_HEADER 構造体です。この構造体には、子オブジェクトによる ACE の継承を制御するフラグが含まれます。また、ACE がアクセス試行の成功、失敗、またはその両方を監査するかどうかを示すフラグも含まれます。ACE_HEADER 構造体の AceType メンバーには SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE を設定し、AceSize メンバーには SYSTEM_AUDIT_CALLBACK_OBJECT_ACE 構造体に割り当てられた合計バイト数を設定します。
MaskDWORD4+4+4ACCESS_MASK であり、トラスティ によるアクセス試行に対してシステムが監査するアクセス権を指定します。
FlagsSYSTEM_AUDIT_OBJECT_ACE_FLAGS4+8+8

ObjectType メンバーおよび InheritedObjectType メンバーに GUID が含まれるかどうかを示すビットフラグのセットです。このメンバーには、次の値の組み合わせを指定できます。未定義のビットはすべて 0 に設定してください。

意味
ACE_OBJECT_TYPE_PRESENT
ObjectType メンバーに GUID が含まれます。
ACE_INHERITED_OBJECT_TYPE_PRESENT
InheritedObjectType メンバーに GUID が含まれます。
ObjectTypeGUID16+12+12

プロパティセット、プロパティ、拡張権限、または子オブジェクトの種類を識別する GUID 構造体です。

このメンバーは、Flags メンバーに ACE_OBJECT_TYPE_PRESENT ビットが設定されている場合にのみ有効です。設定されていない場合、ObjectType は無視されます。

この GUID の用途は、Mask メンバーで指定されたアクセス権によって異なります。

このメンバーには、次のいずれかの値を指定できます。

意味
ADS_RIGHT_DS_READ_PROP and/or ADS_RIGHT_DS_WRITE_PROP
ObjectType GUID は、オブジェクトのプロパティセットまたはプロパティを識別します。この ACE は、トラスティによるそのプロパティまたはプロパティセットの読み取りや書き込みの試行に対する監査を制御します。
ADS_RIGHT_DS_CONTROL_ACCESS
ObjectType GUID は、拡張アクセス権を識別します。
ADS_RIGHT_DS_CREATE_CHILD
ObjectType GUID は、子オブジェクトの種類を識別します。この ACE は、トラスティによるその種類の子オブジェクトの作成試行に対する監査を制御します。
ADS_RIGHT_DS_SELF
ObjectType GUID は、検証済み書き込みを識別します。
InheritedObjectTypeGUID16+28+28

ACE を継承できる子オブジェクトの種類を識別する GUID 構造体です。

このメンバーは、Flags メンバーに ACE_INHERITED_OBJECT_TYPE_PRESENT ビットが設定されている場合にのみ有効です。そのビットが設定されていない場合、InheritedObjectType は無視され、すべての種類の子オブジェクトが ACE を継承できます。いずれの場合も、継承は ACE_HEADER 内の継承フラグ、および子オブジェクトに設定された継承に対する保護によっても制御されます。

SidStartDWORD4+44+44トラスティの SID の最初の DWORD です。SID の残りのバイトは、SidStart メンバーに続く連続したメモリに格納されます。この SID には、アプリケーションデータを付加できます。

公式ドキュメント

SYSTEM_AUDIT_CALLBACK_OBJECT_ACE 構造体は、システムアクセス制御リスト (SACL) の アクセス制御エントリ (ACE) を定義します。この ACE は、オブジェクト、またはプロパティセットやプロパティなどのサブオブジェクトへのアクセスを監査できます。ACE には、アクセス権のセット、オブジェクトまたはサブオブジェクトの種類を識別する GUID、およびシステムがアクセスを監査する対象の トラスティ を識別する セキュリティ識別子 (SID) が含まれます。また ACE には、子オブジェクトによる ACE の継承を制御する GUID とフラグのセットも含まれます。

AuthzAccessCheck 関数が呼び出されると、AuthzAccessCheck 関数にポインターを通じて渡された SECURITY_DESCRIPTOR 構造体の DACL に含まれる各 SYSTEM_AUDIT_CALLBACK_OBJECT_ACE 構造体が、アプリケーション定義の AuthzAccessCheckCallback 関数の呼び出しを発生させます。その際、見つかった SYSTEM_AUDIT_CALLBACK_OBJECT_ACE 構造体へのポインターが pAce パラメーターに渡されます。

解説(Remarks)

ObjectType GUID と InheritedObjectType GUID のいずれも指定されていない場合、SYSTEM_AUDIT_CALLBACK_OBJECT_ACE 構造体は SYSTEM_AUDIT_CALLBACK_ACE 構造体と同じ意味を持ちます。その場合は、より小さく効率的な SYSTEM_AUDIT_CALLBACK_ACE 構造体を使用してください。

SYSTEM_AUDIT_CALLBACK_OBJECT_ACE 構造体を含む ACL は、その ACE_HEADER 構造体で ACL_REVISION_DS リビジョン番号を指定しなければなりません。

SYSTEM_AUDIT_CALLBACK_OBJECT_ACE 構造体を作成する際は、ObjectType メンバーと InheritedObjectType メンバーの GUID 構造体(いずれか一方または両方が存在する場合)を格納でき、さらに SidStart メンバーとそれに続く連続したメモリにトラスティの完全な SID を格納できるだけの十分なメモリを割り当てる必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

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

// SYSTEM_AUDIT_CALLBACK_OBJECT_ACE  (x64 48 / x86 48 バイト)
typedef struct SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
    ACE_HEADER Header;
    DWORD Mask;
    SYSTEM_AUDIT_OBJECT_ACE_FLAGS Flags;
    GUID ObjectType;
    GUID InheritedObjectType;
    DWORD SidStart;
} SYSTEM_AUDIT_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_AUDIT_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_AUDIT_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_AUDIT_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_AUDIT_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_AUDIT_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_AUDIT_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_AUDIT_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_AUDIT_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_AUDIT_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_AUDIT_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_AUDIT_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_AUDIT_CALLBACK_OBJECT_ACE        ; NSTRUCT 変数を確保
st->Mask = 100
mes "Mask=" + st->Mask