ホーム › NetworkManagement.WiFi › DOT11_EXTSTA_RECV_CONTEXT
DOT11_EXTSTA_RECV_CONTEXT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Header | NDIS_OBJECT_HEADER | 4 | +0 | +0 | NDISオブジェクトの種類・リビジョン・サイズを示す共通ヘッダー。 |
| uReceiveFlags | DWORD | 4 | +4 | +4 | 受信フレームに関する各種属性を示すフラグの組み合わせ。 |
| uPhyId | DWORD | 4 | +8 | +8 | 受信に使用したPHYを識別するID。 |
| uChCenterFrequency | DWORD | 4 | +12 | +12 | 受信チャネルの中心周波数をkHz単位で示す。 |
| usNumberOfMPDUsReceived | WORD | 2 | +16 | +16 | 受信したMPDU(MACプロトコルデータ単位)の数。 |
| lRSSI | INT | 4 | +20 | +20 | 受信信号強度をdBm単位で示す。負の値となる。 |
| ucDataRate | BYTE | 1 | +24 | +24 | 受信フレームのデータレートを示すインデックス値。 |
| uSizeMediaSpecificInfo | DWORD | 4 | +28 | +28 | pvMediaSpecificInfoが指すメディア固有情報のサイズ(バイト)。 |
| pvMediaSpecificInfo | void* | 8/4 | +32 | +32 | メディア固有の付加情報へのポインタ。無い場合はNULL。 |
| ullTimestamp | ULONGLONG | 8 | +40 | +40 | 受信時刻を示すタイムスタンプ(マイクロ秒)。 |
各言語での定義
#include <windows.h>
// NDIS_OBJECT_HEADER (x64 4 / x86 4 バイト)
typedef struct NDIS_OBJECT_HEADER {
BYTE Type;
BYTE Revision;
WORD Size;
} NDIS_OBJECT_HEADER;
// DOT11_EXTSTA_RECV_CONTEXT (x64 48 / x86 48 バイト)
typedef struct DOT11_EXTSTA_RECV_CONTEXT {
NDIS_OBJECT_HEADER Header;
DWORD uReceiveFlags;
DWORD uPhyId;
DWORD uChCenterFrequency;
WORD usNumberOfMPDUsReceived;
INT lRSSI;
BYTE ucDataRate;
DWORD uSizeMediaSpecificInfo;
void* pvMediaSpecificInfo;
ULONGLONG ullTimestamp;
} DOT11_EXTSTA_RECV_CONTEXT;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NDIS_OBJECT_HEADER
{
public byte Type;
public byte Revision;
public ushort Size;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DOT11_EXTSTA_RECV_CONTEXT
{
public NDIS_OBJECT_HEADER Header;
public uint uReceiveFlags;
public uint uPhyId;
public uint uChCenterFrequency;
public ushort usNumberOfMPDUsReceived;
public int lRSSI;
public byte ucDataRate;
public uint uSizeMediaSpecificInfo;
public IntPtr pvMediaSpecificInfo;
public ulong ullTimestamp;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NDIS_OBJECT_HEADER
Public Type As Byte
Public Revision As Byte
Public Size As UShort
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DOT11_EXTSTA_RECV_CONTEXT
Public Header As NDIS_OBJECT_HEADER
Public uReceiveFlags As UInteger
Public uPhyId As UInteger
Public uChCenterFrequency As UInteger
Public usNumberOfMPDUsReceived As UShort
Public lRSSI As Integer
Public ucDataRate As Byte
Public uSizeMediaSpecificInfo As UInteger
Public pvMediaSpecificInfo As IntPtr
Public ullTimestamp As ULong
End Structureimport ctypes
from ctypes import wintypes
class NDIS_OBJECT_HEADER(ctypes.Structure):
_fields_ = [
("Type", ctypes.c_ubyte),
("Revision", ctypes.c_ubyte),
("Size", ctypes.c_ushort),
]
class DOT11_EXTSTA_RECV_CONTEXT(ctypes.Structure):
_fields_ = [
("Header", NDIS_OBJECT_HEADER),
("uReceiveFlags", wintypes.DWORD),
("uPhyId", wintypes.DWORD),
("uChCenterFrequency", wintypes.DWORD),
("usNumberOfMPDUsReceived", ctypes.c_ushort),
("lRSSI", ctypes.c_int),
("ucDataRate", ctypes.c_ubyte),
("uSizeMediaSpecificInfo", wintypes.DWORD),
("pvMediaSpecificInfo", ctypes.c_void_p),
("ullTimestamp", ctypes.c_ulonglong),
]#[repr(C)]
pub struct NDIS_OBJECT_HEADER {
pub Type: u8,
pub Revision: u8,
pub Size: u16,
}
#[repr(C)]
pub struct DOT11_EXTSTA_RECV_CONTEXT {
pub Header: NDIS_OBJECT_HEADER,
pub uReceiveFlags: u32,
pub uPhyId: u32,
pub uChCenterFrequency: u32,
pub usNumberOfMPDUsReceived: u16,
pub lRSSI: i32,
pub ucDataRate: u8,
pub uSizeMediaSpecificInfo: u32,
pub pvMediaSpecificInfo: *mut core::ffi::c_void,
pub ullTimestamp: u64,
}import "golang.org/x/sys/windows"
type NDIS_OBJECT_HEADER struct {
Type byte
Revision byte
Size uint16
}
type DOT11_EXTSTA_RECV_CONTEXT struct {
Header NDIS_OBJECT_HEADER
uReceiveFlags uint32
uPhyId uint32
uChCenterFrequency uint32
usNumberOfMPDUsReceived uint16
lRSSI int32
ucDataRate byte
uSizeMediaSpecificInfo uint32
pvMediaSpecificInfo uintptr
ullTimestamp uint64
}type
NDIS_OBJECT_HEADER = record
Type: Byte;
Revision: Byte;
Size: Word;
end;
DOT11_EXTSTA_RECV_CONTEXT = record
Header: NDIS_OBJECT_HEADER;
uReceiveFlags: DWORD;
uPhyId: DWORD;
uChCenterFrequency: DWORD;
usNumberOfMPDUsReceived: Word;
lRSSI: Integer;
ucDataRate: Byte;
uSizeMediaSpecificInfo: DWORD;
pvMediaSpecificInfo: Pointer;
ullTimestamp: UInt64;
end;const NDIS_OBJECT_HEADER = extern struct {
Type: u8,
Revision: u8,
Size: u16,
};
const DOT11_EXTSTA_RECV_CONTEXT = extern struct {
Header: NDIS_OBJECT_HEADER,
uReceiveFlags: u32,
uPhyId: u32,
uChCenterFrequency: u32,
usNumberOfMPDUsReceived: u16,
lRSSI: i32,
ucDataRate: u8,
uSizeMediaSpecificInfo: u32,
pvMediaSpecificInfo: ?*anyopaque,
ullTimestamp: u64,
};type
NDIS_OBJECT_HEADER {.bycopy.} = object
Type: uint8
Revision: uint8
Size: uint16
DOT11_EXTSTA_RECV_CONTEXT {.bycopy.} = object
Header: NDIS_OBJECT_HEADER
uReceiveFlags: uint32
uPhyId: uint32
uChCenterFrequency: uint32
usNumberOfMPDUsReceived: uint16
lRSSI: int32
ucDataRate: uint8
uSizeMediaSpecificInfo: uint32
pvMediaSpecificInfo: pointer
ullTimestamp: uint64struct NDIS_OBJECT_HEADER
{
ubyte Type;
ubyte Revision;
ushort Size;
}
struct DOT11_EXTSTA_RECV_CONTEXT
{
NDIS_OBJECT_HEADER Header;
uint uReceiveFlags;
uint uPhyId;
uint uChCenterFrequency;
ushort usNumberOfMPDUsReceived;
int lRSSI;
ubyte ucDataRate;
uint uSizeMediaSpecificInfo;
void* pvMediaSpecificInfo;
ulong ullTimestamp;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DOT11_EXTSTA_RECV_CONTEXT サイズ: 48 バイト(x86)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; Header : NDIS_OBJECT_HEADER (+0, 4byte) varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; uReceiveFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; uPhyId : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; uChCenterFrequency : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; usNumberOfMPDUsReceived : WORD (+16, 2byte) wpoke st,16,値 / 値 = wpeek(st,16)
; lRSSI : INT (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; ucDataRate : BYTE (+24, 1byte) poke st,24,値 / 値 = peek(st,24)
; uSizeMediaSpecificInfo : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; pvMediaSpecificInfo : void* (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; ullTimestamp : ULONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DOT11_EXTSTA_RECV_CONTEXT サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; Header : NDIS_OBJECT_HEADER (+0, 4byte) varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; uReceiveFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; uPhyId : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; uChCenterFrequency : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; usNumberOfMPDUsReceived : WORD (+16, 2byte) wpoke st,16,値 / 値 = wpeek(st,16)
; lRSSI : INT (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; ucDataRate : BYTE (+24, 1byte) poke st,24,値 / 値 = peek(st,24)
; uSizeMediaSpecificInfo : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; pvMediaSpecificInfo : void* (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; ullTimestamp : ULONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global NDIS_OBJECT_HEADER
#field byte Type
#field byte Revision
#field short Size
#endstruct
#defstruct global DOT11_EXTSTA_RECV_CONTEXT
#field NDIS_OBJECT_HEADER Header
#field int uReceiveFlags
#field int uPhyId
#field int uChCenterFrequency
#field short usNumberOfMPDUsReceived
#field int lRSSI
#field byte ucDataRate
#field int uSizeMediaSpecificInfo
#field intptr pvMediaSpecificInfo
#field int64 ullTimestamp
#endstruct
stdim st, DOT11_EXTSTA_RECV_CONTEXT ; NSTRUCT 変数を確保
st->uReceiveFlags = 100
mes "uReceiveFlags=" + st->uReceiveFlags