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

DS_REPL_OPW_BLOB

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

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

フィールド

フィールドサイズx64x86説明
ftimeEnqueuedFILETIME8+0+0この操作がキューに追加された日時を格納する FILETIME 構造体を格納します。
ulSerialNumberDWORD4+8+8操作の識別子を格納します。この値は、各コンピューターのスタートアップルーチン内で一意です。コンピューターを再起動すると、識別子は一意ではなくなります。
ulPriorityDWORD4+12+12この操作の優先度値を格納します。優先度値が高いタスクほど先に実行されます。優先度は、操作の種類とそのパラメーターに基づいてサーバーが計算します。
OpTypeDS_REPL_OP_TYPE4+16+16この構造体が表す操作の種類を示す DS_REPL_OP_TYPE 値のいずれかを格納します。
ulOptionsDWORD4+20+20

0 個以上のビットで、その解釈は OpType に依存します。DS_REPL_OP_TYPE_SYNC の場合、ビットは DS_REPSYNC_* として解釈されます。ADDDELETEMODIFYUPDATE_REFS はそれぞれ DS_REPADD_*DS_REPDEL_*DS_REPMOD_*DS_REPUPD_* を使用します。これらのビットの詳細と説明については、 DsReplicaSyncDsReplicaAddDsReplicaDelDsReplicaModify、および DsReplicaUpdateRefs を参照してください。

操作に関する追加情報を提供する一連のフラグを格納します。このメンバーの内容は、OpType メンバーの内容によって決まります。

次の一覧は、各 OpType の値に対する ulOptions パラメーターの内容を説明しています。

DS_REPL_OP_TYPE_SYNC

DsReplicaSyncOptions パラメーターに対して定義されている DS_REPSYNC_* 値のうち、0 個または 1 個以上の組み合わせを格納します。

DS_REPL_OP_TYPE_ADD

DsReplicaAddOptions パラメーターに対して定義されている DS_REPADD_* 値のうち、0 個または 1 個以上の組み合わせを格納します。

DS_REPL_OP_TYPE_DELETE

DsReplicaDelOptions パラメーターに対して定義されている DS_REPDEL_* 値のうち、0 個または 1 個以上の組み合わせを格納します。

DS_REPL_OP_TYPE_MODIFY

DsReplicaModifyOptions パラメーターに対して定義されている DS_REPMOD_* 値のうち、0 個または 1 個以上の組み合わせを格納します。

DS_REPL_OP_TYPE_UPDATE_REFS

DsReplicaUpdateRefsOptions パラメーターに対して定義されている DS_REPSUPD_* 値のうち、0 個または 1 個以上の組み合わせを格納します。

oszNamingContextDWORD4+24+24この構造体のアドレスから、この操作に関連付けられた名前付けコンテキストの識別名を格納する null 終端文字列までのオフセットをバイト単位で格納します。たとえば、DS_REPL_OP_TYPE_SYNC で同期対象となる名前付けコンテキストです。
oszDsaDNDWORD4+28+28この構造体のアドレスから、この操作に対応するリモートサーバーに関連付けられたディレクトリシステムエージェントオブジェクトの識別名を格納する null 終端文字列までのオフセットをバイト単位で格納します。たとえば、DS_REPL_OP_TYPE_SYNC で変更を要求する対象のサーバーです。これは NULL の場合があります。
oszDsaAddressDWORD4+32+32この構造体のアドレスから、この操作に関連付けられたリモートサーバーのトランスポート固有のネットワークアドレスを格納する null 終端文字列までのオフセットをバイト単位で格納します。たとえば、DS_REPL_OP_TYPE_SYNC で変更を要求する対象のサーバーの DNS アドレスまたは SMTP アドレスです。これは NULL の場合があります。
uuidNamingContextObjGuidGUID16+36+36pszNamingContext で識別される名前付けコンテキストの objectGuid を格納します。
uuidDsaObjGuidGUID16+52+52pszDsaDN で識別されるディレクトリシステムエージェントオブジェクトの objectGuid を格納します。

公式ドキュメント

DS_REPL_OPW_BLOB 構造体は、現在実行中または実行待ちのレプリケーションタスクを記述します。この構造体は DS_REPL_OP 構造体に似ていますが、msDS-ReplPendingOps 属性のバイナリデータを取得する際に Lightweight Directory Access Protocol API の関数から取得されます。

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

各言語での定義

#include <windows.h>

// FILETIME  (x64 8 / x86 8 バイト)
typedef struct FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME;

// DS_REPL_OPW_BLOB  (x64 68 / x86 68 バイト)
typedef struct DS_REPL_OPW_BLOB {
    FILETIME ftimeEnqueued;
    DWORD ulSerialNumber;
    DWORD ulPriority;
    DS_REPL_OP_TYPE OpType;
    DWORD ulOptions;
    DWORD oszNamingContext;
    DWORD oszDsaDN;
    DWORD oszDsaAddress;
    GUID uuidNamingContextObjGuid;
    GUID uuidDsaObjGuid;
} DS_REPL_OPW_BLOB;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FILETIME
{
    public uint dwLowDateTime;
    public uint dwHighDateTime;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DS_REPL_OPW_BLOB
{
    public FILETIME ftimeEnqueued;
    public uint ulSerialNumber;
    public uint ulPriority;
    public int OpType;
    public uint ulOptions;
    public uint oszNamingContext;
    public uint oszDsaDN;
    public uint oszDsaAddress;
    public Guid uuidNamingContextObjGuid;
    public Guid uuidDsaObjGuid;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FILETIME
    Public dwLowDateTime As UInteger
    Public dwHighDateTime As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DS_REPL_OPW_BLOB
    Public ftimeEnqueued As FILETIME
    Public ulSerialNumber As UInteger
    Public ulPriority As UInteger
    Public OpType As Integer
    Public ulOptions As UInteger
    Public oszNamingContext As UInteger
    Public oszDsaDN As UInteger
    Public oszDsaAddress As UInteger
    Public uuidNamingContextObjGuid As Guid
    Public uuidDsaObjGuid As Guid
End Structure
import ctypes
from ctypes import wintypes

class FILETIME(ctypes.Structure):
    _fields_ = [
        ("dwLowDateTime", wintypes.DWORD),
        ("dwHighDateTime", wintypes.DWORD),
    ]

class DS_REPL_OPW_BLOB(ctypes.Structure):
    _fields_ = [
        ("ftimeEnqueued", FILETIME),
        ("ulSerialNumber", wintypes.DWORD),
        ("ulPriority", wintypes.DWORD),
        ("OpType", ctypes.c_int),
        ("ulOptions", wintypes.DWORD),
        ("oszNamingContext", wintypes.DWORD),
        ("oszDsaDN", wintypes.DWORD),
        ("oszDsaAddress", wintypes.DWORD),
        ("uuidNamingContextObjGuid", GUID),
        ("uuidDsaObjGuid", GUID),
    ]
#[repr(C)]
pub struct FILETIME {
    pub dwLowDateTime: u32,
    pub dwHighDateTime: u32,
}

#[repr(C)]
pub struct DS_REPL_OPW_BLOB {
    pub ftimeEnqueued: FILETIME,
    pub ulSerialNumber: u32,
    pub ulPriority: u32,
    pub OpType: i32,
    pub ulOptions: u32,
    pub oszNamingContext: u32,
    pub oszDsaDN: u32,
    pub oszDsaAddress: u32,
    pub uuidNamingContextObjGuid: GUID,
    pub uuidDsaObjGuid: GUID,
}
import "golang.org/x/sys/windows"

type FILETIME struct {
	dwLowDateTime uint32
	dwHighDateTime uint32
}

type DS_REPL_OPW_BLOB struct {
	ftimeEnqueued FILETIME
	ulSerialNumber uint32
	ulPriority uint32
	OpType int32
	ulOptions uint32
	oszNamingContext uint32
	oszDsaDN uint32
	oszDsaAddress uint32
	uuidNamingContextObjGuid windows.GUID
	uuidDsaObjGuid windows.GUID
}
type
  FILETIME = record
    dwLowDateTime: DWORD;
    dwHighDateTime: DWORD;
  end;

  DS_REPL_OPW_BLOB = record
    ftimeEnqueued: FILETIME;
    ulSerialNumber: DWORD;
    ulPriority: DWORD;
    OpType: Integer;
    ulOptions: DWORD;
    oszNamingContext: DWORD;
    oszDsaDN: DWORD;
    oszDsaAddress: DWORD;
    uuidNamingContextObjGuid: TGUID;
    uuidDsaObjGuid: TGUID;
  end;
const FILETIME = extern struct {
    dwLowDateTime: u32,
    dwHighDateTime: u32,
};

const DS_REPL_OPW_BLOB = extern struct {
    ftimeEnqueued: FILETIME,
    ulSerialNumber: u32,
    ulPriority: u32,
    OpType: i32,
    ulOptions: u32,
    oszNamingContext: u32,
    oszDsaDN: u32,
    oszDsaAddress: u32,
    uuidNamingContextObjGuid: GUID,
    uuidDsaObjGuid: GUID,
};
type
  FILETIME {.bycopy.} = object
    dwLowDateTime: uint32
    dwHighDateTime: uint32

  DS_REPL_OPW_BLOB {.bycopy.} = object
    ftimeEnqueued: FILETIME
    ulSerialNumber: uint32
    ulPriority: uint32
    OpType: int32
    ulOptions: uint32
    oszNamingContext: uint32
    oszDsaDN: uint32
    oszDsaAddress: uint32
    uuidNamingContextObjGuid: GUID
    uuidDsaObjGuid: GUID
struct FILETIME
{
    uint dwLowDateTime;
    uint dwHighDateTime;
}

struct DS_REPL_OPW_BLOB
{
    FILETIME ftimeEnqueued;
    uint ulSerialNumber;
    uint ulPriority;
    int OpType;
    uint ulOptions;
    uint oszNamingContext;
    uint oszDsaDN;
    uint oszDsaAddress;
    GUID uuidNamingContextObjGuid;
    GUID uuidDsaObjGuid;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DS_REPL_OPW_BLOB サイズ: 68 バイト(x64)
dim st, 17    ; 4byte整数×17(構造体サイズ 68 / 4 切り上げ)
; ftimeEnqueued : FILETIME (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; ulSerialNumber : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; ulPriority : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; OpType : DS_REPL_OP_TYPE (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ulOptions : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; oszNamingContext : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; oszDsaDN : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; oszDsaAddress : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; uuidNamingContextObjGuid : GUID (+36, 16byte)  varptr(st)+36 を基点に操作(16byte:入れ子/配列)
; uuidDsaObjGuid : GUID (+52, 16byte)  varptr(st)+52 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global FILETIME
    #field int dwLowDateTime
    #field int dwHighDateTime
#endstruct

#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global DS_REPL_OPW_BLOB
    #field FILETIME ftimeEnqueued
    #field int ulSerialNumber
    #field int ulPriority
    #field int OpType
    #field int ulOptions
    #field int oszNamingContext
    #field int oszDsaDN
    #field int oszDsaAddress
    #field GUID uuidNamingContextObjGuid
    #field GUID uuidDsaObjGuid
#endstruct

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