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

ADSPROPINITPARAMS

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

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

フィールド

フィールドサイズx64x86説明
dwSizeDWORD4+0+0ADSPROPINITPARAMS 構造体のサイズ (バイト単位)。ADsPropGetInitInfo を呼び出す前にこの値を設定します。
dwFlagsDWORD4+4+4予約済みです。
hrHRESULT4+8+8バインド/取得操作の結果を示す HRESULT 値が格納されます。この値が S_OK でない場合、残りの構造体メンバーは初期化されておらず、無視する必要があります。
pDsObjIDirectoryObject*8/4+16+12表示指定子が適用されるディレクトリオブジェクトを表す IDirectoryObject インターフェイスへのポインター。このインターフェイスを解放しないでください。
pwzCNLPWSTR8/4+24+16ディレクトリオブジェクトの共通名 (CN) を格納する、NULL 終端の Unicode 文字列へのポインター。
pWritableAttrsADS_ATTR_INFO*8/4+32+20ディレクトリオブジェクトの属性データを格納する ADS_ATTR_INFO 構造体へのポインター。

公式ドキュメント

ADSPROPINITPARAMS 構造体は、表示指定子 (display specifier) が適用されるオブジェクトのデータを取得するために、ADsPropGetInitInfo 関数と共に使用されます。

解説(Remarks)

ADsPropGetInitInfo 関数は、pwzCN メンバーおよび pWritableAttrs メンバー用のメモリを割り当てます。このメモリは、すべての表示指定子オブジェクトが破棄された後にシステムによって解放されます。ADsPropGetInitInfo を呼び出しても pDsObj のインターフェイスポインターの参照カウントは増加しないため、呼び出し元はこのインターフェイスを解放してはなりません。

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

各言語での定義

#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