ホーム › System.Rpc › NDR64_PROC_FORMAT
NDR64_PROC_FORMAT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Flags | DWORD | 4 | +0 | +0 | プロシージャの属性を表すフラグ群(DWORD)。 |
| StackSize | DWORD | 4 | +4 | +4 | 呼び出しスタックフレームのサイズ(バイト数)。 |
| ConstantClientBufferSize | DWORD | 4 | +8 | +8 | クライアント側で固定的に確保するバッファサイズ(バイト数)。 |
| ConstantServerBufferSize | DWORD | 4 | +12 | +12 | サーバ側で固定的に確保するバッファサイズ(バイト数)。 |
| RpcFlags | WORD | 2 | +16 | +16 | RPC呼び出しの属性フラグ(WORD)。 |
| FloatDoubleMask | WORD | 2 | +18 | +18 | 引数のうち浮動小数/double型の位置を示すビットマスク(WORD)。 |
| NumberOfParams | WORD | 2 | +20 | +20 | プロシージャのパラメータ個数(WORD)。 |
| ExtensionSize | WORD | 2 | +22 | +22 | プロシージャ拡張データのサイズ(バイト数、WORD)。 |
各言語での定義
#include <windows.h>
// NDR64_PROC_FORMAT (x64 24 / x86 24 バイト)
typedef struct NDR64_PROC_FORMAT {
DWORD Flags;
DWORD StackSize;
DWORD ConstantClientBufferSize;
DWORD ConstantServerBufferSize;
WORD RpcFlags;
WORD FloatDoubleMask;
WORD NumberOfParams;
WORD ExtensionSize;
} NDR64_PROC_FORMAT;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NDR64_PROC_FORMAT
{
public uint Flags;
public uint StackSize;
public uint ConstantClientBufferSize;
public uint ConstantServerBufferSize;
public ushort RpcFlags;
public ushort FloatDoubleMask;
public ushort NumberOfParams;
public ushort ExtensionSize;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NDR64_PROC_FORMAT
Public Flags As UInteger
Public StackSize As UInteger
Public ConstantClientBufferSize As UInteger
Public ConstantServerBufferSize As UInteger
Public RpcFlags As UShort
Public FloatDoubleMask As UShort
Public NumberOfParams As UShort
Public ExtensionSize As UShort
End Structureimport ctypes
from ctypes import wintypes
class NDR64_PROC_FORMAT(ctypes.Structure):
_fields_ = [
("Flags", wintypes.DWORD),
("StackSize", wintypes.DWORD),
("ConstantClientBufferSize", wintypes.DWORD),
("ConstantServerBufferSize", wintypes.DWORD),
("RpcFlags", ctypes.c_ushort),
("FloatDoubleMask", ctypes.c_ushort),
("NumberOfParams", ctypes.c_ushort),
("ExtensionSize", ctypes.c_ushort),
]#[repr(C)]
pub struct NDR64_PROC_FORMAT {
pub Flags: u32,
pub StackSize: u32,
pub ConstantClientBufferSize: u32,
pub ConstantServerBufferSize: u32,
pub RpcFlags: u16,
pub FloatDoubleMask: u16,
pub NumberOfParams: u16,
pub ExtensionSize: u16,
}import "golang.org/x/sys/windows"
type NDR64_PROC_FORMAT struct {
Flags uint32
StackSize uint32
ConstantClientBufferSize uint32
ConstantServerBufferSize uint32
RpcFlags uint16
FloatDoubleMask uint16
NumberOfParams uint16
ExtensionSize uint16
}type
NDR64_PROC_FORMAT = record
Flags: DWORD;
StackSize: DWORD;
ConstantClientBufferSize: DWORD;
ConstantServerBufferSize: DWORD;
RpcFlags: Word;
FloatDoubleMask: Word;
NumberOfParams: Word;
ExtensionSize: Word;
end;const NDR64_PROC_FORMAT = extern struct {
Flags: u32,
StackSize: u32,
ConstantClientBufferSize: u32,
ConstantServerBufferSize: u32,
RpcFlags: u16,
FloatDoubleMask: u16,
NumberOfParams: u16,
ExtensionSize: u16,
};type
NDR64_PROC_FORMAT {.bycopy.} = object
Flags: uint32
StackSize: uint32
ConstantClientBufferSize: uint32
ConstantServerBufferSize: uint32
RpcFlags: uint16
FloatDoubleMask: uint16
NumberOfParams: uint16
ExtensionSize: uint16struct NDR64_PROC_FORMAT
{
uint Flags;
uint StackSize;
uint ConstantClientBufferSize;
uint ConstantServerBufferSize;
ushort RpcFlags;
ushort FloatDoubleMask;
ushort NumberOfParams;
ushort ExtensionSize;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NDR64_PROC_FORMAT サイズ: 24 バイト(x64)
dim st, 6 ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; Flags : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; StackSize : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; ConstantClientBufferSize : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; ConstantServerBufferSize : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; RpcFlags : WORD (+16, 2byte) wpoke st,16,値 / 値 = wpeek(st,16)
; FloatDoubleMask : WORD (+18, 2byte) wpoke st,18,値 / 値 = wpeek(st,18)
; NumberOfParams : WORD (+20, 2byte) wpoke st,20,値 / 値 = wpeek(st,20)
; ExtensionSize : WORD (+22, 2byte) wpoke st,22,値 / 値 = wpeek(st,22)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global NDR64_PROC_FORMAT
#field int Flags
#field int StackSize
#field int ConstantClientBufferSize
#field int ConstantServerBufferSize
#field short RpcFlags
#field short FloatDoubleMask
#field short NumberOfParams
#field short ExtensionSize
#endstruct
stdim st, NDR64_PROC_FORMAT ; NSTRUCT 変数を確保
st->Flags = 100
mes "Flags=" + st->Flags