ホーム › Devices.Usb › USBUSER_POWER_INFO_REQUEST
USBUSER_POWER_INFO_REQUEST
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Header | USBUSER_REQUEST_HEADER | 16 | +0 | +0 | USBUSER要求共通ヘッダ。要求コードと結果を保持する。 |
| PowerInformation | USB_POWER_INFO | 34 | +16 | +16 | 電源管理情報を保持する。 |
各言語での定義
#include <windows.h>
// USBUSER_REQUEST_HEADER (x64 16 / x86 16 バイト)
#pragma pack(push, 1)
typedef struct USBUSER_REQUEST_HEADER {
DWORD UsbUserRequest;
USB_USER_ERROR_CODE UsbUserStatusCode;
DWORD RequestBufferLength;
DWORD ActualBufferLength;
} USBUSER_REQUEST_HEADER;
#pragma pack(pop)
// 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)
// USBUSER_POWER_INFO_REQUEST (x64 50 / x86 50 バイト)
#pragma pack(push, 1)
typedef struct USBUSER_POWER_INFO_REQUEST {
USBUSER_REQUEST_HEADER Header;
USB_POWER_INFO PowerInformation;
} USBUSER_POWER_INFO_REQUEST;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct USBUSER_REQUEST_HEADER
{
public uint UsbUserRequest;
public int UsbUserStatusCode;
public uint RequestBufferLength;
public uint ActualBufferLength;
}
[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;
}
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct USBUSER_POWER_INFO_REQUEST
{
public USBUSER_REQUEST_HEADER Header;
public USB_POWER_INFO PowerInformation;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure USBUSER_REQUEST_HEADER
Public UsbUserRequest As UInteger
Public UsbUserStatusCode As Integer
Public RequestBufferLength As UInteger
Public ActualBufferLength As UInteger
End Structure
<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
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure USBUSER_POWER_INFO_REQUEST
Public Header As USBUSER_REQUEST_HEADER
Public PowerInformation As USB_POWER_INFO
End Structureimport ctypes
from ctypes import wintypes
class USBUSER_REQUEST_HEADER(ctypes.Structure):
_pack_ = 1
_fields_ = [
("UsbUserRequest", wintypes.DWORD),
("UsbUserStatusCode", ctypes.c_int),
("RequestBufferLength", wintypes.DWORD),
("ActualBufferLength", wintypes.DWORD),
]
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),
]
class USBUSER_POWER_INFO_REQUEST(ctypes.Structure):
_pack_ = 1
_fields_ = [
("Header", USBUSER_REQUEST_HEADER),
("PowerInformation", USB_POWER_INFO),
]#[repr(C, packed(1))]
pub struct USBUSER_REQUEST_HEADER {
pub UsbUserRequest: u32,
pub UsbUserStatusCode: i32,
pub RequestBufferLength: u32,
pub ActualBufferLength: u32,
}
#[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,
}
#[repr(C, packed(1))]
pub struct USBUSER_POWER_INFO_REQUEST {
pub Header: USBUSER_REQUEST_HEADER,
pub PowerInformation: USB_POWER_INFO,
}import "golang.org/x/sys/windows"
type USBUSER_REQUEST_HEADER struct {
UsbUserRequest uint32
UsbUserStatusCode int32
RequestBufferLength uint32
ActualBufferLength uint32
}
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 USBUSER_POWER_INFO_REQUEST struct {
Header USBUSER_REQUEST_HEADER
PowerInformation USB_POWER_INFO
}type
USBUSER_REQUEST_HEADER = packed record
UsbUserRequest: DWORD;
UsbUserStatusCode: Integer;
RequestBufferLength: DWORD;
ActualBufferLength: DWORD;
end;
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;
USBUSER_POWER_INFO_REQUEST = packed record
Header: USBUSER_REQUEST_HEADER;
PowerInformation: USB_POWER_INFO;
end;const USBUSER_REQUEST_HEADER = extern struct {
UsbUserRequest: u32,
UsbUserStatusCode: i32,
RequestBufferLength: u32,
ActualBufferLength: u32,
};
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,
};
const USBUSER_POWER_INFO_REQUEST = extern struct {
Header: USBUSER_REQUEST_HEADER,
PowerInformation: USB_POWER_INFO,
};type
USBUSER_REQUEST_HEADER {.packed.} = object
UsbUserRequest: uint32
UsbUserStatusCode: int32
RequestBufferLength: uint32
ActualBufferLength: uint32
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
USBUSER_POWER_INFO_REQUEST {.packed.} = object
Header: USBUSER_REQUEST_HEADER
PowerInformation: USB_POWER_INFOalign(1)
struct USBUSER_REQUEST_HEADER
{
uint UsbUserRequest;
int UsbUserStatusCode;
uint RequestBufferLength;
uint ActualBufferLength;
}
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;
}
align(1)
struct USBUSER_POWER_INFO_REQUEST
{
USBUSER_REQUEST_HEADER Header;
USB_POWER_INFO PowerInformation;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; USBUSER_POWER_INFO_REQUEST サイズ: 50 バイト(x64)
dim st, 13 ; 4byte整数×13(構造体サイズ 50 / 4 切り上げ)
; Header : USBUSER_REQUEST_HEADER (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; PowerInformation : USB_POWER_INFO (+16, 34byte) varptr(st)+16 を基点に操作(34byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global USBUSER_REQUEST_HEADER, pack=1
#field int UsbUserRequest
#field int UsbUserStatusCode
#field int RequestBufferLength
#field int ActualBufferLength
#endstruct
#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
#defstruct global USBUSER_POWER_INFO_REQUEST, pack=1
#field USBUSER_REQUEST_HEADER Header
#field USB_POWER_INFO PowerInformation
#endstruct
stdim st, USBUSER_POWER_INFO_REQUEST ; NSTRUCT 変数を確保