Win32 API 日本語リファレンス
ホームNetworkManagement.QoS › RSVP_RESERVE_INFO

RSVP_RESERVE_INFO

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

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

フィールド

フィールドサイズx64x86説明
ObjectHdrQOS_OBJECT_HDR8+0+0オブジェクト種別と長さを示すQOS_OBJECT_HDR。
StyleDWORD4+8+8RSVP予約スタイル(FF/SE/WF)を示す値。
ConfirmRequestDWORD4+12+12予約確認要求の有無を示す値。
PolicyElementListRSVP_POLICY_INFO*8/4+16+16ポリシー情報を示すRSVP_POLICY_INFOへのポインタ。
NumFlowDescDWORD4+24+20FlowDescList配列内のフロー記述子数。
FlowDescListFLOWDESCRIPTOR*8/4+32+24フロー記述子を示すFLOWDESCRIPTOR配列へのポインタ。

各言語での定義

#include <windows.h>

// QOS_OBJECT_HDR  (x64 8 / x86 8 バイト)
typedef struct QOS_OBJECT_HDR {
    DWORD ObjectType;
    DWORD ObjectLength;
} QOS_OBJECT_HDR;

// RSVP_RESERVE_INFO  (x64 40 / x86 28 バイト)
typedef struct RSVP_RESERVE_INFO {
    QOS_OBJECT_HDR ObjectHdr;
    DWORD Style;
    DWORD ConfirmRequest;
    RSVP_POLICY_INFO* PolicyElementList;
    DWORD NumFlowDesc;
    FLOWDESCRIPTOR* FlowDescList;
} RSVP_RESERVE_INFO;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct QOS_OBJECT_HDR
{
    public uint ObjectType;
    public uint ObjectLength;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RSVP_RESERVE_INFO
{
    public QOS_OBJECT_HDR ObjectHdr;
    public uint Style;
    public uint ConfirmRequest;
    public IntPtr PolicyElementList;
    public uint NumFlowDesc;
    public IntPtr FlowDescList;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure QOS_OBJECT_HDR
    Public ObjectType As UInteger
    Public ObjectLength As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RSVP_RESERVE_INFO
    Public ObjectHdr As QOS_OBJECT_HDR
    Public Style As UInteger
    Public ConfirmRequest As UInteger
    Public PolicyElementList As IntPtr
    Public NumFlowDesc As UInteger
    Public FlowDescList As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class QOS_OBJECT_HDR(ctypes.Structure):
    _fields_ = [
        ("ObjectType", wintypes.DWORD),
        ("ObjectLength", wintypes.DWORD),
    ]

class RSVP_RESERVE_INFO(ctypes.Structure):
    _fields_ = [
        ("ObjectHdr", QOS_OBJECT_HDR),
        ("Style", wintypes.DWORD),
        ("ConfirmRequest", wintypes.DWORD),
        ("PolicyElementList", ctypes.c_void_p),
        ("NumFlowDesc", wintypes.DWORD),
        ("FlowDescList", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct QOS_OBJECT_HDR {
    pub ObjectType: u32,
    pub ObjectLength: u32,
}

#[repr(C)]
pub struct RSVP_RESERVE_INFO {
    pub ObjectHdr: QOS_OBJECT_HDR,
    pub Style: u32,
    pub ConfirmRequest: u32,
    pub PolicyElementList: *mut core::ffi::c_void,
    pub NumFlowDesc: u32,
    pub FlowDescList: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type QOS_OBJECT_HDR struct {
	ObjectType uint32
	ObjectLength uint32
}

type RSVP_RESERVE_INFO struct {
	ObjectHdr QOS_OBJECT_HDR
	Style uint32
	ConfirmRequest uint32
	PolicyElementList uintptr
	NumFlowDesc uint32
	FlowDescList uintptr
}
type
  QOS_OBJECT_HDR = record
    ObjectType: DWORD;
    ObjectLength: DWORD;
  end;

  RSVP_RESERVE_INFO = record
    ObjectHdr: QOS_OBJECT_HDR;
    Style: DWORD;
    ConfirmRequest: DWORD;
    PolicyElementList: Pointer;
    NumFlowDesc: DWORD;
    FlowDescList: Pointer;
  end;
const QOS_OBJECT_HDR = extern struct {
    ObjectType: u32,
    ObjectLength: u32,
};

const RSVP_RESERVE_INFO = extern struct {
    ObjectHdr: QOS_OBJECT_HDR,
    Style: u32,
    ConfirmRequest: u32,
    PolicyElementList: ?*anyopaque,
    NumFlowDesc: u32,
    FlowDescList: ?*anyopaque,
};
type
  QOS_OBJECT_HDR {.bycopy.} = object
    ObjectType: uint32
    ObjectLength: uint32

  RSVP_RESERVE_INFO {.bycopy.} = object
    ObjectHdr: QOS_OBJECT_HDR
    Style: uint32
    ConfirmRequest: uint32
    PolicyElementList: pointer
    NumFlowDesc: uint32
    FlowDescList: pointer
struct QOS_OBJECT_HDR
{
    uint ObjectType;
    uint ObjectLength;
}

struct RSVP_RESERVE_INFO
{
    QOS_OBJECT_HDR ObjectHdr;
    uint Style;
    uint ConfirmRequest;
    void* PolicyElementList;
    uint NumFlowDesc;
    void* FlowDescList;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; RSVP_RESERVE_INFO サイズ: 28 バイト(x86)
dim st, 7    ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; ObjectHdr : QOS_OBJECT_HDR (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; Style : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; ConfirmRequest : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; PolicyElementList : RSVP_POLICY_INFO* (+16, 4byte)  varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; NumFlowDesc : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; FlowDescList : FLOWDESCRIPTOR* (+24, 4byte)  varptr(st)+24 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RSVP_RESERVE_INFO サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; ObjectHdr : QOS_OBJECT_HDR (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; Style : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; ConfirmRequest : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; PolicyElementList : RSVP_POLICY_INFO* (+16, 8byte)  varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; NumFlowDesc : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; FlowDescList : FLOWDESCRIPTOR* (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global QOS_OBJECT_HDR
    #field int ObjectType
    #field int ObjectLength
#endstruct

#defstruct global RSVP_RESERVE_INFO
    #field QOS_OBJECT_HDR ObjectHdr
    #field int Style
    #field int ConfirmRequest
    #field intptr PolicyElementList
    #field int NumFlowDesc
    #field intptr FlowDescList
#endstruct

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