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

INTERFACE_TIMESTAMP_CAPABILITIES

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

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

フィールド

フィールドサイズx64x86説明
HardwareClockFrequencyHzULONGLONG8+0+0ハードウェアクロックの周波数(Hz)を示す。
SupportsCrossTimestampBOOLEAN1+8+8システム時刻とハードウェア時刻のクロスタイムスタンプ取得に対応するかを示す。
HardwareCapabilitiesINTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES11+9+9ハードウェアタイムスタンプ機能の詳細(INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES)である。
SoftwareCapabilitiesINTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES3+20+20ソフトウェアタイムスタンプ機能の詳細(INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES)である。

各言語での定義

#include <windows.h>

// INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES  (x64 11 / x86 11 バイト)
typedef struct INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES {
    BOOLEAN PtpV2OverUdpIPv4EventMessageReceive;
    BOOLEAN PtpV2OverUdpIPv4AllMessageReceive;
    BOOLEAN PtpV2OverUdpIPv4EventMessageTransmit;
    BOOLEAN PtpV2OverUdpIPv4AllMessageTransmit;
    BOOLEAN PtpV2OverUdpIPv6EventMessageReceive;
    BOOLEAN PtpV2OverUdpIPv6AllMessageReceive;
    BOOLEAN PtpV2OverUdpIPv6EventMessageTransmit;
    BOOLEAN PtpV2OverUdpIPv6AllMessageTransmit;
    BOOLEAN AllReceive;
    BOOLEAN AllTransmit;
    BOOLEAN TaggedTransmit;
} INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES;

// INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES  (x64 3 / x86 3 バイト)
typedef struct INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES {
    BOOLEAN AllReceive;
    BOOLEAN AllTransmit;
    BOOLEAN TaggedTransmit;
} INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES;

// INTERFACE_TIMESTAMP_CAPABILITIES  (x64 24 / x86 24 バイト)
typedef struct INTERFACE_TIMESTAMP_CAPABILITIES {
    ULONGLONG HardwareClockFrequencyHz;
    BOOLEAN SupportsCrossTimestamp;
    INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES HardwareCapabilities;
    INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES SoftwareCapabilities;
} INTERFACE_TIMESTAMP_CAPABILITIES;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES
{
    [MarshalAs(UnmanagedType.U1)] public bool PtpV2OverUdpIPv4EventMessageReceive;
    [MarshalAs(UnmanagedType.U1)] public bool PtpV2OverUdpIPv4AllMessageReceive;
    [MarshalAs(UnmanagedType.U1)] public bool PtpV2OverUdpIPv4EventMessageTransmit;
    [MarshalAs(UnmanagedType.U1)] public bool PtpV2OverUdpIPv4AllMessageTransmit;
    [MarshalAs(UnmanagedType.U1)] public bool PtpV2OverUdpIPv6EventMessageReceive;
    [MarshalAs(UnmanagedType.U1)] public bool PtpV2OverUdpIPv6AllMessageReceive;
    [MarshalAs(UnmanagedType.U1)] public bool PtpV2OverUdpIPv6EventMessageTransmit;
    [MarshalAs(UnmanagedType.U1)] public bool PtpV2OverUdpIPv6AllMessageTransmit;
    [MarshalAs(UnmanagedType.U1)] public bool AllReceive;
    [MarshalAs(UnmanagedType.U1)] public bool AllTransmit;
    [MarshalAs(UnmanagedType.U1)] public bool TaggedTransmit;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES
{
    [MarshalAs(UnmanagedType.U1)] public bool AllReceive;
    [MarshalAs(UnmanagedType.U1)] public bool AllTransmit;
    [MarshalAs(UnmanagedType.U1)] public bool TaggedTransmit;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct INTERFACE_TIMESTAMP_CAPABILITIES
{
    public ulong HardwareClockFrequencyHz;
    [MarshalAs(UnmanagedType.U1)] public bool SupportsCrossTimestamp;
    public INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES HardwareCapabilities;
    public INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES SoftwareCapabilities;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES
    <MarshalAs(UnmanagedType.U1)> Public PtpV2OverUdpIPv4EventMessageReceive As Boolean
    <MarshalAs(UnmanagedType.U1)> Public PtpV2OverUdpIPv4AllMessageReceive As Boolean
    <MarshalAs(UnmanagedType.U1)> Public PtpV2OverUdpIPv4EventMessageTransmit As Boolean
    <MarshalAs(UnmanagedType.U1)> Public PtpV2OverUdpIPv4AllMessageTransmit As Boolean
    <MarshalAs(UnmanagedType.U1)> Public PtpV2OverUdpIPv6EventMessageReceive As Boolean
    <MarshalAs(UnmanagedType.U1)> Public PtpV2OverUdpIPv6AllMessageReceive As Boolean
    <MarshalAs(UnmanagedType.U1)> Public PtpV2OverUdpIPv6EventMessageTransmit As Boolean
    <MarshalAs(UnmanagedType.U1)> Public PtpV2OverUdpIPv6AllMessageTransmit As Boolean
    <MarshalAs(UnmanagedType.U1)> Public AllReceive As Boolean
    <MarshalAs(UnmanagedType.U1)> Public AllTransmit As Boolean
    <MarshalAs(UnmanagedType.U1)> Public TaggedTransmit As Boolean
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES
    <MarshalAs(UnmanagedType.U1)> Public AllReceive As Boolean
    <MarshalAs(UnmanagedType.U1)> Public AllTransmit As Boolean
    <MarshalAs(UnmanagedType.U1)> Public TaggedTransmit As Boolean
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure INTERFACE_TIMESTAMP_CAPABILITIES
    Public HardwareClockFrequencyHz As ULong
    <MarshalAs(UnmanagedType.U1)> Public SupportsCrossTimestamp As Boolean
    Public HardwareCapabilities As INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES
    Public SoftwareCapabilities As INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES
End Structure
import ctypes
from ctypes import wintypes

class INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES(ctypes.Structure):
    _fields_ = [
        ("PtpV2OverUdpIPv4EventMessageReceive", ctypes.c_byte),
        ("PtpV2OverUdpIPv4AllMessageReceive", ctypes.c_byte),
        ("PtpV2OverUdpIPv4EventMessageTransmit", ctypes.c_byte),
        ("PtpV2OverUdpIPv4AllMessageTransmit", ctypes.c_byte),
        ("PtpV2OverUdpIPv6EventMessageReceive", ctypes.c_byte),
        ("PtpV2OverUdpIPv6AllMessageReceive", ctypes.c_byte),
        ("PtpV2OverUdpIPv6EventMessageTransmit", ctypes.c_byte),
        ("PtpV2OverUdpIPv6AllMessageTransmit", ctypes.c_byte),
        ("AllReceive", ctypes.c_byte),
        ("AllTransmit", ctypes.c_byte),
        ("TaggedTransmit", ctypes.c_byte),
    ]

class INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES(ctypes.Structure):
    _fields_ = [
        ("AllReceive", ctypes.c_byte),
        ("AllTransmit", ctypes.c_byte),
        ("TaggedTransmit", ctypes.c_byte),
    ]

class INTERFACE_TIMESTAMP_CAPABILITIES(ctypes.Structure):
    _fields_ = [
        ("HardwareClockFrequencyHz", ctypes.c_ulonglong),
        ("SupportsCrossTimestamp", ctypes.c_byte),
        ("HardwareCapabilities", INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES),
        ("SoftwareCapabilities", INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES),
    ]
#[repr(C)]
pub struct INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES {
    pub PtpV2OverUdpIPv4EventMessageReceive: u8,
    pub PtpV2OverUdpIPv4AllMessageReceive: u8,
    pub PtpV2OverUdpIPv4EventMessageTransmit: u8,
    pub PtpV2OverUdpIPv4AllMessageTransmit: u8,
    pub PtpV2OverUdpIPv6EventMessageReceive: u8,
    pub PtpV2OverUdpIPv6AllMessageReceive: u8,
    pub PtpV2OverUdpIPv6EventMessageTransmit: u8,
    pub PtpV2OverUdpIPv6AllMessageTransmit: u8,
    pub AllReceive: u8,
    pub AllTransmit: u8,
    pub TaggedTransmit: u8,
}

#[repr(C)]
pub struct INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES {
    pub AllReceive: u8,
    pub AllTransmit: u8,
    pub TaggedTransmit: u8,
}

#[repr(C)]
pub struct INTERFACE_TIMESTAMP_CAPABILITIES {
    pub HardwareClockFrequencyHz: u64,
    pub SupportsCrossTimestamp: u8,
    pub HardwareCapabilities: INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES,
    pub SoftwareCapabilities: INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES,
}
import "golang.org/x/sys/windows"

type INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES struct {
	PtpV2OverUdpIPv4EventMessageReceive byte
	PtpV2OverUdpIPv4AllMessageReceive byte
	PtpV2OverUdpIPv4EventMessageTransmit byte
	PtpV2OverUdpIPv4AllMessageTransmit byte
	PtpV2OverUdpIPv6EventMessageReceive byte
	PtpV2OverUdpIPv6AllMessageReceive byte
	PtpV2OverUdpIPv6EventMessageTransmit byte
	PtpV2OverUdpIPv6AllMessageTransmit byte
	AllReceive byte
	AllTransmit byte
	TaggedTransmit byte
}

type INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES struct {
	AllReceive byte
	AllTransmit byte
	TaggedTransmit byte
}

type INTERFACE_TIMESTAMP_CAPABILITIES struct {
	HardwareClockFrequencyHz uint64
	SupportsCrossTimestamp byte
	HardwareCapabilities INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES
	SoftwareCapabilities INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES
}
type
  INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES = record
    PtpV2OverUdpIPv4EventMessageReceive: ByteBool;
    PtpV2OverUdpIPv4AllMessageReceive: ByteBool;
    PtpV2OverUdpIPv4EventMessageTransmit: ByteBool;
    PtpV2OverUdpIPv4AllMessageTransmit: ByteBool;
    PtpV2OverUdpIPv6EventMessageReceive: ByteBool;
    PtpV2OverUdpIPv6AllMessageReceive: ByteBool;
    PtpV2OverUdpIPv6EventMessageTransmit: ByteBool;
    PtpV2OverUdpIPv6AllMessageTransmit: ByteBool;
    AllReceive: ByteBool;
    AllTransmit: ByteBool;
    TaggedTransmit: ByteBool;
  end;

  INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES = record
    AllReceive: ByteBool;
    AllTransmit: ByteBool;
    TaggedTransmit: ByteBool;
  end;

  INTERFACE_TIMESTAMP_CAPABILITIES = record
    HardwareClockFrequencyHz: UInt64;
    SupportsCrossTimestamp: ByteBool;
    HardwareCapabilities: INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES;
    SoftwareCapabilities: INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES;
  end;
const INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES = extern struct {
    PtpV2OverUdpIPv4EventMessageReceive: u8,
    PtpV2OverUdpIPv4AllMessageReceive: u8,
    PtpV2OverUdpIPv4EventMessageTransmit: u8,
    PtpV2OverUdpIPv4AllMessageTransmit: u8,
    PtpV2OverUdpIPv6EventMessageReceive: u8,
    PtpV2OverUdpIPv6AllMessageReceive: u8,
    PtpV2OverUdpIPv6EventMessageTransmit: u8,
    PtpV2OverUdpIPv6AllMessageTransmit: u8,
    AllReceive: u8,
    AllTransmit: u8,
    TaggedTransmit: u8,
};

const INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES = extern struct {
    AllReceive: u8,
    AllTransmit: u8,
    TaggedTransmit: u8,
};

const INTERFACE_TIMESTAMP_CAPABILITIES = extern struct {
    HardwareClockFrequencyHz: u64,
    SupportsCrossTimestamp: u8,
    HardwareCapabilities: INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES,
    SoftwareCapabilities: INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES,
};
type
  INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES {.bycopy.} = object
    PtpV2OverUdpIPv4EventMessageReceive: uint8
    PtpV2OverUdpIPv4AllMessageReceive: uint8
    PtpV2OverUdpIPv4EventMessageTransmit: uint8
    PtpV2OverUdpIPv4AllMessageTransmit: uint8
    PtpV2OverUdpIPv6EventMessageReceive: uint8
    PtpV2OverUdpIPv6AllMessageReceive: uint8
    PtpV2OverUdpIPv6EventMessageTransmit: uint8
    PtpV2OverUdpIPv6AllMessageTransmit: uint8
    AllReceive: uint8
    AllTransmit: uint8
    TaggedTransmit: uint8

  INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES {.bycopy.} = object
    AllReceive: uint8
    AllTransmit: uint8
    TaggedTransmit: uint8

  INTERFACE_TIMESTAMP_CAPABILITIES {.bycopy.} = object
    HardwareClockFrequencyHz: uint64
    SupportsCrossTimestamp: uint8
    HardwareCapabilities: INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES
    SoftwareCapabilities: INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES
struct INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES
{
    ubyte PtpV2OverUdpIPv4EventMessageReceive;
    ubyte PtpV2OverUdpIPv4AllMessageReceive;
    ubyte PtpV2OverUdpIPv4EventMessageTransmit;
    ubyte PtpV2OverUdpIPv4AllMessageTransmit;
    ubyte PtpV2OverUdpIPv6EventMessageReceive;
    ubyte PtpV2OverUdpIPv6AllMessageReceive;
    ubyte PtpV2OverUdpIPv6EventMessageTransmit;
    ubyte PtpV2OverUdpIPv6AllMessageTransmit;
    ubyte AllReceive;
    ubyte AllTransmit;
    ubyte TaggedTransmit;
}

struct INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES
{
    ubyte AllReceive;
    ubyte AllTransmit;
    ubyte TaggedTransmit;
}

struct INTERFACE_TIMESTAMP_CAPABILITIES
{
    ulong HardwareClockFrequencyHz;
    ubyte SupportsCrossTimestamp;
    INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES HardwareCapabilities;
    INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES SoftwareCapabilities;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; INTERFACE_TIMESTAMP_CAPABILITIES サイズ: 24 バイト(x64)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; HardwareClockFrequencyHz : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; SupportsCrossTimestamp : BOOLEAN (+8, 1byte)  poke st,8,値  /  値 = peek(st,8)
; HardwareCapabilities : INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES (+9, 11byte)  varptr(st)+9 を基点に操作(11byte:入れ子/配列)
; SoftwareCapabilities : INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES (+20, 3byte)  varptr(st)+20 を基点に操作(3byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES
    #field bool1 PtpV2OverUdpIPv4EventMessageReceive
    #field bool1 PtpV2OverUdpIPv4AllMessageReceive
    #field bool1 PtpV2OverUdpIPv4EventMessageTransmit
    #field bool1 PtpV2OverUdpIPv4AllMessageTransmit
    #field bool1 PtpV2OverUdpIPv6EventMessageReceive
    #field bool1 PtpV2OverUdpIPv6AllMessageReceive
    #field bool1 PtpV2OverUdpIPv6EventMessageTransmit
    #field bool1 PtpV2OverUdpIPv6AllMessageTransmit
    #field bool1 AllReceive
    #field bool1 AllTransmit
    #field bool1 TaggedTransmit
#endstruct

#defstruct global INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES
    #field bool1 AllReceive
    #field bool1 AllTransmit
    #field bool1 TaggedTransmit
#endstruct

#defstruct global INTERFACE_TIMESTAMP_CAPABILITIES
    #field int64 HardwareClockFrequencyHz
    #field bool1 SupportsCrossTimestamp
    #field INTERFACE_HARDWARE_TIMESTAMP_CAPABILITIES HardwareCapabilities
    #field INTERFACE_SOFTWARE_TIMESTAMP_CAPABILITIES SoftwareCapabilities
#endstruct

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