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

DOT11_WFD_DEVICE_ENTRY

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

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

フィールド

フィールドサイズx64x86説明
uPhyIdDWORD4+0+0デバイスを検出したPHYのID。
PhySpecificInfoDOT11_BSS_ENTRY_PHY_SPECIFIC_INFO12+4+4PHY固有の情報。
dot11BSSIDBYTE6+16+16検出したBSSのBSSID(6バイト)。
dot11BSSTypeDOT11_BSS_TYPE4+24+24BSSの種類(インフラ/独立)。
TransmitterAddressBYTE6+28+28フレーム送信元の送信機アドレス(6バイト)。
lRSSIINT4+36+36受信信号強度をdBm単位で示す。負の値となる。
uLinkQualityDWORD4+40+40リンク品質を示す値(0〜100)。
usBeaconPeriodWORD2+44+44ビーコン周期(TU単位)。
ullTimestampULONGLONG8+48+48BSSのタイムスタンプ(マイクロ秒)。
ullBeaconHostTimestampULONGLONG8+56+56ビーコン受信時のホストタイムスタンプ。
ullProbeResponseHostTimestampULONGLONG8+64+64プローブ応答受信時のホストタイムスタンプ。
usCapabilityInformationWORD2+72+72BSSの能力情報フィールド。
uBeaconIEsOffsetDWORD4+76+76ビーコンの情報要素への先頭からのオフセット(バイト)。
uBeaconIEsLengthDWORD4+80+80ビーコンの情報要素の長さ(バイト)。
uProbeResponseIEsOffsetDWORD4+84+84プローブ応答の情報要素への先頭からのオフセット(バイト)。
uProbeResponseIEsLengthDWORD4+88+88プローブ応答の情報要素の長さ(バイト)。

各言語での定義

#include <windows.h>

// DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO  (x64 12 / x86 12 バイト)
typedef struct DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO {
    DWORD uChCenterFrequency;
    _FHSS_e__Struct FHSS;
} DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO;

// DOT11_WFD_DEVICE_ENTRY  (x64 96 / x86 96 バイト)
typedef struct DOT11_WFD_DEVICE_ENTRY {
    DWORD uPhyId;
    DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO PhySpecificInfo;
    BYTE dot11BSSID[6];
    DOT11_BSS_TYPE dot11BSSType;
    BYTE TransmitterAddress[6];
    INT lRSSI;
    DWORD uLinkQuality;
    WORD usBeaconPeriod;
    ULONGLONG ullTimestamp;
    ULONGLONG ullBeaconHostTimestamp;
    ULONGLONG ullProbeResponseHostTimestamp;
    WORD usCapabilityInformation;
    DWORD uBeaconIEsOffset;
    DWORD uBeaconIEsLength;
    DWORD uProbeResponseIEsOffset;
    DWORD uProbeResponseIEsLength;
} DOT11_WFD_DEVICE_ENTRY;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO
{
    public uint uChCenterFrequency;
    public _FHSS_e__Struct FHSS;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DOT11_WFD_DEVICE_ENTRY
{
    public uint uPhyId;
    public DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO PhySpecificInfo;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public byte[] dot11BSSID;
    public int dot11BSSType;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public byte[] TransmitterAddress;
    public int lRSSI;
    public uint uLinkQuality;
    public ushort usBeaconPeriod;
    public ulong ullTimestamp;
    public ulong ullBeaconHostTimestamp;
    public ulong ullProbeResponseHostTimestamp;
    public ushort usCapabilityInformation;
    public uint uBeaconIEsOffset;
    public uint uBeaconIEsLength;
    public uint uProbeResponseIEsOffset;
    public uint uProbeResponseIEsLength;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO
    Public uChCenterFrequency As UInteger
    Public FHSS As _FHSS_e__Struct
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DOT11_WFD_DEVICE_ENTRY
    Public uPhyId As UInteger
    Public PhySpecificInfo As DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> Public dot11BSSID() As Byte
    Public dot11BSSType As Integer
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> Public TransmitterAddress() As Byte
    Public lRSSI As Integer
    Public uLinkQuality As UInteger
    Public usBeaconPeriod As UShort
    Public ullTimestamp As ULong
    Public ullBeaconHostTimestamp As ULong
    Public ullProbeResponseHostTimestamp As ULong
    Public usCapabilityInformation As UShort
    Public uBeaconIEsOffset As UInteger
    Public uBeaconIEsLength As UInteger
    Public uProbeResponseIEsOffset As UInteger
    Public uProbeResponseIEsLength As UInteger
End Structure
import ctypes
from ctypes import wintypes

class DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO(ctypes.Structure):
    _fields_ = [
        ("uChCenterFrequency", wintypes.DWORD),
        ("FHSS", _FHSS_e__Struct),
    ]

class DOT11_WFD_DEVICE_ENTRY(ctypes.Structure):
    _fields_ = [
        ("uPhyId", wintypes.DWORD),
        ("PhySpecificInfo", DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO),
        ("dot11BSSID", ctypes.c_ubyte * 6),
        ("dot11BSSType", ctypes.c_int),
        ("TransmitterAddress", ctypes.c_ubyte * 6),
        ("lRSSI", ctypes.c_int),
        ("uLinkQuality", wintypes.DWORD),
        ("usBeaconPeriod", ctypes.c_ushort),
        ("ullTimestamp", ctypes.c_ulonglong),
        ("ullBeaconHostTimestamp", ctypes.c_ulonglong),
        ("ullProbeResponseHostTimestamp", ctypes.c_ulonglong),
        ("usCapabilityInformation", ctypes.c_ushort),
        ("uBeaconIEsOffset", wintypes.DWORD),
        ("uBeaconIEsLength", wintypes.DWORD),
        ("uProbeResponseIEsOffset", wintypes.DWORD),
        ("uProbeResponseIEsLength", wintypes.DWORD),
    ]
#[repr(C)]
pub struct DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO {
    pub uChCenterFrequency: u32,
    pub FHSS: _FHSS_e__Struct,
}

#[repr(C)]
pub struct DOT11_WFD_DEVICE_ENTRY {
    pub uPhyId: u32,
    pub PhySpecificInfo: DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO,
    pub dot11BSSID: [u8; 6],
    pub dot11BSSType: i32,
    pub TransmitterAddress: [u8; 6],
    pub lRSSI: i32,
    pub uLinkQuality: u32,
    pub usBeaconPeriod: u16,
    pub ullTimestamp: u64,
    pub ullBeaconHostTimestamp: u64,
    pub ullProbeResponseHostTimestamp: u64,
    pub usCapabilityInformation: u16,
    pub uBeaconIEsOffset: u32,
    pub uBeaconIEsLength: u32,
    pub uProbeResponseIEsOffset: u32,
    pub uProbeResponseIEsLength: u32,
}
import "golang.org/x/sys/windows"

type DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO struct {
	uChCenterFrequency uint32
	FHSS _FHSS_e__Struct
}

type DOT11_WFD_DEVICE_ENTRY struct {
	uPhyId uint32
	PhySpecificInfo DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO
	dot11BSSID [6]byte
	dot11BSSType int32
	TransmitterAddress [6]byte
	lRSSI int32
	uLinkQuality uint32
	usBeaconPeriod uint16
	ullTimestamp uint64
	ullBeaconHostTimestamp uint64
	ullProbeResponseHostTimestamp uint64
	usCapabilityInformation uint16
	uBeaconIEsOffset uint32
	uBeaconIEsLength uint32
	uProbeResponseIEsOffset uint32
	uProbeResponseIEsLength uint32
}
type
  DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO = record
    uChCenterFrequency: DWORD;
    FHSS: _FHSS_e__Struct;
  end;

  DOT11_WFD_DEVICE_ENTRY = record
    uPhyId: DWORD;
    PhySpecificInfo: DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO;
    dot11BSSID: array[0..5] of Byte;
    dot11BSSType: Integer;
    TransmitterAddress: array[0..5] of Byte;
    lRSSI: Integer;
    uLinkQuality: DWORD;
    usBeaconPeriod: Word;
    ullTimestamp: UInt64;
    ullBeaconHostTimestamp: UInt64;
    ullProbeResponseHostTimestamp: UInt64;
    usCapabilityInformation: Word;
    uBeaconIEsOffset: DWORD;
    uBeaconIEsLength: DWORD;
    uProbeResponseIEsOffset: DWORD;
    uProbeResponseIEsLength: DWORD;
  end;
const DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO = extern struct {
    uChCenterFrequency: u32,
    FHSS: _FHSS_e__Struct,
};

const DOT11_WFD_DEVICE_ENTRY = extern struct {
    uPhyId: u32,
    PhySpecificInfo: DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO,
    dot11BSSID: [6]u8,
    dot11BSSType: i32,
    TransmitterAddress: [6]u8,
    lRSSI: i32,
    uLinkQuality: u32,
    usBeaconPeriod: u16,
    ullTimestamp: u64,
    ullBeaconHostTimestamp: u64,
    ullProbeResponseHostTimestamp: u64,
    usCapabilityInformation: u16,
    uBeaconIEsOffset: u32,
    uBeaconIEsLength: u32,
    uProbeResponseIEsOffset: u32,
    uProbeResponseIEsLength: u32,
};
type
  DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO {.bycopy.} = object
    uChCenterFrequency: uint32
    FHSS: _FHSS_e__Struct

  DOT11_WFD_DEVICE_ENTRY {.bycopy.} = object
    uPhyId: uint32
    PhySpecificInfo: DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO
    dot11BSSID: array[6, uint8]
    dot11BSSType: int32
    TransmitterAddress: array[6, uint8]
    lRSSI: int32
    uLinkQuality: uint32
    usBeaconPeriod: uint16
    ullTimestamp: uint64
    ullBeaconHostTimestamp: uint64
    ullProbeResponseHostTimestamp: uint64
    usCapabilityInformation: uint16
    uBeaconIEsOffset: uint32
    uBeaconIEsLength: uint32
    uProbeResponseIEsOffset: uint32
    uProbeResponseIEsLength: uint32
struct DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO
{
    uint uChCenterFrequency;
    _FHSS_e__Struct FHSS;
}

struct DOT11_WFD_DEVICE_ENTRY
{
    uint uPhyId;
    DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO PhySpecificInfo;
    ubyte[6] dot11BSSID;
    int dot11BSSType;
    ubyte[6] TransmitterAddress;
    int lRSSI;
    uint uLinkQuality;
    ushort usBeaconPeriod;
    ulong ullTimestamp;
    ulong ullBeaconHostTimestamp;
    ulong ullProbeResponseHostTimestamp;
    ushort usCapabilityInformation;
    uint uBeaconIEsOffset;
    uint uBeaconIEsLength;
    uint uProbeResponseIEsOffset;
    uint uProbeResponseIEsLength;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DOT11_WFD_DEVICE_ENTRY サイズ: 96 バイト(x64)
dim st, 24    ; 4byte整数×24(構造体サイズ 96 / 4 切り上げ)
; uPhyId : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; PhySpecificInfo : DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO (+4, 12byte)  varptr(st)+4 を基点に操作(12byte:入れ子/配列)
; dot11BSSID : BYTE (+16, 6byte)  varptr(st)+16 を基点に操作(6byte:入れ子/配列)
; dot11BSSType : DOT11_BSS_TYPE (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; TransmitterAddress : BYTE (+28, 6byte)  varptr(st)+28 を基点に操作(6byte:入れ子/配列)
; lRSSI : INT (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; uLinkQuality : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; usBeaconPeriod : WORD (+44, 2byte)  wpoke st,44,値  /  値 = wpeek(st,44)
; ullTimestamp : ULONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ullBeaconHostTimestamp : ULONGLONG (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; ullProbeResponseHostTimestamp : ULONGLONG (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; usCapabilityInformation : WORD (+72, 2byte)  wpoke st,72,値  /  値 = wpeek(st,72)
; uBeaconIEsOffset : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; uBeaconIEsLength : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; uProbeResponseIEsOffset : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; uProbeResponseIEsLength : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DOT11_WFD_DEVICE_ENTRY
    #field int uPhyId
    #field byte PhySpecificInfo 12
    #field byte dot11BSSID 6
    #field int dot11BSSType
    #field byte TransmitterAddress 6
    #field int lRSSI
    #field int uLinkQuality
    #field short usBeaconPeriod
    #field int64 ullTimestamp
    #field int64 ullBeaconHostTimestamp
    #field int64 ullProbeResponseHostTimestamp
    #field short usCapabilityInformation
    #field int uBeaconIEsOffset
    #field int uBeaconIEsLength
    #field int uProbeResponseIEsOffset
    #field int uProbeResponseIEsLength
#endstruct

stdim st, DOT11_WFD_DEVICE_ENTRY        ; NSTRUCT 変数を確保
st->uPhyId = 100
mes "uPhyId=" + st->uPhyId
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。