MakeAbsoluteSD
関数自己相対形式のセキュリティ記述子を絶対形式に変換する。
シグネチャ
// ADVAPI32.dll
#include <windows.h>
BOOL MakeAbsoluteSD(
PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor, // optional
DWORD* lpdwAbsoluteSecurityDescriptorSize,
ACL* pDacl, // optional
DWORD* lpdwDaclSize,
ACL* pSacl, // optional
DWORD* lpdwSaclSize,
PSID pOwner, // optional
DWORD* lpdwOwnerSize,
PSID pPrimaryGroup, // optional
DWORD* lpdwPrimaryGroupSize
);パラメーター
| 名前 | 型 | 方向 | 説明 |
|---|---|---|---|
| pSelfRelativeSecurityDescriptor | PSECURITY_DESCRIPTOR | in | 自己相対形式の SECURITY_DESCRIPTOR 構造体へのポインターです。この関数は、元のセキュリティ記述子を変更することなく、このセキュリティ記述子の絶対形式バージョンを作成します。 |
| pAbsoluteSecurityDescriptor | PSECURITY_DESCRIPTOR | outoptional | 絶対形式セキュリティ記述子の本体で関数が埋めるバッファーへのポインターです。この情報は SECURITY_DESCRIPTOR 構造体として書式化されます。 |
| lpdwAbsoluteSecurityDescriptorSize | DWORD* | inout | pAbsoluteSD パラメーターが指すバッファーのサイズを指定する変数へのポインターです。バッファーがセキュリティ記述子に対して十分な大きさでない場合、関数は失敗し、この変数に必要な最小サイズを設定します。 |
| pDacl | ACL* | outoptional | 絶対形式セキュリティ記述子の 随意アクセス制御リスト (DACL) で関数が埋めるバッファーへのポインターです。絶対形式セキュリティ記述子の本体は、このポインターを参照します。 |
| lpdwDaclSize | DWORD* | inout | pDacl パラメーターが指すバッファーのサイズを指定する変数へのポインターです。バッファーが アクセス制御リスト (ACL) に対して十分な大きさでない場合、関数は失敗し、この変数に必要な最小サイズを設定します。 |
| pSacl | ACL* | outoptional | 絶対形式セキュリティ記述子の システムアクセス制御リスト (SACL) で関数が埋めるバッファーへのポインターです。絶対形式セキュリティ記述子の本体は、このポインターを参照します。 |
| lpdwSaclSize | DWORD* | inout | pSacl パラメーターが指すバッファーのサイズを指定する変数へのポインターです。バッファーが ACL に対して十分な大きさでない場合、関数は失敗し、この変数に必要な最小サイズを設定します。 |
| pOwner | PSID | outoptional | 絶対形式セキュリティ記述子の所有者の セキュリティ識別子 (SID) で関数が埋めるバッファーへのポインターです。絶対形式セキュリティ記述子の本体は、このポインターを参照します。 |
| lpdwOwnerSize | DWORD* | inout | pOwner パラメーターが指すバッファーのサイズを指定する変数へのポインターです。バッファーが SID に対して十分な大きさでない場合、関数は失敗し、この変数に必要な最小サイズを設定します。 |
| pPrimaryGroup | PSID | outoptional | 絶対形式セキュリティ記述子のプライマリグループの SID で関数が埋めるバッファーへのポインターです。絶対形式セキュリティ記述子の本体は、このポインターを参照します。 |
| lpdwPrimaryGroupSize | DWORD* | inout | pPrimaryGroup パラメーターが指すバッファーのサイズを指定する変数へのポインターです。バッファーが SID に対して十分な大きさでない場合、関数は失敗し、この変数に必要な最小サイズを設定します。 |
戻り値の型: BOOL
公式ドキュメント
自己相対形式のセキュリティ記述子をテンプレートとして使用し、絶対形式のセキュリティ記述子を作成します。
戻り値
関数が成功した場合は、0 以外の値を返します。
関数が失敗した場合は、0 を返します。拡張エラー情報を取得するには、 GetLastError を呼び出します。返される可能性のあるコードには、以下のものが含まれますが、これらに限定されません。
| 戻り値/値 | 説明 |
|---|---|
| 1 つ以上のバッファーが小さすぎます。 |
解説(Remarks)
絶対形式のセキュリティ記述子は、含まれる情報そのものではなく、その情報へのポインターを保持します。自己相対形式のセキュリティ記述子は、連続したメモリブロック内に情報を保持します。自己相対形式のセキュリティ記述子では、 SECURITY_DESCRIPTOR 構造体が常に情報の先頭に位置しますが、セキュリティ記述子のその他の構成要素はこの構造体の後に任意の順序で続けることができます。自己相対形式セキュリティ記述子の構成要素は、メモリアドレスではなく、セキュリティ記述子の先頭からのオフセットで識別されます。この形式は、セキュリティ記述子をフロッピーディスクに保存したり、通信プロトコルによって転送したりする必要がある場合に役立ちます。
さまざまなメディアに保護対象オブジェクトをコピーするサーバーは、MakeAbsoluteSD 関数を使用して自己相対セキュリティ記述子から絶対セキュリティ記述子を作成し、 MakeSelfRelativeSD 関数を使用して絶対セキュリティ記述子から自己相対セキュリティ記述子を作成できます。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// ADVAPI32.dll
#include <windows.h>
BOOL MakeAbsoluteSD(
PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,
PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor, // optional
DWORD* lpdwAbsoluteSecurityDescriptorSize,
ACL* pDacl, // optional
DWORD* lpdwDaclSize,
ACL* pSacl, // optional
DWORD* lpdwSaclSize,
PSID pOwner, // optional
DWORD* lpdwOwnerSize,
PSID pPrimaryGroup, // optional
DWORD* lpdwPrimaryGroupSize
);[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("ADVAPI32.dll", SetLastError = true, ExactSpelling = true)]
static extern bool MakeAbsoluteSD(
IntPtr pSelfRelativeSecurityDescriptor, // PSECURITY_DESCRIPTOR
IntPtr pAbsoluteSecurityDescriptor, // PSECURITY_DESCRIPTOR optional, out
ref uint lpdwAbsoluteSecurityDescriptorSize, // DWORD* in/out
IntPtr pDacl, // ACL* optional, out
ref uint lpdwDaclSize, // DWORD* in/out
IntPtr pSacl, // ACL* optional, out
ref uint lpdwSaclSize, // DWORD* in/out
IntPtr pOwner, // PSID optional, out
ref uint lpdwOwnerSize, // DWORD* in/out
IntPtr pPrimaryGroup, // PSID optional, out
ref uint lpdwPrimaryGroupSize // DWORD* in/out
);<DllImport("ADVAPI32.dll", SetLastError:=True, ExactSpelling:=True)>
Public Shared Function MakeAbsoluteSD(
pSelfRelativeSecurityDescriptor As IntPtr, ' PSECURITY_DESCRIPTOR
pAbsoluteSecurityDescriptor As IntPtr, ' PSECURITY_DESCRIPTOR optional, out
ByRef lpdwAbsoluteSecurityDescriptorSize As UInteger, ' DWORD* in/out
pDacl As IntPtr, ' ACL* optional, out
ByRef lpdwDaclSize As UInteger, ' DWORD* in/out
pSacl As IntPtr, ' ACL* optional, out
ByRef lpdwSaclSize As UInteger, ' DWORD* in/out
pOwner As IntPtr, ' PSID optional, out
ByRef lpdwOwnerSize As UInteger, ' DWORD* in/out
pPrimaryGroup As IntPtr, ' PSID optional, out
ByRef lpdwPrimaryGroupSize As UInteger ' DWORD* in/out
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function' pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR
' pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out
' lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out
' pDacl : ACL* optional, out
' lpdwDaclSize : DWORD* in/out
' pSacl : ACL* optional, out
' lpdwSaclSize : DWORD* in/out
' pOwner : PSID optional, out
' lpdwOwnerSize : DWORD* in/out
' pPrimaryGroup : PSID optional, out
' lpdwPrimaryGroupSize : DWORD* in/out
Declare PtrSafe Function MakeAbsoluteSD Lib "advapi32" ( _
ByVal pSelfRelativeSecurityDescriptor As LongPtr, _
ByVal pAbsoluteSecurityDescriptor As LongPtr, _
ByRef lpdwAbsoluteSecurityDescriptorSize As Long, _
ByVal pDacl As LongPtr, _
ByRef lpdwDaclSize As Long, _
ByVal pSacl As LongPtr, _
ByRef lpdwSaclSize As Long, _
ByVal pOwner As LongPtr, _
ByRef lpdwOwnerSize As Long, _
ByVal pPrimaryGroup As LongPtr, _
ByRef lpdwPrimaryGroupSize As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
MakeAbsoluteSD = ctypes.windll.advapi32.MakeAbsoluteSD
MakeAbsoluteSD.restype = wintypes.BOOL
MakeAbsoluteSD.argtypes = [
wintypes.HANDLE, # pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR
wintypes.HANDLE, # pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out
ctypes.POINTER(wintypes.DWORD), # lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out
ctypes.c_void_p, # pDacl : ACL* optional, out
ctypes.POINTER(wintypes.DWORD), # lpdwDaclSize : DWORD* in/out
ctypes.c_void_p, # pSacl : ACL* optional, out
ctypes.POINTER(wintypes.DWORD), # lpdwSaclSize : DWORD* in/out
wintypes.HANDLE, # pOwner : PSID optional, out
ctypes.POINTER(wintypes.DWORD), # lpdwOwnerSize : DWORD* in/out
wintypes.HANDLE, # pPrimaryGroup : PSID optional, out
ctypes.POINTER(wintypes.DWORD), # lpdwPrimaryGroupSize : DWORD* in/out
]
# GetLastError: use ctypes.GetLastError() (or ctypes.WinDLL(use_last_error=True))require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('ADVAPI32.dll')
MakeAbsoluteSD = Fiddle::Function.new(
lib['MakeAbsoluteSD'],
[
Fiddle::TYPE_VOIDP, # pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR
Fiddle::TYPE_VOIDP, # pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out
Fiddle::TYPE_VOIDP, # lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out
Fiddle::TYPE_VOIDP, # pDacl : ACL* optional, out
Fiddle::TYPE_VOIDP, # lpdwDaclSize : DWORD* in/out
Fiddle::TYPE_VOIDP, # pSacl : ACL* optional, out
Fiddle::TYPE_VOIDP, # lpdwSaclSize : DWORD* in/out
Fiddle::TYPE_VOIDP, # pOwner : PSID optional, out
Fiddle::TYPE_VOIDP, # lpdwOwnerSize : DWORD* in/out
Fiddle::TYPE_VOIDP, # pPrimaryGroup : PSID optional, out
Fiddle::TYPE_VOIDP, # lpdwPrimaryGroupSize : DWORD* in/out
],
Fiddle::TYPE_INT)#[link(name = "advapi32")]
extern "system" {
fn MakeAbsoluteSD(
pSelfRelativeSecurityDescriptor: *mut core::ffi::c_void, // PSECURITY_DESCRIPTOR
pAbsoluteSecurityDescriptor: *mut core::ffi::c_void, // PSECURITY_DESCRIPTOR optional, out
lpdwAbsoluteSecurityDescriptorSize: *mut u32, // DWORD* in/out
pDacl: *mut ACL, // ACL* optional, out
lpdwDaclSize: *mut u32, // DWORD* in/out
pSacl: *mut ACL, // ACL* optional, out
lpdwSaclSize: *mut u32, // DWORD* in/out
pOwner: *mut core::ffi::c_void, // PSID optional, out
lpdwOwnerSize: *mut u32, // DWORD* in/out
pPrimaryGroup: *mut core::ffi::c_void, // PSID optional, out
lpdwPrimaryGroupSize: *mut u32 // DWORD* in/out
) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("ADVAPI32.dll", SetLastError = true)]
public static extern bool MakeAbsoluteSD(IntPtr pSelfRelativeSecurityDescriptor, IntPtr pAbsoluteSecurityDescriptor, ref uint lpdwAbsoluteSecurityDescriptorSize, IntPtr pDacl, ref uint lpdwDaclSize, IntPtr pSacl, ref uint lpdwSaclSize, IntPtr pOwner, ref uint lpdwOwnerSize, IntPtr pPrimaryGroup, ref uint lpdwPrimaryGroupSize);
"@
$api = Add-Type -MemberDefinition $sig -Name 'ADVAPI32_MakeAbsoluteSD' -Namespace Win32 -PassThru
# $api::MakeAbsoluteSD(pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, lpdwAbsoluteSecurityDescriptorSize, pDacl, lpdwDaclSize, pSacl, lpdwSaclSize, pOwner, lpdwOwnerSize, pPrimaryGroup, lpdwPrimaryGroupSize)#uselib "ADVAPI32.dll"
#func global MakeAbsoluteSD "MakeAbsoluteSD" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; MakeAbsoluteSD pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, varptr(lpdwAbsoluteSecurityDescriptorSize), varptr(pDacl), varptr(lpdwDaclSize), varptr(pSacl), varptr(lpdwSaclSize), pOwner, varptr(lpdwOwnerSize), pPrimaryGroup, varptr(lpdwPrimaryGroupSize) ; 戻り値は stat
; pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> "sptr"
; pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> "sptr"
; lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> "sptr"
; pDacl : ACL* optional, out -> "sptr"
; lpdwDaclSize : DWORD* in/out -> "sptr"
; pSacl : ACL* optional, out -> "sptr"
; lpdwSaclSize : DWORD* in/out -> "sptr"
; pOwner : PSID optional, out -> "sptr"
; lpdwOwnerSize : DWORD* in/out -> "sptr"
; pPrimaryGroup : PSID optional, out -> "sptr"
; lpdwPrimaryGroupSize : DWORD* in/out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。出力引数:
#uselib "ADVAPI32.dll" #cfunc global MakeAbsoluteSD "MakeAbsoluteSD" sptr, sptr, var, var, var, var, var, sptr, var, sptr, var ; res = MakeAbsoluteSD(pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, lpdwAbsoluteSecurityDescriptorSize, pDacl, lpdwDaclSize, pSacl, lpdwSaclSize, pOwner, lpdwOwnerSize, pPrimaryGroup, lpdwPrimaryGroupSize) ; pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> "sptr" ; pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> "sptr" ; lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> "var" ; pDacl : ACL* optional, out -> "var" ; lpdwDaclSize : DWORD* in/out -> "var" ; pSacl : ACL* optional, out -> "var" ; lpdwSaclSize : DWORD* in/out -> "var" ; pOwner : PSID optional, out -> "sptr" ; lpdwOwnerSize : DWORD* in/out -> "var" ; pPrimaryGroup : PSID optional, out -> "sptr" ; lpdwPrimaryGroupSize : DWORD* in/out -> "var" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "ADVAPI32.dll" #cfunc global MakeAbsoluteSD "MakeAbsoluteSD" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr ; res = MakeAbsoluteSD(pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, varptr(lpdwAbsoluteSecurityDescriptorSize), varptr(pDacl), varptr(lpdwDaclSize), varptr(pSacl), varptr(lpdwSaclSize), pOwner, varptr(lpdwOwnerSize), pPrimaryGroup, varptr(lpdwPrimaryGroupSize)) ; pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> "sptr" ; pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> "sptr" ; lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> "sptr" ; pDacl : ACL* optional, out -> "sptr" ; lpdwDaclSize : DWORD* in/out -> "sptr" ; pSacl : ACL* optional, out -> "sptr" ; lpdwSaclSize : DWORD* in/out -> "sptr" ; pOwner : PSID optional, out -> "sptr" ; lpdwOwnerSize : DWORD* in/out -> "sptr" ; pPrimaryGroup : PSID optional, out -> "sptr" ; lpdwPrimaryGroupSize : DWORD* in/out -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
出力引数:
; BOOL MakeAbsoluteSD(PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor, PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor, DWORD* lpdwAbsoluteSecurityDescriptorSize, ACL* pDacl, DWORD* lpdwDaclSize, ACL* pSacl, DWORD* lpdwSaclSize, PSID pOwner, DWORD* lpdwOwnerSize, PSID pPrimaryGroup, DWORD* lpdwPrimaryGroupSize) #uselib "ADVAPI32.dll" #cfunc global MakeAbsoluteSD "MakeAbsoluteSD" intptr, intptr, var, var, var, var, var, intptr, var, intptr, var ; res = MakeAbsoluteSD(pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, lpdwAbsoluteSecurityDescriptorSize, pDacl, lpdwDaclSize, pSacl, lpdwSaclSize, pOwner, lpdwOwnerSize, pPrimaryGroup, lpdwPrimaryGroupSize) ; pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> "intptr" ; pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> "intptr" ; lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> "var" ; pDacl : ACL* optional, out -> "var" ; lpdwDaclSize : DWORD* in/out -> "var" ; pSacl : ACL* optional, out -> "var" ; lpdwSaclSize : DWORD* in/out -> "var" ; pOwner : PSID optional, out -> "intptr" ; lpdwOwnerSize : DWORD* in/out -> "var" ; pPrimaryGroup : PSID optional, out -> "intptr" ; lpdwPrimaryGroupSize : DWORD* in/out -> "var" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; BOOL MakeAbsoluteSD(PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor, PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor, DWORD* lpdwAbsoluteSecurityDescriptorSize, ACL* pDacl, DWORD* lpdwDaclSize, ACL* pSacl, DWORD* lpdwSaclSize, PSID pOwner, DWORD* lpdwOwnerSize, PSID pPrimaryGroup, DWORD* lpdwPrimaryGroupSize) #uselib "ADVAPI32.dll" #cfunc global MakeAbsoluteSD "MakeAbsoluteSD" intptr, intptr, intptr, intptr, intptr, intptr, intptr, intptr, intptr, intptr, intptr ; res = MakeAbsoluteSD(pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, varptr(lpdwAbsoluteSecurityDescriptorSize), varptr(pDacl), varptr(lpdwDaclSize), varptr(pSacl), varptr(lpdwSaclSize), pOwner, varptr(lpdwOwnerSize), pPrimaryGroup, varptr(lpdwPrimaryGroupSize)) ; pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> "intptr" ; pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> "intptr" ; lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> "intptr" ; pDacl : ACL* optional, out -> "intptr" ; lpdwDaclSize : DWORD* in/out -> "intptr" ; pSacl : ACL* optional, out -> "intptr" ; lpdwSaclSize : DWORD* in/out -> "intptr" ; pOwner : PSID optional, out -> "intptr" ; lpdwOwnerSize : DWORD* in/out -> "intptr" ; pPrimaryGroup : PSID optional, out -> "intptr" ; lpdwPrimaryGroupSize : DWORD* in/out -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
advapi32 = windows.NewLazySystemDLL("ADVAPI32.dll")
procMakeAbsoluteSD = advapi32.NewProc("MakeAbsoluteSD")
)
// pSelfRelativeSecurityDescriptor (PSECURITY_DESCRIPTOR), pAbsoluteSecurityDescriptor (PSECURITY_DESCRIPTOR optional, out), lpdwAbsoluteSecurityDescriptorSize (DWORD* in/out), pDacl (ACL* optional, out), lpdwDaclSize (DWORD* in/out), pSacl (ACL* optional, out), lpdwSaclSize (DWORD* in/out), pOwner (PSID optional, out), lpdwOwnerSize (DWORD* in/out), pPrimaryGroup (PSID optional, out), lpdwPrimaryGroupSize (DWORD* in/out)
r1, _, err := procMakeAbsoluteSD.Call(
uintptr(pSelfRelativeSecurityDescriptor),
uintptr(pAbsoluteSecurityDescriptor),
uintptr(lpdwAbsoluteSecurityDescriptorSize),
uintptr(pDacl),
uintptr(lpdwDaclSize),
uintptr(pSacl),
uintptr(lpdwSaclSize),
uintptr(pOwner),
uintptr(lpdwOwnerSize),
uintptr(pPrimaryGroup),
uintptr(lpdwPrimaryGroupSize),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // BOOLfunction MakeAbsoluteSD(
pSelfRelativeSecurityDescriptor: THandle; // PSECURITY_DESCRIPTOR
pAbsoluteSecurityDescriptor: THandle; // PSECURITY_DESCRIPTOR optional, out
lpdwAbsoluteSecurityDescriptorSize: Pointer; // DWORD* in/out
pDacl: Pointer; // ACL* optional, out
lpdwDaclSize: Pointer; // DWORD* in/out
pSacl: Pointer; // ACL* optional, out
lpdwSaclSize: Pointer; // DWORD* in/out
pOwner: THandle; // PSID optional, out
lpdwOwnerSize: Pointer; // DWORD* in/out
pPrimaryGroup: THandle; // PSID optional, out
lpdwPrimaryGroupSize: Pointer // DWORD* in/out
): BOOL; stdcall;
external 'ADVAPI32.dll' name 'MakeAbsoluteSD';result := DllCall("ADVAPI32\MakeAbsoluteSD"
, "Ptr", pSelfRelativeSecurityDescriptor ; PSECURITY_DESCRIPTOR
, "Ptr", pAbsoluteSecurityDescriptor ; PSECURITY_DESCRIPTOR optional, out
, "Ptr", lpdwAbsoluteSecurityDescriptorSize ; DWORD* in/out
, "Ptr", pDacl ; ACL* optional, out
, "Ptr", lpdwDaclSize ; DWORD* in/out
, "Ptr", pSacl ; ACL* optional, out
, "Ptr", lpdwSaclSize ; DWORD* in/out
, "Ptr", pOwner ; PSID optional, out
, "Ptr", lpdwOwnerSize ; DWORD* in/out
, "Ptr", pPrimaryGroup ; PSID optional, out
, "Ptr", lpdwPrimaryGroupSize ; DWORD* in/out
, "Int") ; return: BOOL●MakeAbsoluteSD(pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, lpdwAbsoluteSecurityDescriptorSize, pDacl, lpdwDaclSize, pSacl, lpdwSaclSize, pOwner, lpdwOwnerSize, pPrimaryGroup, lpdwPrimaryGroupSize) = DLL("ADVAPI32.dll", "bool MakeAbsoluteSD(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*)")
# 呼び出し: MakeAbsoluteSD(pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, lpdwAbsoluteSecurityDescriptorSize, pDacl, lpdwDaclSize, pSacl, lpdwSaclSize, pOwner, lpdwOwnerSize, pPrimaryGroup, lpdwPrimaryGroupSize)
# pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> "void*"
# pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> "void*"
# lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> "void*"
# pDacl : ACL* optional, out -> "void*"
# lpdwDaclSize : DWORD* in/out -> "void*"
# pSacl : ACL* optional, out -> "void*"
# lpdwSaclSize : DWORD* in/out -> "void*"
# pOwner : PSID optional, out -> "void*"
# lpdwOwnerSize : DWORD* in/out -> "void*"
# pPrimaryGroup : PSID optional, out -> "void*"
# lpdwPrimaryGroupSize : DWORD* in/out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。const std = @import("std");
extern "advapi32" fn MakeAbsoluteSD(
pSelfRelativeSecurityDescriptor: ?*anyopaque, // PSECURITY_DESCRIPTOR
pAbsoluteSecurityDescriptor: ?*anyopaque, // PSECURITY_DESCRIPTOR optional, out
lpdwAbsoluteSecurityDescriptorSize: [*c]u32, // DWORD* in/out
pDacl: [*c]ACL, // ACL* optional, out
lpdwDaclSize: [*c]u32, // DWORD* in/out
pSacl: [*c]ACL, // ACL* optional, out
lpdwSaclSize: [*c]u32, // DWORD* in/out
pOwner: ?*anyopaque, // PSID optional, out
lpdwOwnerSize: [*c]u32, // DWORD* in/out
pPrimaryGroup: ?*anyopaque, // PSID optional, out
lpdwPrimaryGroupSize: [*c]u32 // DWORD* in/out
) callconv(std.os.windows.WINAPI) i32;proc MakeAbsoluteSD(
pSelfRelativeSecurityDescriptor: pointer, # PSECURITY_DESCRIPTOR
pAbsoluteSecurityDescriptor: pointer, # PSECURITY_DESCRIPTOR optional, out
lpdwAbsoluteSecurityDescriptorSize: ptr uint32, # DWORD* in/out
pDacl: ptr ACL, # ACL* optional, out
lpdwDaclSize: ptr uint32, # DWORD* in/out
pSacl: ptr ACL, # ACL* optional, out
lpdwSaclSize: ptr uint32, # DWORD* in/out
pOwner: pointer, # PSID optional, out
lpdwOwnerSize: ptr uint32, # DWORD* in/out
pPrimaryGroup: pointer, # PSID optional, out
lpdwPrimaryGroupSize: ptr uint32 # DWORD* in/out
): int32 {.importc: "MakeAbsoluteSD", stdcall, dynlib: "ADVAPI32.dll".}pragma(lib, "advapi32");
extern(Windows)
int MakeAbsoluteSD(
void* pSelfRelativeSecurityDescriptor, // PSECURITY_DESCRIPTOR
void* pAbsoluteSecurityDescriptor, // PSECURITY_DESCRIPTOR optional, out
uint* lpdwAbsoluteSecurityDescriptorSize, // DWORD* in/out
ACL* pDacl, // ACL* optional, out
uint* lpdwDaclSize, // DWORD* in/out
ACL* pSacl, // ACL* optional, out
uint* lpdwSaclSize, // DWORD* in/out
void* pOwner, // PSID optional, out
uint* lpdwOwnerSize, // DWORD* in/out
void* pPrimaryGroup, // PSID optional, out
uint* lpdwPrimaryGroupSize // DWORD* in/out
);ccall((:MakeAbsoluteSD, "ADVAPI32.dll"), stdcall, Int32,
(Ptr{Cvoid}, Ptr{Cvoid}, Ptr{UInt32}, Ptr{ACL}, Ptr{UInt32}, Ptr{ACL}, Ptr{UInt32}, Ptr{Cvoid}, Ptr{UInt32}, Ptr{Cvoid}, Ptr{UInt32}),
pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, lpdwAbsoluteSecurityDescriptorSize, pDacl, lpdwDaclSize, pSacl, lpdwSaclSize, pOwner, lpdwOwnerSize, pPrimaryGroup, lpdwPrimaryGroupSize)
# pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> Ptr{Cvoid}
# pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> Ptr{Cvoid}
# lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> Ptr{UInt32}
# pDacl : ACL* optional, out -> Ptr{ACL}
# lpdwDaclSize : DWORD* in/out -> Ptr{UInt32}
# pSacl : ACL* optional, out -> Ptr{ACL}
# lpdwSaclSize : DWORD* in/out -> Ptr{UInt32}
# pOwner : PSID optional, out -> Ptr{Cvoid}
# lpdwOwnerSize : DWORD* in/out -> Ptr{UInt32}
# pPrimaryGroup : PSID optional, out -> Ptr{Cvoid}
# lpdwPrimaryGroupSize : DWORD* in/out -> Ptr{UInt32}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。local ffi = require("ffi")
ffi.cdef[[
int32_t MakeAbsoluteSD(
void* pSelfRelativeSecurityDescriptor,
void* pAbsoluteSecurityDescriptor,
uint32_t* lpdwAbsoluteSecurityDescriptorSize,
void* pDacl,
uint32_t* lpdwDaclSize,
void* pSacl,
uint32_t* lpdwSaclSize,
void* pOwner,
uint32_t* lpdwOwnerSize,
void* pPrimaryGroup,
uint32_t* lpdwPrimaryGroupSize);
]]
local advapi32 = ffi.load("advapi32")
-- advapi32.MakeAbsoluteSD(pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, lpdwAbsoluteSecurityDescriptorSize, pDacl, lpdwDaclSize, pSacl, lpdwSaclSize, pOwner, lpdwOwnerSize, pPrimaryGroup, lpdwPrimaryGroupSize)
-- pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR
-- pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out
-- lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out
-- pDacl : ACL* optional, out
-- lpdwDaclSize : DWORD* in/out
-- pSacl : ACL* optional, out
-- lpdwSaclSize : DWORD* in/out
-- pOwner : PSID optional, out
-- lpdwOwnerSize : DWORD* in/out
-- pPrimaryGroup : PSID optional, out
-- lpdwPrimaryGroupSize : DWORD* in/out
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。const koffi = require('koffi');
const lib = koffi.load('ADVAPI32.dll');
const MakeAbsoluteSD = lib.func('__stdcall', 'MakeAbsoluteSD', 'int32_t', ['void *', 'void *', 'uint32_t *', 'void *', 'uint32_t *', 'void *', 'uint32_t *', 'void *', 'uint32_t *', 'void *', 'uint32_t *']);
// MakeAbsoluteSD(pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, lpdwAbsoluteSecurityDescriptorSize, pDacl, lpdwDaclSize, pSacl, lpdwSaclSize, pOwner, lpdwOwnerSize, pPrimaryGroup, lpdwPrimaryGroupSize)
// pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> 'void *'
// pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> 'void *'
// lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> 'uint32_t *'
// pDacl : ACL* optional, out -> 'void *'
// lpdwDaclSize : DWORD* in/out -> 'uint32_t *'
// pSacl : ACL* optional, out -> 'void *'
// lpdwSaclSize : DWORD* in/out -> 'uint32_t *'
// pOwner : PSID optional, out -> 'void *'
// lpdwOwnerSize : DWORD* in/out -> 'uint32_t *'
// pPrimaryGroup : PSID optional, out -> 'void *'
// lpdwPrimaryGroupSize : DWORD* in/out -> 'uint32_t *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。const lib = Deno.dlopen("ADVAPI32.dll", {
MakeAbsoluteSD: { parameters: ["pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer"], result: "i32" },
});
// lib.symbols.MakeAbsoluteSD(pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, lpdwAbsoluteSecurityDescriptorSize, pDacl, lpdwDaclSize, pSacl, lpdwSaclSize, pOwner, lpdwOwnerSize, pPrimaryGroup, lpdwPrimaryGroupSize)
// pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> "pointer"
// pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> "pointer"
// lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> "pointer"
// pDacl : ACL* optional, out -> "pointer"
// lpdwDaclSize : DWORD* in/out -> "pointer"
// pSacl : ACL* optional, out -> "pointer"
// lpdwSaclSize : DWORD* in/out -> "pointer"
// pOwner : PSID optional, out -> "pointer"
// lpdwOwnerSize : DWORD* in/out -> "pointer"
// pPrimaryGroup : PSID optional, out -> "pointer"
// lpdwPrimaryGroupSize : DWORD* in/out -> "pointer"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。<?php
$ffi = FFI::cdef(<<<C
int32_t MakeAbsoluteSD(
void* pSelfRelativeSecurityDescriptor,
void* pAbsoluteSecurityDescriptor,
uint32_t* lpdwAbsoluteSecurityDescriptorSize,
void* pDacl,
uint32_t* lpdwDaclSize,
void* pSacl,
uint32_t* lpdwSaclSize,
void* pOwner,
uint32_t* lpdwOwnerSize,
void* pPrimaryGroup,
uint32_t* lpdwPrimaryGroupSize);
C, "ADVAPI32.dll");
// $ffi->MakeAbsoluteSD(pSelfRelativeSecurityDescriptor, pAbsoluteSecurityDescriptor, lpdwAbsoluteSecurityDescriptorSize, pDacl, lpdwDaclSize, pSacl, lpdwSaclSize, pOwner, lpdwOwnerSize, pPrimaryGroup, lpdwPrimaryGroupSize);
// pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR
// pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out
// lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out
// pDacl : ACL* optional, out
// lpdwDaclSize : DWORD* in/out
// pSacl : ACL* optional, out
// lpdwSaclSize : DWORD* in/out
// pOwner : PSID optional, out
// lpdwOwnerSize : DWORD* in/out
// pPrimaryGroup : PSID optional, out
// lpdwPrimaryGroupSize : DWORD* in/out
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
public interface Advapi32 extends StdCallLibrary {
Advapi32 INSTANCE = Native.load("advapi32", Advapi32.class);
boolean MakeAbsoluteSD(
Pointer pSelfRelativeSecurityDescriptor, // PSECURITY_DESCRIPTOR
Pointer pAbsoluteSecurityDescriptor, // PSECURITY_DESCRIPTOR optional, out
IntByReference lpdwAbsoluteSecurityDescriptorSize, // DWORD* in/out
Pointer pDacl, // ACL* optional, out
IntByReference lpdwDaclSize, // DWORD* in/out
Pointer pSacl, // ACL* optional, out
IntByReference lpdwSaclSize, // DWORD* in/out
Pointer pOwner, // PSID optional, out
IntByReference lpdwOwnerSize, // DWORD* in/out
Pointer pPrimaryGroup, // PSID optional, out
IntByReference lpdwPrimaryGroupSize // DWORD* in/out
);
}@[Link("advapi32")]
lib LibADVAPI32
fun MakeAbsoluteSD = MakeAbsoluteSD(
pSelfRelativeSecurityDescriptor : Void*, # PSECURITY_DESCRIPTOR
pAbsoluteSecurityDescriptor : Void*, # PSECURITY_DESCRIPTOR optional, out
lpdwAbsoluteSecurityDescriptorSize : UInt32*, # DWORD* in/out
pDacl : ACL*, # ACL* optional, out
lpdwDaclSize : UInt32*, # DWORD* in/out
pSacl : ACL*, # ACL* optional, out
lpdwSaclSize : UInt32*, # DWORD* in/out
pOwner : Void*, # PSID optional, out
lpdwOwnerSize : UInt32*, # DWORD* in/out
pPrimaryGroup : Void*, # PSID optional, out
lpdwPrimaryGroupSize : UInt32* # DWORD* in/out
) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。import 'dart:ffi';
import 'package:ffi/ffi.dart';
typedef MakeAbsoluteSDNative = Int32 Function(Pointer<Void>, Pointer<Void>, Pointer<Uint32>, Pointer<Void>, Pointer<Uint32>, Pointer<Void>, Pointer<Uint32>, Pointer<Void>, Pointer<Uint32>, Pointer<Void>, Pointer<Uint32>);
typedef MakeAbsoluteSDDart = int Function(Pointer<Void>, Pointer<Void>, Pointer<Uint32>, Pointer<Void>, Pointer<Uint32>, Pointer<Void>, Pointer<Uint32>, Pointer<Void>, Pointer<Uint32>, Pointer<Void>, Pointer<Uint32>);
final MakeAbsoluteSD = DynamicLibrary.open('ADVAPI32.dll')
.lookupFunction<MakeAbsoluteSDNative, MakeAbsoluteSDDart>('MakeAbsoluteSD');
// pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> Pointer<Void>
// pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> Pointer<Void>
// lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> Pointer<Uint32>
// pDacl : ACL* optional, out -> Pointer<Void>
// lpdwDaclSize : DWORD* in/out -> Pointer<Uint32>
// pSacl : ACL* optional, out -> Pointer<Void>
// lpdwSaclSize : DWORD* in/out -> Pointer<Uint32>
// pOwner : PSID optional, out -> Pointer<Void>
// lpdwOwnerSize : DWORD* in/out -> Pointer<Uint32>
// pPrimaryGroup : PSID optional, out -> Pointer<Void>
// lpdwPrimaryGroupSize : DWORD* in/out -> Pointer<Uint32>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function MakeAbsoluteSD(
pSelfRelativeSecurityDescriptor: THandle; // PSECURITY_DESCRIPTOR
pAbsoluteSecurityDescriptor: THandle; // PSECURITY_DESCRIPTOR optional, out
lpdwAbsoluteSecurityDescriptorSize: Pointer; // DWORD* in/out
pDacl: Pointer; // ACL* optional, out
lpdwDaclSize: Pointer; // DWORD* in/out
pSacl: Pointer; // ACL* optional, out
lpdwSaclSize: Pointer; // DWORD* in/out
pOwner: THandle; // PSID optional, out
lpdwOwnerSize: Pointer; // DWORD* in/out
pPrimaryGroup: THandle; // PSID optional, out
lpdwPrimaryGroupSize: Pointer // DWORD* in/out
): BOOL; stdcall;
external 'ADVAPI32.dll' name 'MakeAbsoluteSD';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import stdcall safe "MakeAbsoluteSD"
c_MakeAbsoluteSD :: Ptr () -> Ptr () -> Ptr Word32 -> Ptr () -> Ptr Word32 -> Ptr () -> Ptr Word32 -> Ptr () -> Ptr Word32 -> Ptr () -> Ptr Word32 -> IO CInt
-- pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> Ptr ()
-- pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> Ptr ()
-- lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> Ptr Word32
-- pDacl : ACL* optional, out -> Ptr ()
-- lpdwDaclSize : DWORD* in/out -> Ptr Word32
-- pSacl : ACL* optional, out -> Ptr ()
-- lpdwSaclSize : DWORD* in/out -> Ptr Word32
-- pOwner : PSID optional, out -> Ptr ()
-- lpdwOwnerSize : DWORD* in/out -> Ptr Word32
-- pPrimaryGroup : PSID optional, out -> Ptr ()
-- lpdwPrimaryGroupSize : DWORD* in/out -> Ptr Word32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。open Ctypes
open Foreign
let makeabsolutesd =
foreign "MakeAbsoluteSD"
((ptr void) @-> (ptr void) @-> (ptr uint32_t) @-> (ptr void) @-> (ptr uint32_t) @-> (ptr void) @-> (ptr uint32_t) @-> (ptr void) @-> (ptr uint32_t) @-> (ptr void) @-> (ptr uint32_t) @-> returning int32_t)
(* pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> (ptr void) *)
(* pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> (ptr void) *)
(* lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> (ptr uint32_t) *)
(* pDacl : ACL* optional, out -> (ptr void) *)
(* lpdwDaclSize : DWORD* in/out -> (ptr uint32_t) *)
(* pSacl : ACL* optional, out -> (ptr void) *)
(* lpdwSaclSize : DWORD* in/out -> (ptr uint32_t) *)
(* pOwner : PSID optional, out -> (ptr void) *)
(* lpdwOwnerSize : DWORD* in/out -> (ptr uint32_t) *)
(* pPrimaryGroup : PSID optional, out -> (ptr void) *)
(* lpdwPrimaryGroupSize : DWORD* in/out -> (ptr uint32_t) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)(cffi:define-foreign-library advapi32 (t "ADVAPI32.dll"))
(cffi:use-foreign-library advapi32)
(cffi:defcfun ("MakeAbsoluteSD" make-absolute-sd :convention :stdcall) :int32
(p-self-relative-security-descriptor :pointer) ; PSECURITY_DESCRIPTOR
(p-absolute-security-descriptor :pointer) ; PSECURITY_DESCRIPTOR optional, out
(lpdw-absolute-security-descriptor-size :pointer) ; DWORD* in/out
(p-dacl :pointer) ; ACL* optional, out
(lpdw-dacl-size :pointer) ; DWORD* in/out
(p-sacl :pointer) ; ACL* optional, out
(lpdw-sacl-size :pointer) ; DWORD* in/out
(p-owner :pointer) ; PSID optional, out
(lpdw-owner-size :pointer) ; DWORD* in/out
(p-primary-group :pointer) ; PSID optional, out
(lpdw-primary-group-size :pointer)) ; DWORD* in/out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。use Win32::API;
my $MakeAbsoluteSD = Win32::API::More->new('ADVAPI32',
'BOOL MakeAbsoluteSD(HANDLE pSelfRelativeSecurityDescriptor, HANDLE pAbsoluteSecurityDescriptor, LPVOID lpdwAbsoluteSecurityDescriptorSize, LPVOID pDacl, LPVOID lpdwDaclSize, LPVOID pSacl, LPVOID lpdwSaclSize, HANDLE pOwner, LPVOID lpdwOwnerSize, HANDLE pPrimaryGroup, LPVOID lpdwPrimaryGroupSize)');
# my $ret = $MakeAbsoluteSD->Call($pSelfRelativeSecurityDescriptor, $pAbsoluteSecurityDescriptor, $lpdwAbsoluteSecurityDescriptorSize, $pDacl, $lpdwDaclSize, $pSacl, $lpdwSaclSize, $pOwner, $lpdwOwnerSize, $pPrimaryGroup, $lpdwPrimaryGroupSize);
# pSelfRelativeSecurityDescriptor : PSECURITY_DESCRIPTOR -> HANDLE
# pAbsoluteSecurityDescriptor : PSECURITY_DESCRIPTOR optional, out -> HANDLE
# lpdwAbsoluteSecurityDescriptorSize : DWORD* in/out -> LPVOID
# pDacl : ACL* optional, out -> LPVOID
# lpdwDaclSize : DWORD* in/out -> LPVOID
# pSacl : ACL* optional, out -> LPVOID
# lpdwSaclSize : DWORD* in/out -> LPVOID
# pOwner : PSID optional, out -> HANDLE
# lpdwOwnerSize : DWORD* in/out -> LPVOID
# pPrimaryGroup : PSID optional, out -> HANDLE
# lpdwPrimaryGroupSize : DWORD* in/out -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。関連項目
公式の関連項目
- f MakeSelfRelativeSD — 絶対形式のセキュリティ記述子を自己相対形式に変換する。
- s SECURITY_DESCRIPTOR
使用する型