ホーム › System.Rpc › NDR64_BINDINGS
NDR64_BINDINGS
共用体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Primitive | NDR64_BIND_PRIMITIVE | 6 | +0 | +0 | プリミティブバインドハンドル情報(NDR64_BIND_PRIMITIVE)。 |
| Generic | NDR64_BIND_GENERIC | 6 | +0 | +0 | 汎用バインドハンドル情報(NDR64_BIND_GENERIC)。 |
| Context | NDR64_BIND_CONTEXT | 6 | +0 | +0 | コンテキストバインドハンドル情報(NDR64_BIND_CONTEXT)。 |
各言語での定義
#include <windows.h>
// NDR64_BIND_PRIMITIVE (x64 6 / x86 6 バイト)
typedef struct NDR64_BIND_PRIMITIVE {
BYTE HandleType;
BYTE Flags;
WORD StackOffset;
WORD Reserved;
} NDR64_BIND_PRIMITIVE;
// NDR64_BIND_GENERIC (x64 6 / x86 6 バイト)
typedef struct NDR64_BIND_GENERIC {
BYTE HandleType;
BYTE Flags;
WORD StackOffset;
BYTE RoutineIndex;
BYTE Size;
} NDR64_BIND_GENERIC;
// NDR64_BIND_CONTEXT (x64 6 / x86 6 バイト)
typedef struct NDR64_BIND_CONTEXT {
BYTE HandleType;
BYTE Flags;
WORD StackOffset;
BYTE RoutineIndex;
BYTE Ordinal;
} NDR64_BIND_CONTEXT;
// NDR64_BINDINGS (x64 6 / x86 6 バイト)
typedef struct NDR64_BINDINGS {
NDR64_BIND_PRIMITIVE Primitive;
NDR64_BIND_GENERIC Generic;
NDR64_BIND_CONTEXT Context;
} NDR64_BINDINGS;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NDR64_BIND_PRIMITIVE
{
public byte HandleType;
public byte Flags;
public ushort StackOffset;
public ushort Reserved;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NDR64_BIND_GENERIC
{
public byte HandleType;
public byte Flags;
public ushort StackOffset;
public byte RoutineIndex;
public byte Size;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NDR64_BIND_CONTEXT
{
public byte HandleType;
public byte Flags;
public ushort StackOffset;
public byte RoutineIndex;
public byte Ordinal;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NDR64_BINDINGS
{
public NDR64_BIND_PRIMITIVE Primitive;
public NDR64_BIND_GENERIC Generic;
public NDR64_BIND_CONTEXT Context;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NDR64_BIND_PRIMITIVE
Public HandleType As Byte
Public Flags As Byte
Public StackOffset As UShort
Public Reserved As UShort
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NDR64_BIND_GENERIC
Public HandleType As Byte
Public Flags As Byte
Public StackOffset As UShort
Public RoutineIndex As Byte
Public Size As Byte
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NDR64_BIND_CONTEXT
Public HandleType As Byte
Public Flags As Byte
Public StackOffset As UShort
Public RoutineIndex As Byte
Public Ordinal As Byte
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NDR64_BINDINGS
Public Primitive As NDR64_BIND_PRIMITIVE
Public Generic As NDR64_BIND_GENERIC
Public Context As NDR64_BIND_CONTEXT
End Structureimport ctypes
from ctypes import wintypes
class NDR64_BIND_PRIMITIVE(ctypes.Structure):
_fields_ = [
("HandleType", ctypes.c_ubyte),
("Flags", ctypes.c_ubyte),
("StackOffset", ctypes.c_ushort),
("Reserved", ctypes.c_ushort),
]
class NDR64_BIND_GENERIC(ctypes.Structure):
_fields_ = [
("HandleType", ctypes.c_ubyte),
("Flags", ctypes.c_ubyte),
("StackOffset", ctypes.c_ushort),
("RoutineIndex", ctypes.c_ubyte),
("Size", ctypes.c_ubyte),
]
class NDR64_BIND_CONTEXT(ctypes.Structure):
_fields_ = [
("HandleType", ctypes.c_ubyte),
("Flags", ctypes.c_ubyte),
("StackOffset", ctypes.c_ushort),
("RoutineIndex", ctypes.c_ubyte),
("Ordinal", ctypes.c_ubyte),
]
class NDR64_BINDINGS(ctypes.Structure):
_fields_ = [
("Primitive", NDR64_BIND_PRIMITIVE),
("Generic", NDR64_BIND_GENERIC),
("Context", NDR64_BIND_CONTEXT),
]#[repr(C)]
pub struct NDR64_BIND_PRIMITIVE {
pub HandleType: u8,
pub Flags: u8,
pub StackOffset: u16,
pub Reserved: u16,
}
#[repr(C)]
pub struct NDR64_BIND_GENERIC {
pub HandleType: u8,
pub Flags: u8,
pub StackOffset: u16,
pub RoutineIndex: u8,
pub Size: u8,
}
#[repr(C)]
pub struct NDR64_BIND_CONTEXT {
pub HandleType: u8,
pub Flags: u8,
pub StackOffset: u16,
pub RoutineIndex: u8,
pub Ordinal: u8,
}
#[repr(C)]
pub struct NDR64_BINDINGS {
pub Primitive: NDR64_BIND_PRIMITIVE,
pub Generic: NDR64_BIND_GENERIC,
pub Context: NDR64_BIND_CONTEXT,
}import "golang.org/x/sys/windows"
type NDR64_BIND_PRIMITIVE struct {
HandleType byte
Flags byte
StackOffset uint16
Reserved uint16
}
type NDR64_BIND_GENERIC struct {
HandleType byte
Flags byte
StackOffset uint16
RoutineIndex byte
Size byte
}
type NDR64_BIND_CONTEXT struct {
HandleType byte
Flags byte
StackOffset uint16
RoutineIndex byte
Ordinal byte
}
type NDR64_BINDINGS struct {
Primitive NDR64_BIND_PRIMITIVE
Generic NDR64_BIND_GENERIC
Context NDR64_BIND_CONTEXT
}type
NDR64_BIND_PRIMITIVE = record
HandleType: Byte;
Flags: Byte;
StackOffset: Word;
Reserved: Word;
end;
NDR64_BIND_GENERIC = record
HandleType: Byte;
Flags: Byte;
StackOffset: Word;
RoutineIndex: Byte;
Size: Byte;
end;
NDR64_BIND_CONTEXT = record
HandleType: Byte;
Flags: Byte;
StackOffset: Word;
RoutineIndex: Byte;
Ordinal: Byte;
end;
NDR64_BINDINGS = record
Primitive: NDR64_BIND_PRIMITIVE;
Generic: NDR64_BIND_GENERIC;
Context: NDR64_BIND_CONTEXT;
end;const NDR64_BIND_PRIMITIVE = extern struct {
HandleType: u8,
Flags: u8,
StackOffset: u16,
Reserved: u16,
};
const NDR64_BIND_GENERIC = extern struct {
HandleType: u8,
Flags: u8,
StackOffset: u16,
RoutineIndex: u8,
Size: u8,
};
const NDR64_BIND_CONTEXT = extern struct {
HandleType: u8,
Flags: u8,
StackOffset: u16,
RoutineIndex: u8,
Ordinal: u8,
};
const NDR64_BINDINGS = extern struct {
Primitive: NDR64_BIND_PRIMITIVE,
Generic: NDR64_BIND_GENERIC,
Context: NDR64_BIND_CONTEXT,
};type
NDR64_BIND_PRIMITIVE {.bycopy.} = object
HandleType: uint8
Flags: uint8
StackOffset: uint16
Reserved: uint16
NDR64_BIND_GENERIC {.bycopy.} = object
HandleType: uint8
Flags: uint8
StackOffset: uint16
RoutineIndex: uint8
Size: uint8
NDR64_BIND_CONTEXT {.bycopy.} = object
HandleType: uint8
Flags: uint8
StackOffset: uint16
RoutineIndex: uint8
Ordinal: uint8
NDR64_BINDINGS {.bycopy.} = object
Primitive: NDR64_BIND_PRIMITIVE
Generic: NDR64_BIND_GENERIC
Context: NDR64_BIND_CONTEXTstruct NDR64_BIND_PRIMITIVE
{
ubyte HandleType;
ubyte Flags;
ushort StackOffset;
ushort Reserved;
}
struct NDR64_BIND_GENERIC
{
ubyte HandleType;
ubyte Flags;
ushort StackOffset;
ubyte RoutineIndex;
ubyte Size;
}
struct NDR64_BIND_CONTEXT
{
ubyte HandleType;
ubyte Flags;
ushort StackOffset;
ubyte RoutineIndex;
ubyte Ordinal;
}
struct NDR64_BINDINGS
{
NDR64_BIND_PRIMITIVE Primitive;
NDR64_BIND_GENERIC Generic;
NDR64_BIND_CONTEXT Context;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NDR64_BINDINGS サイズ: 6 バイト(x64)
dim st, 2 ; 4byte整数×2(構造体サイズ 6 / 4 切り上げ)
; Primitive : NDR64_BIND_PRIMITIVE (+0, 6byte) varptr(st)+0 を基点に操作(6byte:入れ子/配列)
; Generic : NDR64_BIND_GENERIC (+0, 6byte) varptr(st)+0 を基点に操作(6byte:入れ子/配列)
; Context : NDR64_BIND_CONTEXT (+0, 6byte) varptr(st)+0 を基点に操作(6byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global NDR64_BIND_PRIMITIVE
#field byte HandleType
#field byte Flags
#field short StackOffset
#field short Reserved
#endstruct
#defstruct global NDR64_BIND_GENERIC
#field byte HandleType
#field byte Flags
#field short StackOffset
#field byte RoutineIndex
#field byte Size
#endstruct
#defstruct global NDR64_BIND_CONTEXT
#field byte HandleType
#field byte Flags
#field short StackOffset
#field byte RoutineIndex
#field byte Ordinal
#endstruct
#defstruct global NDR64_BINDINGS
#field NDR64_BIND_PRIMITIVE Primitive
#field NDR64_BIND_GENERIC Generic
#field NDR64_BIND_CONTEXT Context
#endstruct
stdim st, NDR64_BINDINGS ; NSTRUCT 変数を確保