Win32 API 日本語リファレンス
ホームDevices.Usb › USBD_ENDPOINT_OFFLOAD_INFORMATION_V1

USBD_ENDPOINT_OFFLOAD_INFORMATION_V1

構造体
サイズx64: 82 バイト / x86: 66 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
SizeDWORD4+0+0この構造体のサイズをバイト単位で示す。
EndpointAddressWORD2+4+4オフロード対象エンドポイントのアドレスを示す。
ResourceIdDWORD4+6+6オフロードリソースを識別するIDを示す。
ModeUSBD_ENDPOINT_OFFLOAD_MODE4+10+10エンドポイントオフロードのモードを示すUSBD_ENDPOINT_OFFLOAD_MODE列挙値。
_bitfield1DWORD4+14+14オフロード状態を示すビットフィールド(第1ワード)。
_bitfield2DWORD4+18+18オフロード状態を示すビットフィールド(第2ワード)。
TransferSegmentLALONGLONG8+22+22転送リングセグメントの論理アドレスを示す。
TransferSegmentVAvoid*8/4+30+30転送リングセグメントの仮想アドレスへのポインタ。
TransferRingSizeUINT_PTR8/4+38+34転送リングのサイズを示す。
TransferRingInitialCycleBitDWORD4+46+38転送リング初期サイクルビットを示す。
MessageNumberDWORD4+50+42MSI割り込みのメッセージ番号を示す。
EventRingSegmentLALONGLONG8+54+46イベントリングセグメントの論理アドレスを示す。
EventRingSegmentVAvoid*8/4+62+54イベントリングセグメントの仮想アドレスへのポインタ。
EventRingSizeUINT_PTR8/4+70+58イベントリングのサイズを示す。
EventRingInitialCycleBitDWORD4+78+62イベントリング初期サイクルビットを示す。

各言語での定義

#include <windows.h>

// USBD_ENDPOINT_OFFLOAD_INFORMATION_V1  (x64 82 / x86 66 バイト)
#pragma pack(push, 1)
typedef struct USBD_ENDPOINT_OFFLOAD_INFORMATION_V1 {
    DWORD Size;
    WORD EndpointAddress;
    DWORD ResourceId;
    USBD_ENDPOINT_OFFLOAD_MODE Mode;
    DWORD _bitfield1;
    DWORD _bitfield2;
    LONGLONG TransferSegmentLA;
    void* TransferSegmentVA;
    UINT_PTR TransferRingSize;
    DWORD TransferRingInitialCycleBit;
    DWORD MessageNumber;
    LONGLONG EventRingSegmentLA;
    void* EventRingSegmentVA;
    UINT_PTR EventRingSize;
    DWORD EventRingInitialCycleBit;
} USBD_ENDPOINT_OFFLOAD_INFORMATION_V1;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct USBD_ENDPOINT_OFFLOAD_INFORMATION_V1
{
    public uint Size;
    public ushort EndpointAddress;
    public uint ResourceId;
    public int Mode;
    public uint _bitfield1;
    public uint _bitfield2;
    public long TransferSegmentLA;
    public IntPtr TransferSegmentVA;
    public UIntPtr TransferRingSize;
    public uint TransferRingInitialCycleBit;
    public uint MessageNumber;
    public long EventRingSegmentLA;
    public IntPtr EventRingSegmentVA;
    public UIntPtr EventRingSize;
    public uint EventRingInitialCycleBit;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure USBD_ENDPOINT_OFFLOAD_INFORMATION_V1
    Public Size As UInteger
    Public EndpointAddress As UShort
    Public ResourceId As UInteger
    Public Mode As Integer
    Public _bitfield1 As UInteger
    Public _bitfield2 As UInteger
    Public TransferSegmentLA As Long
    Public TransferSegmentVA As IntPtr
    Public TransferRingSize As UIntPtr
    Public TransferRingInitialCycleBit As UInteger
    Public MessageNumber As UInteger
    Public EventRingSegmentLA As Long
    Public EventRingSegmentVA As IntPtr
    Public EventRingSize As UIntPtr
    Public EventRingInitialCycleBit As UInteger
End Structure
import ctypes
from ctypes import wintypes

class USBD_ENDPOINT_OFFLOAD_INFORMATION_V1(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("Size", wintypes.DWORD),
        ("EndpointAddress", ctypes.c_ushort),
        ("ResourceId", wintypes.DWORD),
        ("Mode", ctypes.c_int),
        ("_bitfield1", wintypes.DWORD),
        ("_bitfield2", wintypes.DWORD),
        ("TransferSegmentLA", ctypes.c_longlong),
        ("TransferSegmentVA", ctypes.c_void_p),
        ("TransferRingSize", ctypes.c_size_t),
        ("TransferRingInitialCycleBit", wintypes.DWORD),
        ("MessageNumber", wintypes.DWORD),
        ("EventRingSegmentLA", ctypes.c_longlong),
        ("EventRingSegmentVA", ctypes.c_void_p),
        ("EventRingSize", ctypes.c_size_t),
        ("EventRingInitialCycleBit", wintypes.DWORD),
    ]
#[repr(C, packed(1))]
pub struct USBD_ENDPOINT_OFFLOAD_INFORMATION_V1 {
    pub Size: u32,
    pub EndpointAddress: u16,
    pub ResourceId: u32,
    pub Mode: i32,
    pub _bitfield1: u32,
    pub _bitfield2: u32,
    pub TransferSegmentLA: i64,
    pub TransferSegmentVA: *mut core::ffi::c_void,
    pub TransferRingSize: usize,
    pub TransferRingInitialCycleBit: u32,
    pub MessageNumber: u32,
    pub EventRingSegmentLA: i64,
    pub EventRingSegmentVA: *mut core::ffi::c_void,
    pub EventRingSize: usize,
    pub EventRingInitialCycleBit: u32,
}
import "golang.org/x/sys/windows"

type USBD_ENDPOINT_OFFLOAD_INFORMATION_V1 struct {
	Size uint32
	EndpointAddress uint16
	ResourceId uint32
	Mode int32
	_bitfield1 uint32
	_bitfield2 uint32
	TransferSegmentLA int64
	TransferSegmentVA uintptr
	TransferRingSize uintptr
	TransferRingInitialCycleBit uint32
	MessageNumber uint32
	EventRingSegmentLA int64
	EventRingSegmentVA uintptr
	EventRingSize uintptr
	EventRingInitialCycleBit uint32
}
type
  USBD_ENDPOINT_OFFLOAD_INFORMATION_V1 = packed record
    Size: DWORD;
    EndpointAddress: Word;
    ResourceId: DWORD;
    Mode: Integer;
    _bitfield1: DWORD;
    _bitfield2: DWORD;
    TransferSegmentLA: Int64;
    TransferSegmentVA: Pointer;
    TransferRingSize: NativeUInt;
    TransferRingInitialCycleBit: DWORD;
    MessageNumber: DWORD;
    EventRingSegmentLA: Int64;
    EventRingSegmentVA: Pointer;
    EventRingSize: NativeUInt;
    EventRingInitialCycleBit: DWORD;
  end;
const USBD_ENDPOINT_OFFLOAD_INFORMATION_V1 = extern struct {
    Size: u32,
    EndpointAddress: u16,
    ResourceId: u32,
    Mode: i32,
    _bitfield1: u32,
    _bitfield2: u32,
    TransferSegmentLA: i64,
    TransferSegmentVA: ?*anyopaque,
    TransferRingSize: usize,
    TransferRingInitialCycleBit: u32,
    MessageNumber: u32,
    EventRingSegmentLA: i64,
    EventRingSegmentVA: ?*anyopaque,
    EventRingSize: usize,
    EventRingInitialCycleBit: u32,
};
type
  USBD_ENDPOINT_OFFLOAD_INFORMATION_V1 {.packed.} = object
    Size: uint32
    EndpointAddress: uint16
    ResourceId: uint32
    Mode: int32
    _bitfield1: uint32
    _bitfield2: uint32
    TransferSegmentLA: int64
    TransferSegmentVA: pointer
    TransferRingSize: uint
    TransferRingInitialCycleBit: uint32
    MessageNumber: uint32
    EventRingSegmentLA: int64
    EventRingSegmentVA: pointer
    EventRingSize: uint
    EventRingInitialCycleBit: uint32
align(1)
struct USBD_ENDPOINT_OFFLOAD_INFORMATION_V1
{
    uint Size;
    ushort EndpointAddress;
    uint ResourceId;
    int Mode;
    uint _bitfield1;
    uint _bitfield2;
    long TransferSegmentLA;
    void* TransferSegmentVA;
    size_t TransferRingSize;
    uint TransferRingInitialCycleBit;
    uint MessageNumber;
    long EventRingSegmentLA;
    void* EventRingSegmentVA;
    size_t EventRingSize;
    uint EventRingInitialCycleBit;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; USBD_ENDPOINT_OFFLOAD_INFORMATION_V1 サイズ: 66 バイト(x86)
dim st, 17    ; 4byte整数×17(構造体サイズ 66 / 4 切り上げ)
; Size : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; EndpointAddress : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; ResourceId : DWORD (+6, 4byte)  lpoke st,6,値  /  値 = lpeek(st,6)
; Mode : USBD_ENDPOINT_OFFLOAD_MODE (+10, 4byte)  lpoke st,10,値  /  値 = lpeek(st,10)
; _bitfield1 : DWORD (+14, 4byte)  lpoke st,14,値  /  値 = lpeek(st,14)
; _bitfield2 : DWORD (+18, 4byte)  lpoke st,18,値  /  値 = lpeek(st,18)
; TransferSegmentLA : LONGLONG (+22, 8byte)  qpoke st,22,値 / qpeek(st,22)  ※IronHSPのみ。3.7/3.8は lpoke st,22,下位 : lpoke st,26,上位
; TransferSegmentVA : void* (+30, 4byte)  lpoke st,30,値  /  値 = lpeek(st,30)
; TransferRingSize : UINT_PTR (+34, 4byte)  lpoke st,34,値  /  値 = lpeek(st,34)
; TransferRingInitialCycleBit : DWORD (+38, 4byte)  lpoke st,38,値  /  値 = lpeek(st,38)
; MessageNumber : DWORD (+42, 4byte)  lpoke st,42,値  /  値 = lpeek(st,42)
; EventRingSegmentLA : LONGLONG (+46, 8byte)  qpoke st,46,値 / qpeek(st,46)  ※IronHSPのみ。3.7/3.8は lpoke st,46,下位 : lpoke st,50,上位
; EventRingSegmentVA : void* (+54, 4byte)  lpoke st,54,値  /  値 = lpeek(st,54)
; EventRingSize : UINT_PTR (+58, 4byte)  lpoke st,58,値  /  値 = lpeek(st,58)
; EventRingInitialCycleBit : DWORD (+62, 4byte)  lpoke st,62,値  /  値 = lpeek(st,62)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; USBD_ENDPOINT_OFFLOAD_INFORMATION_V1 サイズ: 82 バイト(x64)
dim st, 21    ; 4byte整数×21(構造体サイズ 82 / 4 切り上げ)
; Size : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; EndpointAddress : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; ResourceId : DWORD (+6, 4byte)  lpoke st,6,値  /  値 = lpeek(st,6)
; Mode : USBD_ENDPOINT_OFFLOAD_MODE (+10, 4byte)  lpoke st,10,値  /  値 = lpeek(st,10)
; _bitfield1 : DWORD (+14, 4byte)  lpoke st,14,値  /  値 = lpeek(st,14)
; _bitfield2 : DWORD (+18, 4byte)  lpoke st,18,値  /  値 = lpeek(st,18)
; TransferSegmentLA : LONGLONG (+22, 8byte)  qpoke st,22,値 / qpeek(st,22)  ※IronHSPのみ。3.7/3.8は lpoke st,22,下位 : lpoke st,26,上位
; TransferSegmentVA : void* (+30, 8byte)  qpoke st,30,値 / qpeek(st,30)  ※IronHSPのみ。3.7/3.8は lpoke st,30,下位 : lpoke st,34,上位
; TransferRingSize : UINT_PTR (+38, 8byte)  qpoke st,38,値 / qpeek(st,38)  ※IronHSPのみ。3.7/3.8は lpoke st,38,下位 : lpoke st,42,上位
; TransferRingInitialCycleBit : DWORD (+46, 4byte)  lpoke st,46,値  /  値 = lpeek(st,46)
; MessageNumber : DWORD (+50, 4byte)  lpoke st,50,値  /  値 = lpeek(st,50)
; EventRingSegmentLA : LONGLONG (+54, 8byte)  qpoke st,54,値 / qpeek(st,54)  ※IronHSPのみ。3.7/3.8は lpoke st,54,下位 : lpoke st,58,上位
; EventRingSegmentVA : void* (+62, 8byte)  qpoke st,62,値 / qpeek(st,62)  ※IronHSPのみ。3.7/3.8は lpoke st,62,下位 : lpoke st,66,上位
; EventRingSize : UINT_PTR (+70, 8byte)  qpoke st,70,値 / qpeek(st,70)  ※IronHSPのみ。3.7/3.8は lpoke st,70,下位 : lpoke st,74,上位
; EventRingInitialCycleBit : DWORD (+78, 4byte)  lpoke st,78,値  /  値 = lpeek(st,78)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global USBD_ENDPOINT_OFFLOAD_INFORMATION_V1, pack=1
    #field int Size
    #field short EndpointAddress
    #field int ResourceId
    #field int Mode
    #field int _bitfield1
    #field int _bitfield2
    #field int64 TransferSegmentLA
    #field intptr TransferSegmentVA
    #field intptr TransferRingSize
    #field int TransferRingInitialCycleBit
    #field int MessageNumber
    #field int64 EventRingSegmentLA
    #field intptr EventRingSegmentVA
    #field intptr EventRingSize
    #field int EventRingInitialCycleBit
#endstruct

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