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

GetInheritanceSourceW

関数
ACL内の各ACEの継承元を特定して取得する(Unicode版)。
DLLADVAPI32.dll文字セットUnicode (-W)呼出規約winapi対応OSWindows XP 以降

シグネチャ

// ADVAPI32.dll  (Unicode / -W)
#include <windows.h>

WIN32_ERROR GetInheritanceSourceW(
    LPWSTR pObjectName,
    SE_OBJECT_TYPE ObjectType,
    OBJECT_SECURITY_INFORMATION SecurityInfo,
    BOOL Container,
    GUID** pObjectClassGuids,   // optional
    DWORD GuidCount,
    ACL* pAcl,
    FN_OBJECT_MGR_FUNCTS* pfnArray,   // optional
    GENERIC_MAPPING* pGenericMapping,
    INHERITED_FROMW* pInheritArray
);

パラメーター

名前方向説明
pObjectNameLPWSTRinACEの継承元を調べる対象オブジェクトの名前を表すUnicode文字列。
ObjectTypeSE_OBJECT_TYPEinオブジェクトの種類を示すSE_OBJECT_TYPE列挙値。
SecurityInfoOBJECT_SECURITY_INFORMATIONin対象とするセキュリティ情報の種類(DACLまたはSACL)を示すフラグ。
ContainerBOOLinオブジェクトがコンテナ(子を持てる)であればTRUE、そうでなければFALSE。
pObjectClassGuidsGUID**inoptionalオブジェクトクラスを識別するGUIDの配列へのポインタ。
GuidCountDWORDinpObjectClassGuids配列に含まれるGUIDの個数。
pAclACL*in継承元を解析する対象のACLへのポインタ。
pfnArrayFN_OBJECT_MGR_FUNCTS*inoptionalオブジェクトマネージャ関数群を保持するFN_OBJECT_MGR_FUNCTS構造体へのポインタ。NULL可。
pGenericMappingGENERIC_MAPPING*in汎用アクセス権を特定権にマッピングするGENERIC_MAPPING構造体へのポインタ。
pInheritArrayINHERITED_FROMW*out各ACEの継承元情報を受け取るINHERITED_FROMW構造体配列。ACE数分の領域が必要。出力用。

戻り値の型: WIN32_ERROR

各言語での呼び出し定義

// ADVAPI32.dll  (Unicode / -W)
#include <windows.h>

WIN32_ERROR GetInheritanceSourceW(
    LPWSTR pObjectName,
    SE_OBJECT_TYPE ObjectType,
    OBJECT_SECURITY_INFORMATION SecurityInfo,
    BOOL Container,
    GUID** pObjectClassGuids,   // optional
    DWORD GuidCount,
    ACL* pAcl,
    FN_OBJECT_MGR_FUNCTS* pfnArray,   // optional
    GENERIC_MAPPING* pGenericMapping,
    INHERITED_FROMW* pInheritArray
);
[DllImport("ADVAPI32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
static extern uint GetInheritanceSourceW(
    [MarshalAs(UnmanagedType.LPWStr)] string pObjectName,   // LPWSTR
    int ObjectType,   // SE_OBJECT_TYPE
    uint SecurityInfo,   // OBJECT_SECURITY_INFORMATION
    bool Container,   // BOOL
    IntPtr pObjectClassGuids,   // GUID** optional
    uint GuidCount,   // DWORD
    IntPtr pAcl,   // ACL*
    IntPtr pfnArray,   // FN_OBJECT_MGR_FUNCTS* optional
    IntPtr pGenericMapping,   // GENERIC_MAPPING*
    IntPtr pInheritArray   // INHERITED_FROMW* out
);
<DllImport("ADVAPI32.dll", CharSet:=CharSet.Unicode, ExactSpelling:=True)>
Public Shared Function GetInheritanceSourceW(
    <MarshalAs(UnmanagedType.LPWStr)> pObjectName As String,   ' LPWSTR
    ObjectType As Integer,   ' SE_OBJECT_TYPE
    SecurityInfo As UInteger,   ' OBJECT_SECURITY_INFORMATION
    Container As Boolean,   ' BOOL
    pObjectClassGuids As IntPtr,   ' GUID** optional
    GuidCount As UInteger,   ' DWORD
    pAcl As IntPtr,   ' ACL*
    pfnArray As IntPtr,   ' FN_OBJECT_MGR_FUNCTS* optional
    pGenericMapping As IntPtr,   ' GENERIC_MAPPING*
    pInheritArray As IntPtr   ' INHERITED_FROMW* out
) As UInteger
End Function
' pObjectName : LPWSTR
' ObjectType : SE_OBJECT_TYPE
' SecurityInfo : OBJECT_SECURITY_INFORMATION
' Container : BOOL
' pObjectClassGuids : GUID** optional
' GuidCount : DWORD
' pAcl : ACL*
' pfnArray : FN_OBJECT_MGR_FUNCTS* optional
' pGenericMapping : GENERIC_MAPPING*
' pInheritArray : INHERITED_FROMW* out
Declare PtrSafe Function GetInheritanceSourceW Lib "advapi32" ( _
    ByVal pObjectName As LongPtr, _
    ByVal ObjectType As Long, _
    ByVal SecurityInfo As Long, _
    ByVal Container As Long, _
    ByVal pObjectClassGuids As LongPtr, _
    ByVal GuidCount As Long, _
    ByVal pAcl As LongPtr, _
    ByVal pfnArray As LongPtr, _
    ByVal pGenericMapping As LongPtr, _
    ByVal pInheritArray As LongPtr) As Long
' Unicode(W): 文字列は ByVal As LongPtr とし StrPtr(unicodeStr) を渡す
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

GetInheritanceSourceW = ctypes.windll.advapi32.GetInheritanceSourceW
GetInheritanceSourceW.restype = wintypes.DWORD
GetInheritanceSourceW.argtypes = [
    wintypes.LPCWSTR,  # pObjectName : LPWSTR
    ctypes.c_int,  # ObjectType : SE_OBJECT_TYPE
    wintypes.DWORD,  # SecurityInfo : OBJECT_SECURITY_INFORMATION
    wintypes.BOOL,  # Container : BOOL
    ctypes.c_void_p,  # pObjectClassGuids : GUID** optional
    wintypes.DWORD,  # GuidCount : DWORD
    ctypes.c_void_p,  # pAcl : ACL*
    ctypes.c_void_p,  # pfnArray : FN_OBJECT_MGR_FUNCTS* optional
    ctypes.c_void_p,  # pGenericMapping : GENERIC_MAPPING*
    ctypes.c_void_p,  # pInheritArray : INHERITED_FROMW* out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('ADVAPI32.dll')
GetInheritanceSourceW = Fiddle::Function.new(
  lib['GetInheritanceSourceW'],
  [
    Fiddle::TYPE_VOIDP,  # pObjectName : LPWSTR
    Fiddle::TYPE_INT,  # ObjectType : SE_OBJECT_TYPE
    -Fiddle::TYPE_INT,  # SecurityInfo : OBJECT_SECURITY_INFORMATION
    Fiddle::TYPE_INT,  # Container : BOOL
    Fiddle::TYPE_VOIDP,  # pObjectClassGuids : GUID** optional
    -Fiddle::TYPE_INT,  # GuidCount : DWORD
    Fiddle::TYPE_VOIDP,  # pAcl : ACL*
    Fiddle::TYPE_VOIDP,  # pfnArray : FN_OBJECT_MGR_FUNCTS* optional
    Fiddle::TYPE_VOIDP,  # pGenericMapping : GENERIC_MAPPING*
    Fiddle::TYPE_VOIDP,  # pInheritArray : INHERITED_FROMW* out
  ],
  -Fiddle::TYPE_INT)
# Wide strings: pass str.encode("UTF-16LE") + "\x00\x00"
#[link(name = "advapi32")]
extern "system" {
    fn GetInheritanceSourceW(
        pObjectName: *mut u16,  // LPWSTR
        ObjectType: i32,  // SE_OBJECT_TYPE
        SecurityInfo: u32,  // OBJECT_SECURITY_INFORMATION
        Container: i32,  // BOOL
        pObjectClassGuids: *mut *mut GUID,  // GUID** optional
        GuidCount: u32,  // DWORD
        pAcl: *mut ACL,  // ACL*
        pfnArray: *mut FN_OBJECT_MGR_FUNCTS,  // FN_OBJECT_MGR_FUNCTS* optional
        pGenericMapping: *mut GENERIC_MAPPING,  // GENERIC_MAPPING*
        pInheritArray: *mut INHERITED_FROMW  // INHERITED_FROMW* out
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("ADVAPI32.dll", CharSet = CharSet.Unicode)]
public static extern uint GetInheritanceSourceW([MarshalAs(UnmanagedType.LPWStr)] string pObjectName, int ObjectType, uint SecurityInfo, bool Container, IntPtr pObjectClassGuids, uint GuidCount, IntPtr pAcl, IntPtr pfnArray, IntPtr pGenericMapping, IntPtr pInheritArray);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ADVAPI32_GetInheritanceSourceW' -Namespace Win32 -PassThru
# $api::GetInheritanceSourceW(pObjectName, ObjectType, SecurityInfo, Container, pObjectClassGuids, GuidCount, pAcl, pfnArray, pGenericMapping, pInheritArray)
#uselib "ADVAPI32.dll"
#func global GetInheritanceSourceW "GetInheritanceSourceW" wptr, wptr, wptr, wptr, wptr, wptr, wptr, wptr, wptr, wptr
; GetInheritanceSourceW pObjectName, ObjectType, SecurityInfo, Container, varptr(pObjectClassGuids), GuidCount, varptr(pAcl), varptr(pfnArray), varptr(pGenericMapping), varptr(pInheritArray)   ; 戻り値は stat
; pObjectName : LPWSTR -> "wptr"
; ObjectType : SE_OBJECT_TYPE -> "wptr"
; SecurityInfo : OBJECT_SECURITY_INFORMATION -> "wptr"
; Container : BOOL -> "wptr"
; pObjectClassGuids : GUID** optional -> "wptr"
; GuidCount : DWORD -> "wptr"
; pAcl : ACL* -> "wptr"
; pfnArray : FN_OBJECT_MGR_FUNCTS* optional -> "wptr"
; pGenericMapping : GENERIC_MAPPING* -> "wptr"
; pInheritArray : INHERITED_FROMW* out -> "wptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "ADVAPI32.dll"
#cfunc global GetInheritanceSourceW "GetInheritanceSourceW" wstr, int, int, int, var, int, var, var, var, var
; res = GetInheritanceSourceW(pObjectName, ObjectType, SecurityInfo, Container, pObjectClassGuids, GuidCount, pAcl, pfnArray, pGenericMapping, pInheritArray)
; pObjectName : LPWSTR -> "wstr"
; ObjectType : SE_OBJECT_TYPE -> "int"
; SecurityInfo : OBJECT_SECURITY_INFORMATION -> "int"
; Container : BOOL -> "int"
; pObjectClassGuids : GUID** optional -> "var"
; GuidCount : DWORD -> "int"
; pAcl : ACL* -> "var"
; pfnArray : FN_OBJECT_MGR_FUNCTS* optional -> "var"
; pGenericMapping : GENERIC_MAPPING* -> "var"
; pInheritArray : INHERITED_FROMW* out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; WIN32_ERROR GetInheritanceSourceW(LPWSTR pObjectName, SE_OBJECT_TYPE ObjectType, OBJECT_SECURITY_INFORMATION SecurityInfo, BOOL Container, GUID** pObjectClassGuids, DWORD GuidCount, ACL* pAcl, FN_OBJECT_MGR_FUNCTS* pfnArray, GENERIC_MAPPING* pGenericMapping, INHERITED_FROMW* pInheritArray)
#uselib "ADVAPI32.dll"
#cfunc global GetInheritanceSourceW "GetInheritanceSourceW" wstr, int, int, int, var, int, var, var, var, var
; res = GetInheritanceSourceW(pObjectName, ObjectType, SecurityInfo, Container, pObjectClassGuids, GuidCount, pAcl, pfnArray, pGenericMapping, pInheritArray)
; pObjectName : LPWSTR -> "wstr"
; ObjectType : SE_OBJECT_TYPE -> "int"
; SecurityInfo : OBJECT_SECURITY_INFORMATION -> "int"
; Container : BOOL -> "int"
; pObjectClassGuids : GUID** optional -> "var"
; GuidCount : DWORD -> "int"
; pAcl : ACL* -> "var"
; pfnArray : FN_OBJECT_MGR_FUNCTS* optional -> "var"
; pGenericMapping : GENERIC_MAPPING* -> "var"
; pInheritArray : INHERITED_FROMW* out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	advapi32 = windows.NewLazySystemDLL("ADVAPI32.dll")
	procGetInheritanceSourceW = advapi32.NewProc("GetInheritanceSourceW")
)

// pObjectName (LPWSTR), ObjectType (SE_OBJECT_TYPE), SecurityInfo (OBJECT_SECURITY_INFORMATION), Container (BOOL), pObjectClassGuids (GUID** optional), GuidCount (DWORD), pAcl (ACL*), pfnArray (FN_OBJECT_MGR_FUNCTS* optional), pGenericMapping (GENERIC_MAPPING*), pInheritArray (INHERITED_FROMW* out)
r1, _, err := procGetInheritanceSourceW.Call(
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pObjectName))),
	uintptr(ObjectType),
	uintptr(SecurityInfo),
	uintptr(Container),
	uintptr(pObjectClassGuids),
	uintptr(GuidCount),
	uintptr(pAcl),
	uintptr(pfnArray),
	uintptr(pGenericMapping),
	uintptr(pInheritArray),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // WIN32_ERROR
function GetInheritanceSourceW(
  pObjectName: PWideChar;   // LPWSTR
  ObjectType: Integer;   // SE_OBJECT_TYPE
  SecurityInfo: DWORD;   // OBJECT_SECURITY_INFORMATION
  Container: BOOL;   // BOOL
  pObjectClassGuids: PGUID;   // GUID** optional
  GuidCount: DWORD;   // DWORD
  pAcl: Pointer;   // ACL*
  pfnArray: Pointer;   // FN_OBJECT_MGR_FUNCTS* optional
  pGenericMapping: Pointer;   // GENERIC_MAPPING*
  pInheritArray: Pointer   // INHERITED_FROMW* out
): DWORD; stdcall;
  external 'ADVAPI32.dll' name 'GetInheritanceSourceW';
result := DllCall("ADVAPI32\GetInheritanceSourceW"
    , "WStr", pObjectName   ; LPWSTR
    , "Int", ObjectType   ; SE_OBJECT_TYPE
    , "UInt", SecurityInfo   ; OBJECT_SECURITY_INFORMATION
    , "Int", Container   ; BOOL
    , "Ptr", pObjectClassGuids   ; GUID** optional
    , "UInt", GuidCount   ; DWORD
    , "Ptr", pAcl   ; ACL*
    , "Ptr", pfnArray   ; FN_OBJECT_MGR_FUNCTS* optional
    , "Ptr", pGenericMapping   ; GENERIC_MAPPING*
    , "Ptr", pInheritArray   ; INHERITED_FROMW* out
    , "UInt")   ; return: WIN32_ERROR
●GetInheritanceSourceW(pObjectName, ObjectType, SecurityInfo, Container, pObjectClassGuids, GuidCount, pAcl, pfnArray, pGenericMapping, pInheritArray) = DLL("ADVAPI32.dll", "dword GetInheritanceSourceW(char*, int, dword, bool, void*, dword, void*, void*, void*, void*)")
# 呼び出し: GetInheritanceSourceW(pObjectName, ObjectType, SecurityInfo, Container, pObjectClassGuids, GuidCount, pAcl, pfnArray, pGenericMapping, pInheritArray)
# pObjectName : LPWSTR -> "char*"
# ObjectType : SE_OBJECT_TYPE -> "int"
# SecurityInfo : OBJECT_SECURITY_INFORMATION -> "dword"
# Container : BOOL -> "bool"
# pObjectClassGuids : GUID** optional -> "void*"
# GuidCount : DWORD -> "dword"
# pAcl : ACL* -> "void*"
# pfnArray : FN_OBJECT_MGR_FUNCTS* optional -> "void*"
# pGenericMapping : GENERIC_MAPPING* -> "void*"
# pInheritArray : INHERITED_FROMW* out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
# ※-W(Unicode)関数。なでしこ1はANSIのため -A 版の利用を推奨。