Win32 API 日本語リファレンス
ホームSystem.Rpc › RPC_BINDING_HANDLE_TEMPLATE_V1_W

RPC_BINDING_HANDLE_TEMPLATE_V1_W

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

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

フィールド

フィールドサイズx64x86説明
VersionDWORD4+0+0この構造体のバージョンです。RPC_BINDING_HANDLE_TEMPLATE_V1 の場合は 1 に設定しなければなりません。
FlagsDWORD4+4+4

RPC テンプレートの固有のプロパティを示すフラグ値です。

意味
RPC_BHT_OBJECT_UUID_VALID
ObjectUuid メンバーに有効な値が格納されています。このフラグが設定されていない場合、ObjectUuid メンバーには有効な UUID が格納されていません。
ProtocolSequenceDWORD4+8+8

このバインディング ハンドルに関連付けられるプロトコル シーケンス文字列リテラルです。次のいずれかの値を指定できます。

ncalrpc - ローカル RPC を指定します。 ncacn_ip_tcp - TCP/IP 経由の RPC を指定します。 ncacn_np - 名前付きパイプ経由の RPC を指定します。 ncacn_http - HTTP 経由の RPC を指定します。

NetworkAddressWORD*8/4+16+12バインド先のネットワーク アドレスを表す文字列へのポインターです。
StringEndpointWORD*8/4+24+16バインド先のエンドポイントを表す文字列へのポインターです。動的エンドポイントを使用する場合は、このメンバーを NULL に設定します。エンドポイントが解決された後、RpcBindingToStringBinding を使用してエンドポイントを取得します。
u1_u1_e__Union8/4+32+20プロトコル固有の追加情報を保持する共用体。
ObjectUuidGUID16+40+24

リモート オブジェクトの UUID です。この UUID のセマンティクスは、文字列バインディングにおけるものと同じです。バインディング ハンドルの作成後、必要に応じて RpcBindingSetObject を呼び出して UUID を変更します。

- ProtocolSequence.ncacn_http (HTTP 経由の RPC を指定します。)
- ProtocolSequence.ncacn_ip_tcp (TCP/IP 経由の RPC を指定します。)
- ProtocolSequence.ncacn_np (名前付きパイプ経由の RPC を指定します。)
- ProtocolSequence.ncalrpc (ローカル RPC を指定します。)

共用体: _u1_e__Union x64 8B / x86 4B

フィールドサイズx64x86説明
ReservedWORD*8/4+0+0予約済みです。このメンバーは NULL に設定しなければなりません。

公式ドキュメント

RPC_BINDING_HANDLE_TEMPLATE_V1 構造体は、RPC バインディング ハンドルを作成するための基本的なオプションを格納します。

解説(Remarks)

高速バインディング ハンドルは、RpcBindingReset の呼び出し時の扱いが「従来型」のバインディング ハンドルとわずかに異なります。静的な高速バインディング ハンドルに対して RpcBindingReset を呼び出しても何も行われません。一方、従来型のバインディング ハンドルの場合、RpcBindingReset は下位互換性を保つために静的バインディング ハンドルを動的バインディング ハンドルに変換します。

次の表は、RpcBindingReset および RpcEpResolveBinding に関する静的バインディング ハンドルと動的バインディング ハンドルの動作を示しています。

エンドポイントの種類 静的 動的
バインディング ハンドルの種類 高速 従来型 高速 従来型
RpcBindingReset 何も行いません 動的に変換します 解決済みのエンドポイントがある場合は削除します 解決済みのエンドポイントがある場合は削除します
RpcEpResolveBinding 何も行いません 何も行いません エンドポイントが未解決の場合は解決します エンドポイントが未解決の場合は解決します
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// RPC_BINDING_HANDLE_TEMPLATE_V1_W  (x64 56 / x86 40 バイト)
typedef struct RPC_BINDING_HANDLE_TEMPLATE_V1_W {
    DWORD Version;
    DWORD Flags;
    DWORD ProtocolSequence;
    WORD* NetworkAddress;
    WORD* StringEndpoint;
    _u1_e__Union u1;
    GUID ObjectUuid;
} RPC_BINDING_HANDLE_TEMPLATE_V1_W;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RPC_BINDING_HANDLE_TEMPLATE_V1_W
{
    public uint Version;
    public uint Flags;
    public uint ProtocolSequence;
    public IntPtr NetworkAddress;
    public IntPtr StringEndpoint;
    public _u1_e__Union u1;
    public Guid ObjectUuid;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RPC_BINDING_HANDLE_TEMPLATE_V1_W
    Public Version As UInteger
    Public Flags As UInteger
    Public ProtocolSequence As UInteger
    Public NetworkAddress As IntPtr
    Public StringEndpoint As IntPtr
    Public u1 As _u1_e__Union
    Public ObjectUuid As Guid
End Structure
import ctypes
from ctypes import wintypes

class RPC_BINDING_HANDLE_TEMPLATE_V1_W(ctypes.Structure):
    _fields_ = [
        ("Version", wintypes.DWORD),
        ("Flags", wintypes.DWORD),
        ("ProtocolSequence", wintypes.DWORD),
        ("NetworkAddress", ctypes.c_void_p),
        ("StringEndpoint", ctypes.c_void_p),
        ("u1", _u1_e__Union),
        ("ObjectUuid", GUID),
    ]
#[repr(C)]
pub struct RPC_BINDING_HANDLE_TEMPLATE_V1_W {
    pub Version: u32,
    pub Flags: u32,
    pub ProtocolSequence: u32,
    pub NetworkAddress: *mut core::ffi::c_void,
    pub StringEndpoint: *mut core::ffi::c_void,
    pub u1: _u1_e__Union,
    pub ObjectUuid: GUID,
}
import "golang.org/x/sys/windows"

type RPC_BINDING_HANDLE_TEMPLATE_V1_W struct {
	Version uint32
	Flags uint32
	ProtocolSequence uint32
	NetworkAddress uintptr
	StringEndpoint uintptr
	u1 _u1_e__Union
	ObjectUuid windows.GUID
}
type
  RPC_BINDING_HANDLE_TEMPLATE_V1_W = record
    Version: DWORD;
    Flags: DWORD;
    ProtocolSequence: DWORD;
    NetworkAddress: Pointer;
    StringEndpoint: Pointer;
    u1: _u1_e__Union;
    ObjectUuid: TGUID;
  end;
const RPC_BINDING_HANDLE_TEMPLATE_V1_W = extern struct {
    Version: u32,
    Flags: u32,
    ProtocolSequence: u32,
    NetworkAddress: ?*anyopaque,
    StringEndpoint: ?*anyopaque,
    u1: _u1_e__Union,
    ObjectUuid: GUID,
};
type
  RPC_BINDING_HANDLE_TEMPLATE_V1_W {.bycopy.} = object
    Version: uint32
    Flags: uint32
    ProtocolSequence: uint32
    NetworkAddress: pointer
    StringEndpoint: pointer
    u1: _u1_e__Union
    ObjectUuid: GUID
struct RPC_BINDING_HANDLE_TEMPLATE_V1_W
{
    uint Version;
    uint Flags;
    uint ProtocolSequence;
    void* NetworkAddress;
    void* StringEndpoint;
    _u1_e__Union u1;
    GUID ObjectUuid;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; RPC_BINDING_HANDLE_TEMPLATE_V1_W サイズ: 40 バイト(x86)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; Version : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Flags : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; ProtocolSequence : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; NetworkAddress : WORD* (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; StringEndpoint : WORD* (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; u1 : _u1_e__Union (+20, 4byte)  varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; ObjectUuid : GUID (+24, 16byte)  varptr(st)+24 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RPC_BINDING_HANDLE_TEMPLATE_V1_W サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; Version : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Flags : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; ProtocolSequence : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; NetworkAddress : WORD* (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; StringEndpoint : WORD* (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; u1 : _u1_e__Union (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; ObjectUuid : GUID (+40, 16byte)  varptr(st)+40 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global RPC_BINDING_HANDLE_TEMPLATE_V1_W
    #field int Version
    #field int Flags
    #field int ProtocolSequence
    #field intptr NetworkAddress
    #field intptr StringEndpoint
    #field byte u1 8
    #field GUID ObjectUuid
#endstruct

stdim st, RPC_BINDING_HANDLE_TEMPLATE_V1_W        ; NSTRUCT 変数を確保
st->Version = 100
mes "Version=" + st->Version
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。