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

USB_POWER_INFO

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

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

フィールド

フィールドサイズx64x86説明
SystemStateWDMUSB_POWER_STATE4+0+0入力時に、システム電源状態を指定する WDMUSB_POWER_STATE 型の列挙子の値を指定します。
HcDevicePowerStateWDMUSB_POWER_STATE4+4+4出力時に、ホストコントローラーのデバイス電源状態を示す WDMUSB_POWER_STATE 型の列挙子の値が格納されます。
HcDeviceWakeWDMUSB_POWER_STATE4+8+8出力時に、ホストコントローラーがウェイク状態にあるかどうかを示す WDMUSB_POWER_STATE 型の列挙子の値が格納されます。
HcSystemWakeWDMUSB_POWER_STATE4+12+12出力時に、ホストコントローラーがシステムをウェイクできるかどうかを示す WDMUSB_POWER_STATE 型の列挙子の値が格納されます。
RhDevicePowerStateWDMUSB_POWER_STATE4+16+16出力時に、ルートハブのデバイス電源状態を示す WDMUSB_POWER_STATE 型の列挙子の値が格納されます。
RhDeviceWakeWDMUSB_POWER_STATE4+20+20出力時に、ルートハブがウェイク状態にあるかどうかを示す WDMUSB_POWER_STATE 型の列挙子の値が格納されます。
RhSystemWakeWDMUSB_POWER_STATE4+24+24出力時に、ルートハブがシステムをウェイクできるかどうかを示す WDMUSB_POWER_STATE 型の列挙子の値が格納されます。
LastSystemSleepStateWDMUSB_POWER_STATE4+28+28出力時に、最後のシステムスリープ状態を示す WDMUSB_POWER_STATE 型の列挙子の値が格納されます。
CanWakeupBOOLEAN1+32+32ホストコントローラーデバイスが、指定されたシステム電源状態からシステムをウェイクアップできるかどうかを示すブール値です。TRUE の場合、ホストコントローラーデバイスはシステムをウェイクアップできます。FALSE の場合、ホストコントローラーはシステムをウェイクアップできません。
IsPoweredBOOLEAN1+33+33指定されたシステム電源状態にあるときに、ホストコントローラーに電源が供給されるかどうかを示すブール値です。TRUE の場合、ホストコントローラーには電源が供給されます。FALSE の場合、ホストコントローラーには電源が供給されません。

公式ドキュメント

USB_POWER_INFO 構造体は、IOCTL_USB_USER_REQUEST I/O 制御要求と共に使用され、指定されたシステム電源状態に対してホストコントローラーの電源ポリシーが指定するデバイス電源状態を取得します。

解説(Remarks)

USB_POWER_INFO 構造体は、USBUSER_GET_POWER_STATE_MAP ユーザーモード要求と共に使用されます。この要求の詳細については、IOCTL_USB_USER_REQUEST を参照してください。

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

各言語での定義

#include <windows.h>

// USB_POWER_INFO  (x64 34 / x86 34 バイト)
#pragma pack(push, 1)
typedef struct USB_POWER_INFO {
    WDMUSB_POWER_STATE SystemState;
    WDMUSB_POWER_STATE HcDevicePowerState;
    WDMUSB_POWER_STATE HcDeviceWake;
    WDMUSB_POWER_STATE HcSystemWake;
    WDMUSB_POWER_STATE RhDevicePowerState;
    WDMUSB_POWER_STATE RhDeviceWake;
    WDMUSB_POWER_STATE RhSystemWake;
    WDMUSB_POWER_STATE LastSystemSleepState;
    BOOLEAN CanWakeup;
    BOOLEAN IsPowered;
} USB_POWER_INFO;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct USB_POWER_INFO
{
    public int SystemState;
    public int HcDevicePowerState;
    public int HcDeviceWake;
    public int HcSystemWake;
    public int RhDevicePowerState;
    public int RhDeviceWake;
    public int RhSystemWake;
    public int LastSystemSleepState;
    [MarshalAs(UnmanagedType.U1)] public bool CanWakeup;
    [MarshalAs(UnmanagedType.U1)] public bool IsPowered;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure USB_POWER_INFO
    Public SystemState As Integer
    Public HcDevicePowerState As Integer
    Public HcDeviceWake As Integer
    Public HcSystemWake As Integer
    Public RhDevicePowerState As Integer
    Public RhDeviceWake As Integer
    Public RhSystemWake As Integer
    Public LastSystemSleepState As Integer
    <MarshalAs(UnmanagedType.U1)> Public CanWakeup As Boolean
    <MarshalAs(UnmanagedType.U1)> Public IsPowered As Boolean
End Structure
import ctypes
from ctypes import wintypes

class USB_POWER_INFO(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("SystemState", ctypes.c_int),
        ("HcDevicePowerState", ctypes.c_int),
        ("HcDeviceWake", ctypes.c_int),
        ("HcSystemWake", ctypes.c_int),
        ("RhDevicePowerState", ctypes.c_int),
        ("RhDeviceWake", ctypes.c_int),
        ("RhSystemWake", ctypes.c_int),
        ("LastSystemSleepState", ctypes.c_int),
        ("CanWakeup", ctypes.c_byte),
        ("IsPowered", ctypes.c_byte),
    ]
#[repr(C, packed(1))]
pub struct USB_POWER_INFO {
    pub SystemState: i32,
    pub HcDevicePowerState: i32,
    pub HcDeviceWake: i32,
    pub HcSystemWake: i32,
    pub RhDevicePowerState: i32,
    pub RhDeviceWake: i32,
    pub RhSystemWake: i32,
    pub LastSystemSleepState: i32,
    pub CanWakeup: u8,
    pub IsPowered: u8,
}
import "golang.org/x/sys/windows"

type USB_POWER_INFO struct {
	SystemState int32
	HcDevicePowerState int32
	HcDeviceWake int32
	HcSystemWake int32
	RhDevicePowerState int32
	RhDeviceWake int32
	RhSystemWake int32
	LastSystemSleepState int32
	CanWakeup byte
	IsPowered byte
}
type
  USB_POWER_INFO = packed record
    SystemState: Integer;
    HcDevicePowerState: Integer;
    HcDeviceWake: Integer;
    HcSystemWake: Integer;
    RhDevicePowerState: Integer;
    RhDeviceWake: Integer;
    RhSystemWake: Integer;
    LastSystemSleepState: Integer;
    CanWakeup: ByteBool;
    IsPowered: ByteBool;
  end;
const USB_POWER_INFO = extern struct {
    SystemState: i32,
    HcDevicePowerState: i32,
    HcDeviceWake: i32,
    HcSystemWake: i32,
    RhDevicePowerState: i32,
    RhDeviceWake: i32,
    RhSystemWake: i32,
    LastSystemSleepState: i32,
    CanWakeup: u8,
    IsPowered: u8,
};
type
  USB_POWER_INFO {.packed.} = object
    SystemState: int32
    HcDevicePowerState: int32
    HcDeviceWake: int32
    HcSystemWake: int32
    RhDevicePowerState: int32
    RhDeviceWake: int32
    RhSystemWake: int32
    LastSystemSleepState: int32
    CanWakeup: uint8
    IsPowered: uint8
align(1)
struct USB_POWER_INFO
{
    int SystemState;
    int HcDevicePowerState;
    int HcDeviceWake;
    int HcSystemWake;
    int RhDevicePowerState;
    int RhDeviceWake;
    int RhSystemWake;
    int LastSystemSleepState;
    ubyte CanWakeup;
    ubyte IsPowered;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; USB_POWER_INFO サイズ: 34 バイト(x64)
dim st, 9    ; 4byte整数×9(構造体サイズ 34 / 4 切り上げ)
; SystemState : WDMUSB_POWER_STATE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; HcDevicePowerState : WDMUSB_POWER_STATE (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; HcDeviceWake : WDMUSB_POWER_STATE (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; HcSystemWake : WDMUSB_POWER_STATE (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; RhDevicePowerState : WDMUSB_POWER_STATE (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; RhDeviceWake : WDMUSB_POWER_STATE (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; RhSystemWake : WDMUSB_POWER_STATE (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; LastSystemSleepState : WDMUSB_POWER_STATE (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; CanWakeup : BOOLEAN (+32, 1byte)  poke st,32,値  /  値 = peek(st,32)
; IsPowered : BOOLEAN (+33, 1byte)  poke st,33,値  /  値 = peek(st,33)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global USB_POWER_INFO, pack=1
    #field int SystemState
    #field int HcDevicePowerState
    #field int HcDeviceWake
    #field int HcSystemWake
    #field int RhDevicePowerState
    #field int RhDeviceWake
    #field int RhSystemWake
    #field int LastSystemSleepState
    #field bool1 CanWakeup
    #field bool1 IsPowered
#endstruct

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