Win32 API 日本語リファレンス
ホームNetworking.ActiveDirectory › ADSPROPINITPARAMS

ADSPROPINITPARAMS

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

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

フィールド

フィールドサイズx64x86説明
dwSizeDWORD4+0+0本構造体のバイトサイズを示す。
dwFlagsDWORD4+4+4プロパティページ初期化の動作を制御するフラグ。
hrHRESULT4+8+8初期化結果を示すHRESULT。
pDsObjIDirectoryObject*8/4+16+12対象ディレクトリオブジェクトを表すIDirectoryObjectインターフェイスポインタ。
pwzCNLPWSTR8/4+24+16対象オブジェクトの共通名(CN)を示す文字列。
pWritableAttrsADS_ATTR_INFO*8/4+32+20書き込み可能な属性情報を格納するADS_ATTR_INFO配列へのポインタ。

各言語での定義

#include <windows.h>

// ADSPROPINITPARAMS  (x64 40 / x86 24 バイト)
typedef struct ADSPROPINITPARAMS {
    DWORD dwSize;
    DWORD dwFlags;
    HRESULT hr;
    IDirectoryObject* pDsObj;
    LPWSTR pwzCN;
    ADS_ATTR_INFO* pWritableAttrs;
} ADSPROPINITPARAMS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ADSPROPINITPARAMS
{
    public uint dwSize;
    public uint dwFlags;
    public int hr;
    public IntPtr pDsObj;
    public IntPtr pwzCN;
    public IntPtr pWritableAttrs;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ADSPROPINITPARAMS
    Public dwSize As UInteger
    Public dwFlags As UInteger
    Public hr As Integer
    Public pDsObj As IntPtr
    Public pwzCN As IntPtr
    Public pWritableAttrs As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class ADSPROPINITPARAMS(ctypes.Structure):
    _fields_ = [
        ("dwSize", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("hr", ctypes.c_int),
        ("pDsObj", ctypes.c_void_p),
        ("pwzCN", ctypes.c_void_p),
        ("pWritableAttrs", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct ADSPROPINITPARAMS {
    pub dwSize: u32,
    pub dwFlags: u32,
    pub hr: i32,
    pub pDsObj: *mut core::ffi::c_void,
    pub pwzCN: *mut core::ffi::c_void,
    pub pWritableAttrs: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type ADSPROPINITPARAMS struct {
	dwSize uint32
	dwFlags uint32
	hr int32
	pDsObj uintptr
	pwzCN uintptr
	pWritableAttrs uintptr
}
type
  ADSPROPINITPARAMS = record
    dwSize: DWORD;
    dwFlags: DWORD;
    hr: Integer;
    pDsObj: Pointer;
    pwzCN: Pointer;
    pWritableAttrs: Pointer;
  end;
const ADSPROPINITPARAMS = extern struct {
    dwSize: u32,
    dwFlags: u32,
    hr: i32,
    pDsObj: ?*anyopaque,
    pwzCN: ?*anyopaque,
    pWritableAttrs: ?*anyopaque,
};
type
  ADSPROPINITPARAMS {.bycopy.} = object
    dwSize: uint32
    dwFlags: uint32
    hr: int32
    pDsObj: pointer
    pwzCN: pointer
    pWritableAttrs: pointer
struct ADSPROPINITPARAMS
{
    uint dwSize;
    uint dwFlags;
    int hr;
    void* pDsObj;
    void* pwzCN;
    void* pWritableAttrs;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; ADSPROPINITPARAMS サイズ: 24 バイト(x86)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; hr : HRESULT (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pDsObj : IDirectoryObject* (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; pwzCN : LPWSTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pWritableAttrs : ADS_ATTR_INFO* (+20, 4byte)  varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; ADSPROPINITPARAMS サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; hr : HRESULT (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pDsObj : IDirectoryObject* (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pwzCN : LPWSTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pWritableAttrs : ADS_ATTR_INFO* (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global ADSPROPINITPARAMS
    #field int dwSize
    #field int dwFlags
    #field int hr
    #field intptr pDsObj
    #field intptr pwzCN
    #field intptr pWritableAttrs
#endstruct

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