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

WINUSB_PIPE_INFORMATION_EX

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

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

フィールド

フィールドサイズx64x86説明
PipeTypeUSBD_PIPE_TYPE4+0+0パイプの種類を指定する USBD_PIPE_TYPE 型の列挙値です。
PipeIdBYTE1+4+4パイプ識別子 (ID) です。
MaximumPacketSizeWORD2+6+6パイプ上で転送されるパケットの最大サイズ (バイト単位) です。
IntervalBYTE1+8+8パイプのインターバルです。
MaximumBytesPerIntervalDWORD4+12+121 回のインターバルで転送できる最大バイト数です。アイソクロナスエンドポイントなどの高帯域幅の高速周期エンドポイントや SuperSpeed 周期エンドポイントでは、この値が MaximumPacketSize の値より大きくなる場合があります。

公式ドキュメント

WINUSB_PIPE_INFORMATION_EX 構造体には、WinUsb_QueryPipeEx ルーチンが取得するパイプ情報が格納されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// WINUSB_PIPE_INFORMATION_EX  (x64 16 / x86 16 バイト)
typedef struct WINUSB_PIPE_INFORMATION_EX {
    USBD_PIPE_TYPE PipeType;
    BYTE PipeId;
    WORD MaximumPacketSize;
    BYTE Interval;
    DWORD MaximumBytesPerInterval;
} WINUSB_PIPE_INFORMATION_EX;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WINUSB_PIPE_INFORMATION_EX
{
    public int PipeType;
    public byte PipeId;
    public ushort MaximumPacketSize;
    public byte Interval;
    public uint MaximumBytesPerInterval;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WINUSB_PIPE_INFORMATION_EX
    Public PipeType As Integer
    Public PipeId As Byte
    Public MaximumPacketSize As UShort
    Public Interval As Byte
    Public MaximumBytesPerInterval As UInteger
End Structure
import ctypes
from ctypes import wintypes

class WINUSB_PIPE_INFORMATION_EX(ctypes.Structure):
    _fields_ = [
        ("PipeType", ctypes.c_int),
        ("PipeId", ctypes.c_ubyte),
        ("MaximumPacketSize", ctypes.c_ushort),
        ("Interval", ctypes.c_ubyte),
        ("MaximumBytesPerInterval", wintypes.DWORD),
    ]
#[repr(C)]
pub struct WINUSB_PIPE_INFORMATION_EX {
    pub PipeType: i32,
    pub PipeId: u8,
    pub MaximumPacketSize: u16,
    pub Interval: u8,
    pub MaximumBytesPerInterval: u32,
}
import "golang.org/x/sys/windows"

type WINUSB_PIPE_INFORMATION_EX struct {
	PipeType int32
	PipeId byte
	MaximumPacketSize uint16
	Interval byte
	MaximumBytesPerInterval uint32
}
type
  WINUSB_PIPE_INFORMATION_EX = record
    PipeType: Integer;
    PipeId: Byte;
    MaximumPacketSize: Word;
    Interval: Byte;
    MaximumBytesPerInterval: DWORD;
  end;
const WINUSB_PIPE_INFORMATION_EX = extern struct {
    PipeType: i32,
    PipeId: u8,
    MaximumPacketSize: u16,
    Interval: u8,
    MaximumBytesPerInterval: u32,
};
type
  WINUSB_PIPE_INFORMATION_EX {.bycopy.} = object
    PipeType: int32
    PipeId: uint8
    MaximumPacketSize: uint16
    Interval: uint8
    MaximumBytesPerInterval: uint32
struct WINUSB_PIPE_INFORMATION_EX
{
    int PipeType;
    ubyte PipeId;
    ushort MaximumPacketSize;
    ubyte Interval;
    uint MaximumBytesPerInterval;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WINUSB_PIPE_INFORMATION_EX サイズ: 16 バイト(x64)
dim st, 4    ; 4byte整数×4(構造体サイズ 16 / 4 切り上げ)
; PipeType : USBD_PIPE_TYPE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; PipeId : BYTE (+4, 1byte)  poke st,4,値  /  値 = peek(st,4)
; MaximumPacketSize : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; Interval : BYTE (+8, 1byte)  poke st,8,値  /  値 = peek(st,8)
; MaximumBytesPerInterval : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WINUSB_PIPE_INFORMATION_EX
    #field int PipeType
    #field byte PipeId
    #field short MaximumPacketSize
    #field byte Interval
    #field int MaximumBytesPerInterval
#endstruct

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