Win32 API 日本語リファレンス
ホームSecurity.Authorization.UI › SI_OBJECT_INFO

SI_OBJECT_INFO

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

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

フィールド

フィールドサイズx64x86説明
dwFlagsSI_OBJECT_INFO_FLAGS4+0+0

ユーザーが利用できる編集オプションを決定するビットフラグのセットです。このメンバーには、次の値の組み合わせを指定できます。

意味
SI_ADVANCED
0x00000010L
このフラグが設定されている場合、基本のセキュリティ プロパティ ページに 詳細設定 ボタンが表示されます。ユーザーがこのボタンをクリックすると、システムは 詳細セキュリティ プロパティ シート を表示し、オブジェクトの 随意アクセス制御リスト (DACL) を詳細に編集できるようになります。

このフラグを SI_EDIT_AUDITSSI_EDIT_OWNERSI_EDIT_PROPERTIES の各フラグと組み合わせると、オブジェクトの SACL、所有者、およびオブジェクト固有の アクセス制御エントリ (ACE) を編集できるようになります。

SI_AUDITS_ELEVATION_REQUIRED
0x02000000L
このフラグが設定されている場合、詳細な 監査 ページの 編集 ボタンに盾のアイコンが表示されます。NTFS オブジェクトの場合、ユーザーが READ_CONTROL または ACCESS_SYSTEM_SECURITY のアクセス権を持たないときにこのフラグが要求されます。

Windows Server 2003 および Windows XP:  このフラグはサポートされていません。

SI_CONTAINER
0x00000004L
オブジェクトがコンテナーであることを示します。このフラグが設定されている場合、アクセス制御エディターは、子オブジェクトへのアクセス許可の継承に関連するコントロールを有効にします。
SI_DISABLE_DENY_ACE
0x80000000L
このフラグが設定されている場合、システムは ACE による拒否を無効にします。 このフラグを設定するには、アクセス制御エディターのクライアントが ISecurityInformation4 インターフェイスを実装する必要があります。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 および Windows XP:  このフラグはサポートされていません。

SI_EDIT_ALL
SI_EDIT_PERMSSI_EDIT_OWNERSI_EDIT_AUDITS の各フラグを組み合わせたものです。
SI_EDIT_AUDITS
0x00000002L
このフラグが設定されている状態でユーザーが 詳細設定 ボタンをクリックすると、システムは、オブジェクトの SACL を編集するための 監査プロパティ ページ を含む詳細セキュリティ プロパティ シートを表示します。詳細設定 ボタンを表示するには、SI_ADVANCED フラグを設定します。
SI_EDIT_EFFECTIVE
0x00020000L
このフラグが設定されている場合、有効なアクセス許可 ページが表示されます。アクセス制御エディターを初期化した ISecurityInformation オブジェクトが IEffectivePermission インターフェイスを実装していない場合、このフラグは無視されます。
SI_EDIT_OWNER
0x00000001L
このフラグが設定されている状態でユーザーが 詳細設定 ボタンをクリックすると、システムは、オブジェクトの所有者を変更するための 所有者プロパティ ページ を含む詳細セキュリティ プロパティ シートを表示します。詳細設定 ボタンを表示するには、SI_ADVANCED フラグを設定します。
SI_EDIT_PERMS
0x00000000L
これが既定値です。基本のセキュリティ プロパティ ページには、オブジェクトの DACL を基本的に編集するためのコントロールが常に表示されます。これらのコントロールを無効にするには、SI_READONLY フラグを設定します。
SI_EDIT_PROPERTIES
0x00000080L
このフラグが設定されている場合、システムは、オブジェクトのプロパティ セットおよびプロパティに適用される ACE を編集するためのコントロールを有効にします。これらのコントロールは、ユーザーが 詳細設定 ボタンをクリックしたときに表示されるプロパティ シートでのみ使用できます。
SI_ENABLE_CENTRAL_POLICY
0x40000000L
このフラグが設定されている場合、システムは属性の編集を有効にします。 このフラグを設定するには、アクセス制御エディターのクライアントが ISecurityInformation4 インターフェイスを実装する必要があります。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 および Windows XP:  このフラグはサポートされていません。

SI_ENABLE_EDIT_ATTRIBUTE_CONDITION
0x20000000L
このフラグが設定されている場合、システムは属性の編集を有効にします。 このフラグを設定するには、アクセス制御エディターのクライアントが ISecurityInformation4 インターフェイスを実装する必要があります。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 および Windows XP:  このフラグはサポートされていません。

SI_MAY_WRITE
0x10000000L
アクセス制御エディターが DACL を読み取ることはできないものの、DACL への書き込みは可能な場合があることを示します。ISecurityInformation::GetSecurity メソッドの呼び出しが AccessDenied を返した場合、ユーザーは新しい ACE の追加を試みることができ、より適切な警告が表示されます。
SI_NO_ACL_PROTECT
0x00000200L
このフラグが設定されている場合、アクセス制御エディターは、継承可能な ACE が親オブジェクトからこのオブジェクトへ反映されることを許可するチェック ボックスを非表示にします。このフラグが設定されていない場合、チェック ボックスは表示されます。

オブジェクトのセキュリティ記述子に SE_DACL_PROTECTED フラグが設定されている場合、チェック ボックスはオフになります。この場合、オブジェクトの DACL は継承可能な ACE によって変更されないように保護されます。

ユーザーがチェック ボックスをオフにすると、セキュリティ記述子内の継承された ACE は削除されるか、継承されない ACE に変換されます。この変換を実行する前に、システムは変更を確認するための警告メッセージ ボックスを表示します。

SI_NO_ADDITIONAL_PERMISSION
0x00200000L
このフラグが設定されている場合、アクセス制御エディターは セキュリティの詳細設定 ページの 特殊なアクセス許可 タブを非表示にします。
SI_NO_TREE_APPLY
0x00000400L
このフラグが設定されている場合、アクセス制御エディターは、NO_PROPAGATE_INHERIT_ACE フラグを制御するチェック ボックスを非表示にします。このフラグは、SI_ADVANCED フラグも設定されている場合にのみ意味を持ちます。
SI_OBJECT_GUID
0x00010000L
設定されている場合、SI_OBJECT_INFO 構造体の guidObjectType メンバーが有効であることを示します。これは、ACE が現在のオブジェクトに適用されるかどうかを判断する際に、オブジェクト固有の ACE との比較で設定されます。
SI_OWNER_ELEVATION_REQUIRED
0x04000000L
このフラグが設定されている場合、詳細な 所有者 ページの 編集 ボタンに盾のアイコンが表示されます。NTFS オブジェクトの場合、ユーザーが WRITE_OWNER のアクセス権を持たないときにこのフラグが要求されます。このフラグは、所有者ページが要求されている場合にのみ有効です。

Windows Server 2003 および Windows XP:  このフラグはサポートされていません。

SI_OWNER_READONLY
0x00000040L
このフラグが設定されている場合、ユーザーはオブジェクトの所有者を変更できません。SI_EDIT_OWNER が設定されているものの、ユーザーに所有者を変更する権限がない場合は、このフラグを設定します。
SI_OWNER_RECURSE
0x00000100L
このフラグを SI_CONTAINER と組み合わせると、新しい所有者を現在のオブジェクトだけでなくすべての子オブジェクトにも適用するかどうかを示すチェック ボックスが、所有者ページに表示されます。アクセス制御エディターは再帰的な処理を行いません。再帰的な処理は、アプリケーションが ISecurityInformation::SetSecurity の中で実行する必要があります。
SI_PAGE_TITLE
0x00000800L
このフラグが設定されている場合、pszPageTitle メンバーが基本のセキュリティ プロパティ ページのタイトルとして使用されます。それ以外の場合は、既定のタイトルが使用されます。
SI_PERMS_ELEVATION_REQUIRED
0x01000000L
このフラグが設定されている場合、簡易および詳細な アクセス許可 ページの 編集 ボタンに盾の画像が表示されます。NTFS オブジェクトの場合、ユーザーが READ_CONTROL または WRITE_DAC のアクセス権を持たないときにこのフラグが要求されます。

Windows Server 2003 および Windows XP:  このフラグはサポートされていません。

SI_READONLY
0x00000008L
このフラグが設定されている場合、エディターはオブジェクトのセキュリティ情報を表示しますが、その情報を編集するためのコントロールは無効になります。

このフラグを SI_VIEW_ONLY フラグと組み合わせることはできません。

SI_RESET
0x00000020L
このフラグが設定されている場合、既定値 ボタンが表示されます。ユーザーがこのボタンをクリックすると、アクセス制御エディターは ISecurityInformation::GetSecurity メソッドを呼び出して、アプリケーション定義の既定のセキュリティ記述子を取得します。アクセス制御エディターは、このセキュリティ記述子を使用してプロパティ シートを再初期化し、ユーザーは変更を適用するかキャンセルするかを選択できます。
SI_RESET_DACL
0x00040000L
設定されている場合、このフラグは アクセス許可 ページに 既定値に戻す ボタンを表示します。
SI_RESET_DACL_TREE
0x00004000L
設定されている場合、このフラグは、[アクセス制御の設定] ウィンドウの [アクセス許可] ページに、すべての子オブジェクトのアクセス許可をリセットして継承可能なアクセス許可の反映を有効にするチェック ボックスを表示します。ユーザーが 適用 ボタンをクリックしたときにこのチェック ボックスが選択されていると、 ISecurityInformation::SetSecuritySecurityInformation パラメーターに対して、SI_RESET_DACL_TREE とのビット単位の OR 演算が行われます。この関数自体は、アクセス許可のリセットや継承可能なアクセス許可の反映の有効化を行いません。これらは ISecurityInformation の実装で行う必要があります。
SI_RESET_OWNER
0x00100000L
設定されている場合、このフラグは 所有者 ページに 既定値に戻す ボタンを表示します。
SI_RESET_SACL
0x00080000L
設定されている場合、このフラグは 監査 ページに 既定値に戻す ボタンを表示します。
SI_RESET_SACL_TREE
0x00008000L
設定されている場合、このフラグは、[アクセス制御の設定] ウィンドウの [監査] ページに、すべての子オブジェクトの監査エントリをリセットして継承可能な監査エントリの反映を有効にするチェック ボックスを表示します。ユーザーが 適用 ボタンをクリックしたときにこのチェック ボックスが選択されていると、 ISecurityInformation::SetSecuritySecurityInformation パラメーターに対して、SI_RESET_SACL_TREE とのビット単位の OR 演算が行われます。この関数自体は、アクセス許可のリセットや継承可能なアクセス許可の反映の有効化を行いません。これらは ISecurityInformation の実装で行う必要があります。
SI_SCOPE_ELEVATION_REQUIRED
0x08000000L
このフラグが設定されている場合、スコープ属性の 変更 ボタンに盾の画像が表示されます。NTFS オブジェクトの場合、ユーザーが READ_CONTROL または WRITE_DAC のアクセス権を持たないときにこのフラグが要求されます。 このフラグを設定するには、アクセス制御エディターのクライアントが ISecurityInformation4 インターフェイスを実装する必要があります。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 および Windows XP:  このフラグはサポートされていません。

SI_SERVER_IS_DC
0x00001000L
pszServerName のコンピューターがドメイン コントローラーであることが分かっている場合は、このフラグを設定します。このフラグが設定されている場合、ユーザーとグループの追加 ダイアログ ボックスのスコープ一覧にドメイン名が含まれます。それ以外の場合は、pszServerName のコンピューターを使用してダイアログ ボックスのスコープ一覧が決定されます。
SI_VIEW_ONLY
0x00400000L
このフラグは、アクセス制御エディターのダイアログ ボックスを読み取り専用の形式で表示するために、アクセス制御エディターのクライアントが設定します。これらの形式のダイアログ ボックスでは、関連付けられたオブジェクトのアクセス許可を編集できません。このフラグを設定するには、アクセス制御エディターのクライアントが ISecurityInformation3 インターフェイスを実装する必要があります。

このフラグを SI_READONLY フラグと組み合わせることはできません。

Windows Server 2003 および Windows XP:  このフラグはサポートされていません。

hInstanceHINSTANCE8/4+8+4プロパティ シートで使用する文字列リソースを含むモジュールを識別します。 ISecurityInformation::GetAccessRights メソッドおよび ISecurityInformation::GetInheritTypes メソッドでは、表示名として文字列リソースの識別子を指定できます。
pszServerNameLPWSTR8/4+16+8アカウント名と SID を検索するコンピューターの名前を示す、null で終わる Unicode 文字列へのポインターです。この値を NULL にすると、ローカル コンピューターを指定できます。 アクセス制御エディターはこのポインターを解放しません。
pszObjectNameLPWSTR8/4+24+12編集対象のオブジェクトの名前を示す、null で終わる Unicode 文字列へのポインターです。この名前は、詳細セキュリティ プロパティ シートのタイトル、およびアクセス制御エディターが表示するエラー メッセージ ボックスに表示されます。 アクセス制御エディターはこのポインターを解放しません。
pszPageTitleLPWSTR8/4+32+16基本のセキュリティ プロパティ ページのタイトルとして使用される、null で終わる Unicode 文字列へのポインターです。このメンバーは、dwFlagsSI_PAGE_TITLE フラグが設定されていない限り無視されます。ページ タイトルが指定されていない場合は、既定のタイトルが使用されます。 アクセス制御エディターはこのポインターを解放しません。
guidObjectTypeGUID16+40+20オブジェクトの GUID です。このメンバーは、dwFlagsSI_OBJECT_GUID フラグが設定されていない限り無視されます。

公式ドキュメント

SI_OBJECT_INFO 構造体は、 ISecurityInformation::GetObjectInformation メソッドが、アクセス制御エディターの初期化に使用する情報を指定するために使用します。

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

各言語での定義

#include <windows.h>

// SI_OBJECT_INFO  (x64 56 / x86 36 バイト)
typedef struct SI_OBJECT_INFO {
    SI_OBJECT_INFO_FLAGS dwFlags;
    HINSTANCE hInstance;
    LPWSTR pszServerName;
    LPWSTR pszObjectName;
    LPWSTR pszPageTitle;
    GUID guidObjectType;
} SI_OBJECT_INFO;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SI_OBJECT_INFO
{
    public uint dwFlags;
    public IntPtr hInstance;
    public IntPtr pszServerName;
    public IntPtr pszObjectName;
    public IntPtr pszPageTitle;
    public Guid guidObjectType;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SI_OBJECT_INFO
    Public dwFlags As UInteger
    Public hInstance As IntPtr
    Public pszServerName As IntPtr
    Public pszObjectName As IntPtr
    Public pszPageTitle As IntPtr
    Public guidObjectType As Guid
End Structure
import ctypes
from ctypes import wintypes

class SI_OBJECT_INFO(ctypes.Structure):
    _fields_ = [
        ("dwFlags", wintypes.DWORD),
        ("hInstance", ctypes.c_void_p),
        ("pszServerName", ctypes.c_void_p),
        ("pszObjectName", ctypes.c_void_p),
        ("pszPageTitle", ctypes.c_void_p),
        ("guidObjectType", GUID),
    ]
#[repr(C)]
pub struct SI_OBJECT_INFO {
    pub dwFlags: u32,
    pub hInstance: *mut core::ffi::c_void,
    pub pszServerName: *mut core::ffi::c_void,
    pub pszObjectName: *mut core::ffi::c_void,
    pub pszPageTitle: *mut core::ffi::c_void,
    pub guidObjectType: GUID,
}
import "golang.org/x/sys/windows"

type SI_OBJECT_INFO struct {
	dwFlags uint32
	hInstance uintptr
	pszServerName uintptr
	pszObjectName uintptr
	pszPageTitle uintptr
	guidObjectType windows.GUID
}
type
  SI_OBJECT_INFO = record
    dwFlags: DWORD;
    hInstance: Pointer;
    pszServerName: Pointer;
    pszObjectName: Pointer;
    pszPageTitle: Pointer;
    guidObjectType: TGUID;
  end;
const SI_OBJECT_INFO = extern struct {
    dwFlags: u32,
    hInstance: ?*anyopaque,
    pszServerName: ?*anyopaque,
    pszObjectName: ?*anyopaque,
    pszPageTitle: ?*anyopaque,
    guidObjectType: GUID,
};
type
  SI_OBJECT_INFO {.bycopy.} = object
    dwFlags: uint32
    hInstance: pointer
    pszServerName: pointer
    pszObjectName: pointer
    pszPageTitle: pointer
    guidObjectType: GUID
struct SI_OBJECT_INFO
{
    uint dwFlags;
    void* hInstance;
    void* pszServerName;
    void* pszObjectName;
    void* pszPageTitle;
    GUID guidObjectType;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; SI_OBJECT_INFO サイズ: 36 バイト(x86)
dim st, 9    ; 4byte整数×9(構造体サイズ 36 / 4 切り上げ)
; dwFlags : SI_OBJECT_INFO_FLAGS (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; hInstance : HINSTANCE (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; pszServerName : LPWSTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pszObjectName : LPWSTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; pszPageTitle : LPWSTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; guidObjectType : GUID (+20, 16byte)  varptr(st)+20 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SI_OBJECT_INFO サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; dwFlags : SI_OBJECT_INFO_FLAGS (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; hInstance : HINSTANCE (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pszServerName : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pszObjectName : LPWSTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pszPageTitle : LPWSTR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; guidObjectType : GUID (+40, 16byte)  varptr(st)+40 を基点に操作(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 SI_OBJECT_INFO
    #field int dwFlags
    #field intptr hInstance
    #field intptr pszServerName
    #field intptr pszObjectName
    #field intptr pszPageTitle
    #field GUID guidObjectType
#endstruct

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