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

NDR64_PROC_FORMAT

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

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

フィールド

フィールドサイズx64x86説明
FlagsDWORD4+0+0プロシージャの属性を表すフラグ群(DWORD)。
StackSizeDWORD4+4+4呼び出しスタックフレームのサイズ(バイト数)。
ConstantClientBufferSizeDWORD4+8+8クライアント側で固定的に確保するバッファサイズ(バイト数)。
ConstantServerBufferSizeDWORD4+12+12サーバ側で固定的に確保するバッファサイズ(バイト数)。
RpcFlagsWORD2+16+16RPC呼び出しの属性フラグ(WORD)。
FloatDoubleMaskWORD2+18+18引数のうち浮動小数/double型の位置を示すビットマスク(WORD)。
NumberOfParamsWORD2+20+20プロシージャのパラメータ個数(WORD)。
ExtensionSizeWORD2+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 Structure
import 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: uint16
struct 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