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

NDIS_CO_DEVICE_PROFILE

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

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

フィールド

フィールドサイズx64x86説明
DeviceDescriptionNDIS_VAR_DATA_DESC16/8+0+0デバイスの説明文字列を示す可変データ記述子。
DevSpecificInfoNDIS_VAR_DATA_DESC16/8+16+8デバイス固有情報を示す可変データ記述子。
ulTAPISupplementaryPassThruDWORD4+32+16TAPIの補助パススルー機能サポートを示す。
ulAddressModesDWORD4+36+20サポートするアドレスモードのフラグ。
ulNumAddressesDWORD4+40+24デバイス上のアドレス数。
ulBearerModesDWORD4+44+28サポートするベアラモードのフラグ。
ulMaxTxRateDWORD4+48+32最大送信レート(bps)。
ulMinTxRateDWORD4+52+36最小送信レート(bps)。
ulMaxRxRateDWORD4+56+40最大受信レート(bps)。
ulMinRxRateDWORD4+60+44最小受信レート(bps)。
ulMediaModesDWORD4+64+48サポートするメディアモードのフラグ。
ulGenerateToneModesDWORD4+68+52サポートするトーン生成モードのフラグ。
ulGenerateToneMaxNumFreqDWORD4+72+56同時に生成可能なトーン周波数の最大数。
ulGenerateDigitModesDWORD4+76+60サポートするダイヤル桁生成モードのフラグ。
ulMonitorToneMaxNumFreqDWORD4+80+64監視可能なトーン周波数の最大数。
ulMonitorToneMaxNumEntriesDWORD4+84+68トーン監視リストの最大エントリ数。
ulMonitorDigitModesDWORD4+88+72サポートする桁監視モードのフラグ。
ulGatherDigitsMinTimeoutDWORD4+92+76桁収集の最小タイムアウト(ミリ秒)。
ulGatherDigitsMaxTimeoutDWORD4+96+80桁収集の最大タイムアウト(ミリ秒)。
ulDevCapFlagsDWORD4+100+84デバイス能力を示すフラグ。
ulMaxNumActiveCallsDWORD4+104+88同時にアクティブにできる通話の最大数。
ulAnswerModeDWORD4+108+92通話応答時の既存通話の扱いを示すモード。
ulUUIAcceptSizeDWORD4+112+96Accept時に送信可能なユーザーユーザー情報の最大サイズ(バイト)。
ulUUIAnswerSizeDWORD4+116+100Answer時に送信可能なユーザーユーザー情報の最大サイズ(バイト)。
ulUUIMakeCallSizeDWORD4+120+104発信時に送信可能なユーザーユーザー情報の最大サイズ(バイト)。
ulUUIDropSizeDWORD4+124+108切断時に送信可能なユーザーユーザー情報の最大サイズ(バイト)。
ulUUISendUserUserInfoSizeDWORD4+128+112ユーザーユーザー情報送信操作の最大サイズ(バイト)。
ulUUICallInfoSizeDWORD4+132+116通話情報中のユーザーユーザー情報の最大サイズ(バイト)。

各言語での定義

#include <windows.h>

// NDIS_VAR_DATA_DESC  (x64 16 / x86 8 バイト)
typedef struct NDIS_VAR_DATA_DESC {
    WORD Length;
    WORD MaximumLength;
    UINT_PTR Offset;
} NDIS_VAR_DATA_DESC;

// NDIS_CO_DEVICE_PROFILE  (x64 136 / x86 120 バイト)
typedef struct NDIS_CO_DEVICE_PROFILE {
    NDIS_VAR_DATA_DESC DeviceDescription;
    NDIS_VAR_DATA_DESC DevSpecificInfo;
    DWORD ulTAPISupplementaryPassThru;
    DWORD ulAddressModes;
    DWORD ulNumAddresses;
    DWORD ulBearerModes;
    DWORD ulMaxTxRate;
    DWORD ulMinTxRate;
    DWORD ulMaxRxRate;
    DWORD ulMinRxRate;
    DWORD ulMediaModes;
    DWORD ulGenerateToneModes;
    DWORD ulGenerateToneMaxNumFreq;
    DWORD ulGenerateDigitModes;
    DWORD ulMonitorToneMaxNumFreq;
    DWORD ulMonitorToneMaxNumEntries;
    DWORD ulMonitorDigitModes;
    DWORD ulGatherDigitsMinTimeout;
    DWORD ulGatherDigitsMaxTimeout;
    DWORD ulDevCapFlags;
    DWORD ulMaxNumActiveCalls;
    DWORD ulAnswerMode;
    DWORD ulUUIAcceptSize;
    DWORD ulUUIAnswerSize;
    DWORD ulUUIMakeCallSize;
    DWORD ulUUIDropSize;
    DWORD ulUUISendUserUserInfoSize;
    DWORD ulUUICallInfoSize;
} NDIS_CO_DEVICE_PROFILE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NDIS_VAR_DATA_DESC
{
    public ushort Length;
    public ushort MaximumLength;
    public UIntPtr Offset;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NDIS_CO_DEVICE_PROFILE
{
    public NDIS_VAR_DATA_DESC DeviceDescription;
    public NDIS_VAR_DATA_DESC DevSpecificInfo;
    public uint ulTAPISupplementaryPassThru;
    public uint ulAddressModes;
    public uint ulNumAddresses;
    public uint ulBearerModes;
    public uint ulMaxTxRate;
    public uint ulMinTxRate;
    public uint ulMaxRxRate;
    public uint ulMinRxRate;
    public uint ulMediaModes;
    public uint ulGenerateToneModes;
    public uint ulGenerateToneMaxNumFreq;
    public uint ulGenerateDigitModes;
    public uint ulMonitorToneMaxNumFreq;
    public uint ulMonitorToneMaxNumEntries;
    public uint ulMonitorDigitModes;
    public uint ulGatherDigitsMinTimeout;
    public uint ulGatherDigitsMaxTimeout;
    public uint ulDevCapFlags;
    public uint ulMaxNumActiveCalls;
    public uint ulAnswerMode;
    public uint ulUUIAcceptSize;
    public uint ulUUIAnswerSize;
    public uint ulUUIMakeCallSize;
    public uint ulUUIDropSize;
    public uint ulUUISendUserUserInfoSize;
    public uint ulUUICallInfoSize;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NDIS_VAR_DATA_DESC
    Public Length As UShort
    Public MaximumLength As UShort
    Public Offset As UIntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NDIS_CO_DEVICE_PROFILE
    Public DeviceDescription As NDIS_VAR_DATA_DESC
    Public DevSpecificInfo As NDIS_VAR_DATA_DESC
    Public ulTAPISupplementaryPassThru As UInteger
    Public ulAddressModes As UInteger
    Public ulNumAddresses As UInteger
    Public ulBearerModes As UInteger
    Public ulMaxTxRate As UInteger
    Public ulMinTxRate As UInteger
    Public ulMaxRxRate As UInteger
    Public ulMinRxRate As UInteger
    Public ulMediaModes As UInteger
    Public ulGenerateToneModes As UInteger
    Public ulGenerateToneMaxNumFreq As UInteger
    Public ulGenerateDigitModes As UInteger
    Public ulMonitorToneMaxNumFreq As UInteger
    Public ulMonitorToneMaxNumEntries As UInteger
    Public ulMonitorDigitModes As UInteger
    Public ulGatherDigitsMinTimeout As UInteger
    Public ulGatherDigitsMaxTimeout As UInteger
    Public ulDevCapFlags As UInteger
    Public ulMaxNumActiveCalls As UInteger
    Public ulAnswerMode As UInteger
    Public ulUUIAcceptSize As UInteger
    Public ulUUIAnswerSize As UInteger
    Public ulUUIMakeCallSize As UInteger
    Public ulUUIDropSize As UInteger
    Public ulUUISendUserUserInfoSize As UInteger
    Public ulUUICallInfoSize As UInteger
End Structure
import ctypes
from ctypes import wintypes

class NDIS_VAR_DATA_DESC(ctypes.Structure):
    _fields_ = [
        ("Length", ctypes.c_ushort),
        ("MaximumLength", ctypes.c_ushort),
        ("Offset", ctypes.c_size_t),
    ]

class NDIS_CO_DEVICE_PROFILE(ctypes.Structure):
    _fields_ = [
        ("DeviceDescription", NDIS_VAR_DATA_DESC),
        ("DevSpecificInfo", NDIS_VAR_DATA_DESC),
        ("ulTAPISupplementaryPassThru", wintypes.DWORD),
        ("ulAddressModes", wintypes.DWORD),
        ("ulNumAddresses", wintypes.DWORD),
        ("ulBearerModes", wintypes.DWORD),
        ("ulMaxTxRate", wintypes.DWORD),
        ("ulMinTxRate", wintypes.DWORD),
        ("ulMaxRxRate", wintypes.DWORD),
        ("ulMinRxRate", wintypes.DWORD),
        ("ulMediaModes", wintypes.DWORD),
        ("ulGenerateToneModes", wintypes.DWORD),
        ("ulGenerateToneMaxNumFreq", wintypes.DWORD),
        ("ulGenerateDigitModes", wintypes.DWORD),
        ("ulMonitorToneMaxNumFreq", wintypes.DWORD),
        ("ulMonitorToneMaxNumEntries", wintypes.DWORD),
        ("ulMonitorDigitModes", wintypes.DWORD),
        ("ulGatherDigitsMinTimeout", wintypes.DWORD),
        ("ulGatherDigitsMaxTimeout", wintypes.DWORD),
        ("ulDevCapFlags", wintypes.DWORD),
        ("ulMaxNumActiveCalls", wintypes.DWORD),
        ("ulAnswerMode", wintypes.DWORD),
        ("ulUUIAcceptSize", wintypes.DWORD),
        ("ulUUIAnswerSize", wintypes.DWORD),
        ("ulUUIMakeCallSize", wintypes.DWORD),
        ("ulUUIDropSize", wintypes.DWORD),
        ("ulUUISendUserUserInfoSize", wintypes.DWORD),
        ("ulUUICallInfoSize", wintypes.DWORD),
    ]
#[repr(C)]
pub struct NDIS_VAR_DATA_DESC {
    pub Length: u16,
    pub MaximumLength: u16,
    pub Offset: usize,
}

#[repr(C)]
pub struct NDIS_CO_DEVICE_PROFILE {
    pub DeviceDescription: NDIS_VAR_DATA_DESC,
    pub DevSpecificInfo: NDIS_VAR_DATA_DESC,
    pub ulTAPISupplementaryPassThru: u32,
    pub ulAddressModes: u32,
    pub ulNumAddresses: u32,
    pub ulBearerModes: u32,
    pub ulMaxTxRate: u32,
    pub ulMinTxRate: u32,
    pub ulMaxRxRate: u32,
    pub ulMinRxRate: u32,
    pub ulMediaModes: u32,
    pub ulGenerateToneModes: u32,
    pub ulGenerateToneMaxNumFreq: u32,
    pub ulGenerateDigitModes: u32,
    pub ulMonitorToneMaxNumFreq: u32,
    pub ulMonitorToneMaxNumEntries: u32,
    pub ulMonitorDigitModes: u32,
    pub ulGatherDigitsMinTimeout: u32,
    pub ulGatherDigitsMaxTimeout: u32,
    pub ulDevCapFlags: u32,
    pub ulMaxNumActiveCalls: u32,
    pub ulAnswerMode: u32,
    pub ulUUIAcceptSize: u32,
    pub ulUUIAnswerSize: u32,
    pub ulUUIMakeCallSize: u32,
    pub ulUUIDropSize: u32,
    pub ulUUISendUserUserInfoSize: u32,
    pub ulUUICallInfoSize: u32,
}
import "golang.org/x/sys/windows"

type NDIS_VAR_DATA_DESC struct {
	Length uint16
	MaximumLength uint16
	Offset uintptr
}

type NDIS_CO_DEVICE_PROFILE struct {
	DeviceDescription NDIS_VAR_DATA_DESC
	DevSpecificInfo NDIS_VAR_DATA_DESC
	ulTAPISupplementaryPassThru uint32
	ulAddressModes uint32
	ulNumAddresses uint32
	ulBearerModes uint32
	ulMaxTxRate uint32
	ulMinTxRate uint32
	ulMaxRxRate uint32
	ulMinRxRate uint32
	ulMediaModes uint32
	ulGenerateToneModes uint32
	ulGenerateToneMaxNumFreq uint32
	ulGenerateDigitModes uint32
	ulMonitorToneMaxNumFreq uint32
	ulMonitorToneMaxNumEntries uint32
	ulMonitorDigitModes uint32
	ulGatherDigitsMinTimeout uint32
	ulGatherDigitsMaxTimeout uint32
	ulDevCapFlags uint32
	ulMaxNumActiveCalls uint32
	ulAnswerMode uint32
	ulUUIAcceptSize uint32
	ulUUIAnswerSize uint32
	ulUUIMakeCallSize uint32
	ulUUIDropSize uint32
	ulUUISendUserUserInfoSize uint32
	ulUUICallInfoSize uint32
}
type
  NDIS_VAR_DATA_DESC = record
    Length: Word;
    MaximumLength: Word;
    Offset: NativeUInt;
  end;

  NDIS_CO_DEVICE_PROFILE = record
    DeviceDescription: NDIS_VAR_DATA_DESC;
    DevSpecificInfo: NDIS_VAR_DATA_DESC;
    ulTAPISupplementaryPassThru: DWORD;
    ulAddressModes: DWORD;
    ulNumAddresses: DWORD;
    ulBearerModes: DWORD;
    ulMaxTxRate: DWORD;
    ulMinTxRate: DWORD;
    ulMaxRxRate: DWORD;
    ulMinRxRate: DWORD;
    ulMediaModes: DWORD;
    ulGenerateToneModes: DWORD;
    ulGenerateToneMaxNumFreq: DWORD;
    ulGenerateDigitModes: DWORD;
    ulMonitorToneMaxNumFreq: DWORD;
    ulMonitorToneMaxNumEntries: DWORD;
    ulMonitorDigitModes: DWORD;
    ulGatherDigitsMinTimeout: DWORD;
    ulGatherDigitsMaxTimeout: DWORD;
    ulDevCapFlags: DWORD;
    ulMaxNumActiveCalls: DWORD;
    ulAnswerMode: DWORD;
    ulUUIAcceptSize: DWORD;
    ulUUIAnswerSize: DWORD;
    ulUUIMakeCallSize: DWORD;
    ulUUIDropSize: DWORD;
    ulUUISendUserUserInfoSize: DWORD;
    ulUUICallInfoSize: DWORD;
  end;
const NDIS_VAR_DATA_DESC = extern struct {
    Length: u16,
    MaximumLength: u16,
    Offset: usize,
};

const NDIS_CO_DEVICE_PROFILE = extern struct {
    DeviceDescription: NDIS_VAR_DATA_DESC,
    DevSpecificInfo: NDIS_VAR_DATA_DESC,
    ulTAPISupplementaryPassThru: u32,
    ulAddressModes: u32,
    ulNumAddresses: u32,
    ulBearerModes: u32,
    ulMaxTxRate: u32,
    ulMinTxRate: u32,
    ulMaxRxRate: u32,
    ulMinRxRate: u32,
    ulMediaModes: u32,
    ulGenerateToneModes: u32,
    ulGenerateToneMaxNumFreq: u32,
    ulGenerateDigitModes: u32,
    ulMonitorToneMaxNumFreq: u32,
    ulMonitorToneMaxNumEntries: u32,
    ulMonitorDigitModes: u32,
    ulGatherDigitsMinTimeout: u32,
    ulGatherDigitsMaxTimeout: u32,
    ulDevCapFlags: u32,
    ulMaxNumActiveCalls: u32,
    ulAnswerMode: u32,
    ulUUIAcceptSize: u32,
    ulUUIAnswerSize: u32,
    ulUUIMakeCallSize: u32,
    ulUUIDropSize: u32,
    ulUUISendUserUserInfoSize: u32,
    ulUUICallInfoSize: u32,
};
type
  NDIS_VAR_DATA_DESC {.bycopy.} = object
    Length: uint16
    MaximumLength: uint16
    Offset: uint

  NDIS_CO_DEVICE_PROFILE {.bycopy.} = object
    DeviceDescription: NDIS_VAR_DATA_DESC
    DevSpecificInfo: NDIS_VAR_DATA_DESC
    ulTAPISupplementaryPassThru: uint32
    ulAddressModes: uint32
    ulNumAddresses: uint32
    ulBearerModes: uint32
    ulMaxTxRate: uint32
    ulMinTxRate: uint32
    ulMaxRxRate: uint32
    ulMinRxRate: uint32
    ulMediaModes: uint32
    ulGenerateToneModes: uint32
    ulGenerateToneMaxNumFreq: uint32
    ulGenerateDigitModes: uint32
    ulMonitorToneMaxNumFreq: uint32
    ulMonitorToneMaxNumEntries: uint32
    ulMonitorDigitModes: uint32
    ulGatherDigitsMinTimeout: uint32
    ulGatherDigitsMaxTimeout: uint32
    ulDevCapFlags: uint32
    ulMaxNumActiveCalls: uint32
    ulAnswerMode: uint32
    ulUUIAcceptSize: uint32
    ulUUIAnswerSize: uint32
    ulUUIMakeCallSize: uint32
    ulUUIDropSize: uint32
    ulUUISendUserUserInfoSize: uint32
    ulUUICallInfoSize: uint32
struct NDIS_VAR_DATA_DESC
{
    ushort Length;
    ushort MaximumLength;
    size_t Offset;
}

struct NDIS_CO_DEVICE_PROFILE
{
    NDIS_VAR_DATA_DESC DeviceDescription;
    NDIS_VAR_DATA_DESC DevSpecificInfo;
    uint ulTAPISupplementaryPassThru;
    uint ulAddressModes;
    uint ulNumAddresses;
    uint ulBearerModes;
    uint ulMaxTxRate;
    uint ulMinTxRate;
    uint ulMaxRxRate;
    uint ulMinRxRate;
    uint ulMediaModes;
    uint ulGenerateToneModes;
    uint ulGenerateToneMaxNumFreq;
    uint ulGenerateDigitModes;
    uint ulMonitorToneMaxNumFreq;
    uint ulMonitorToneMaxNumEntries;
    uint ulMonitorDigitModes;
    uint ulGatherDigitsMinTimeout;
    uint ulGatherDigitsMaxTimeout;
    uint ulDevCapFlags;
    uint ulMaxNumActiveCalls;
    uint ulAnswerMode;
    uint ulUUIAcceptSize;
    uint ulUUIAnswerSize;
    uint ulUUIMakeCallSize;
    uint ulUUIDropSize;
    uint ulUUISendUserUserInfoSize;
    uint ulUUICallInfoSize;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; NDIS_CO_DEVICE_PROFILE サイズ: 120 バイト(x86)
dim st, 30    ; 4byte整数×30(構造体サイズ 120 / 4 切り上げ)
; DeviceDescription : NDIS_VAR_DATA_DESC (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; DevSpecificInfo : NDIS_VAR_DATA_DESC (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; ulTAPISupplementaryPassThru : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ulAddressModes : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; ulNumAddresses : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ulBearerModes : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ulMaxTxRate : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ulMinTxRate : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ulMaxRxRate : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; ulMinRxRate : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ulMediaModes : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ulGenerateToneModes : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ulGenerateToneMaxNumFreq : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ulGenerateDigitModes : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; ulMonitorToneMaxNumFreq : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; ulMonitorToneMaxNumEntries : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; ulMonitorDigitModes : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; ulGatherDigitsMinTimeout : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; ulGatherDigitsMaxTimeout : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; ulDevCapFlags : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; ulMaxNumActiveCalls : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; ulAnswerMode : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; ulUUIAcceptSize : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; ulUUIAnswerSize : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; ulUUIMakeCallSize : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; ulUUIDropSize : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; ulUUISendUserUserInfoSize : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; ulUUICallInfoSize : DWORD (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NDIS_CO_DEVICE_PROFILE サイズ: 136 バイト(x64)
dim st, 34    ; 4byte整数×34(構造体サイズ 136 / 4 切り上げ)
; DeviceDescription : NDIS_VAR_DATA_DESC (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; DevSpecificInfo : NDIS_VAR_DATA_DESC (+16, 16byte)  varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; ulTAPISupplementaryPassThru : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ulAddressModes : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ulNumAddresses : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; ulBearerModes : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ulMaxTxRate : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ulMinTxRate : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ulMaxRxRate : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ulMinRxRate : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; ulMediaModes : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; ulGenerateToneModes : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; ulGenerateToneMaxNumFreq : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; ulGenerateDigitModes : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; ulMonitorToneMaxNumFreq : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; ulMonitorToneMaxNumEntries : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; ulMonitorDigitModes : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; ulGatherDigitsMinTimeout : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; ulGatherDigitsMaxTimeout : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; ulDevCapFlags : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; ulMaxNumActiveCalls : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; ulAnswerMode : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; ulUUIAcceptSize : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; ulUUIAnswerSize : DWORD (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; ulUUIMakeCallSize : DWORD (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; ulUUIDropSize : DWORD (+124, 4byte)  st.31 = 値  /  値 = st.31   (lpoke/lpeek も可)
; ulUUISendUserUserInfoSize : DWORD (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; ulUUICallInfoSize : DWORD (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global NDIS_VAR_DATA_DESC
    #field short Length
    #field short MaximumLength
    #field intptr Offset
#endstruct

#defstruct global NDIS_CO_DEVICE_PROFILE
    #field NDIS_VAR_DATA_DESC DeviceDescription
    #field NDIS_VAR_DATA_DESC DevSpecificInfo
    #field int ulTAPISupplementaryPassThru
    #field int ulAddressModes
    #field int ulNumAddresses
    #field int ulBearerModes
    #field int ulMaxTxRate
    #field int ulMinTxRate
    #field int ulMaxRxRate
    #field int ulMinRxRate
    #field int ulMediaModes
    #field int ulGenerateToneModes
    #field int ulGenerateToneMaxNumFreq
    #field int ulGenerateDigitModes
    #field int ulMonitorToneMaxNumFreq
    #field int ulMonitorToneMaxNumEntries
    #field int ulMonitorDigitModes
    #field int ulGatherDigitsMinTimeout
    #field int ulGatherDigitsMaxTimeout
    #field int ulDevCapFlags
    #field int ulMaxNumActiveCalls
    #field int ulAnswerMode
    #field int ulUUIAcceptSize
    #field int ulUUIAnswerSize
    #field int ulUUIMakeCallSize
    #field int ulUUIDropSize
    #field int ulUUISendUserUserInfoSize
    #field int ulUUICallInfoSize
#endstruct

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