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

NDIS_802_11_ASSOCIATION_INFORMATION

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

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

フィールド

フィールドサイズx64x86説明
LengthDWORD4+0+0本構造体の長さ(バイト)。
AvailableRequestFixedIEsWORD2+4+4RequestFixedIEsの有効性を示すフラグ。
RequestFixedIEsNDIS_802_11_AI_REQFI10+6+6アソシエーション要求の固定情報要素。
RequestIELengthDWORD4+16+16要求側可変IEの長さ(バイト)。
OffsetRequestIEsDWORD4+20+20本構造体先頭から要求側可変IEまでのオフセット(バイト)。
AvailableResponseFixedIEsWORD2+24+24ResponseFixedIEsの有効性を示すフラグ。
ResponseFixedIEsNDIS_802_11_AI_RESFI6+26+26アソシエーション応答の固定情報要素。
ResponseIELengthDWORD4+32+32応答側可変IEの長さ(バイト)。
OffsetResponseIEsDWORD4+36+36本構造体先頭から応答側可変IEまでのオフセット(バイト)。

各言語での定義

#include <windows.h>

// NDIS_802_11_AI_REQFI  (x64 10 / x86 10 バイト)
typedef struct NDIS_802_11_AI_REQFI {
    WORD Capabilities;
    WORD ListenInterval;
    BYTE CurrentAPAddress[6];
} NDIS_802_11_AI_REQFI;

// NDIS_802_11_AI_RESFI  (x64 6 / x86 6 バイト)
typedef struct NDIS_802_11_AI_RESFI {
    WORD Capabilities;
    WORD StatusCode;
    WORD AssociationId;
} NDIS_802_11_AI_RESFI;

// NDIS_802_11_ASSOCIATION_INFORMATION  (x64 40 / x86 40 バイト)
typedef struct NDIS_802_11_ASSOCIATION_INFORMATION {
    DWORD Length;
    WORD AvailableRequestFixedIEs;
    NDIS_802_11_AI_REQFI RequestFixedIEs;
    DWORD RequestIELength;
    DWORD OffsetRequestIEs;
    WORD AvailableResponseFixedIEs;
    NDIS_802_11_AI_RESFI ResponseFixedIEs;
    DWORD ResponseIELength;
    DWORD OffsetResponseIEs;
} NDIS_802_11_ASSOCIATION_INFORMATION;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NDIS_802_11_AI_REQFI
{
    public ushort Capabilities;
    public ushort ListenInterval;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] public byte[] CurrentAPAddress;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NDIS_802_11_AI_RESFI
{
    public ushort Capabilities;
    public ushort StatusCode;
    public ushort AssociationId;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NDIS_802_11_ASSOCIATION_INFORMATION
{
    public uint Length;
    public ushort AvailableRequestFixedIEs;
    public NDIS_802_11_AI_REQFI RequestFixedIEs;
    public uint RequestIELength;
    public uint OffsetRequestIEs;
    public ushort AvailableResponseFixedIEs;
    public NDIS_802_11_AI_RESFI ResponseFixedIEs;
    public uint ResponseIELength;
    public uint OffsetResponseIEs;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NDIS_802_11_AI_REQFI
    Public Capabilities As UShort
    Public ListenInterval As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> Public CurrentAPAddress() As Byte
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NDIS_802_11_AI_RESFI
    Public Capabilities As UShort
    Public StatusCode As UShort
    Public AssociationId As UShort
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NDIS_802_11_ASSOCIATION_INFORMATION
    Public Length As UInteger
    Public AvailableRequestFixedIEs As UShort
    Public RequestFixedIEs As NDIS_802_11_AI_REQFI
    Public RequestIELength As UInteger
    Public OffsetRequestIEs As UInteger
    Public AvailableResponseFixedIEs As UShort
    Public ResponseFixedIEs As NDIS_802_11_AI_RESFI
    Public ResponseIELength As UInteger
    Public OffsetResponseIEs As UInteger
End Structure
import ctypes
from ctypes import wintypes

class NDIS_802_11_AI_REQFI(ctypes.Structure):
    _fields_ = [
        ("Capabilities", ctypes.c_ushort),
        ("ListenInterval", ctypes.c_ushort),
        ("CurrentAPAddress", ctypes.c_ubyte * 6),
    ]

class NDIS_802_11_AI_RESFI(ctypes.Structure):
    _fields_ = [
        ("Capabilities", ctypes.c_ushort),
        ("StatusCode", ctypes.c_ushort),
        ("AssociationId", ctypes.c_ushort),
    ]

class NDIS_802_11_ASSOCIATION_INFORMATION(ctypes.Structure):
    _fields_ = [
        ("Length", wintypes.DWORD),
        ("AvailableRequestFixedIEs", ctypes.c_ushort),
        ("RequestFixedIEs", NDIS_802_11_AI_REQFI),
        ("RequestIELength", wintypes.DWORD),
        ("OffsetRequestIEs", wintypes.DWORD),
        ("AvailableResponseFixedIEs", ctypes.c_ushort),
        ("ResponseFixedIEs", NDIS_802_11_AI_RESFI),
        ("ResponseIELength", wintypes.DWORD),
        ("OffsetResponseIEs", wintypes.DWORD),
    ]
#[repr(C)]
pub struct NDIS_802_11_AI_REQFI {
    pub Capabilities: u16,
    pub ListenInterval: u16,
    pub CurrentAPAddress: [u8; 6],
}

#[repr(C)]
pub struct NDIS_802_11_AI_RESFI {
    pub Capabilities: u16,
    pub StatusCode: u16,
    pub AssociationId: u16,
}

#[repr(C)]
pub struct NDIS_802_11_ASSOCIATION_INFORMATION {
    pub Length: u32,
    pub AvailableRequestFixedIEs: u16,
    pub RequestFixedIEs: NDIS_802_11_AI_REQFI,
    pub RequestIELength: u32,
    pub OffsetRequestIEs: u32,
    pub AvailableResponseFixedIEs: u16,
    pub ResponseFixedIEs: NDIS_802_11_AI_RESFI,
    pub ResponseIELength: u32,
    pub OffsetResponseIEs: u32,
}
import "golang.org/x/sys/windows"

type NDIS_802_11_AI_REQFI struct {
	Capabilities uint16
	ListenInterval uint16
	CurrentAPAddress [6]byte
}

type NDIS_802_11_AI_RESFI struct {
	Capabilities uint16
	StatusCode uint16
	AssociationId uint16
}

type NDIS_802_11_ASSOCIATION_INFORMATION struct {
	Length uint32
	AvailableRequestFixedIEs uint16
	RequestFixedIEs NDIS_802_11_AI_REQFI
	RequestIELength uint32
	OffsetRequestIEs uint32
	AvailableResponseFixedIEs uint16
	ResponseFixedIEs NDIS_802_11_AI_RESFI
	ResponseIELength uint32
	OffsetResponseIEs uint32
}
type
  NDIS_802_11_AI_REQFI = record
    Capabilities: Word;
    ListenInterval: Word;
    CurrentAPAddress: array[0..5] of Byte;
  end;

  NDIS_802_11_AI_RESFI = record
    Capabilities: Word;
    StatusCode: Word;
    AssociationId: Word;
  end;

  NDIS_802_11_ASSOCIATION_INFORMATION = record
    Length: DWORD;
    AvailableRequestFixedIEs: Word;
    RequestFixedIEs: NDIS_802_11_AI_REQFI;
    RequestIELength: DWORD;
    OffsetRequestIEs: DWORD;
    AvailableResponseFixedIEs: Word;
    ResponseFixedIEs: NDIS_802_11_AI_RESFI;
    ResponseIELength: DWORD;
    OffsetResponseIEs: DWORD;
  end;
const NDIS_802_11_AI_REQFI = extern struct {
    Capabilities: u16,
    ListenInterval: u16,
    CurrentAPAddress: [6]u8,
};

const NDIS_802_11_AI_RESFI = extern struct {
    Capabilities: u16,
    StatusCode: u16,
    AssociationId: u16,
};

const NDIS_802_11_ASSOCIATION_INFORMATION = extern struct {
    Length: u32,
    AvailableRequestFixedIEs: u16,
    RequestFixedIEs: NDIS_802_11_AI_REQFI,
    RequestIELength: u32,
    OffsetRequestIEs: u32,
    AvailableResponseFixedIEs: u16,
    ResponseFixedIEs: NDIS_802_11_AI_RESFI,
    ResponseIELength: u32,
    OffsetResponseIEs: u32,
};
type
  NDIS_802_11_AI_REQFI {.bycopy.} = object
    Capabilities: uint16
    ListenInterval: uint16
    CurrentAPAddress: array[6, uint8]

  NDIS_802_11_AI_RESFI {.bycopy.} = object
    Capabilities: uint16
    StatusCode: uint16
    AssociationId: uint16

  NDIS_802_11_ASSOCIATION_INFORMATION {.bycopy.} = object
    Length: uint32
    AvailableRequestFixedIEs: uint16
    RequestFixedIEs: NDIS_802_11_AI_REQFI
    RequestIELength: uint32
    OffsetRequestIEs: uint32
    AvailableResponseFixedIEs: uint16
    ResponseFixedIEs: NDIS_802_11_AI_RESFI
    ResponseIELength: uint32
    OffsetResponseIEs: uint32
struct NDIS_802_11_AI_REQFI
{
    ushort Capabilities;
    ushort ListenInterval;
    ubyte[6] CurrentAPAddress;
}

struct NDIS_802_11_AI_RESFI
{
    ushort Capabilities;
    ushort StatusCode;
    ushort AssociationId;
}

struct NDIS_802_11_ASSOCIATION_INFORMATION
{
    uint Length;
    ushort AvailableRequestFixedIEs;
    NDIS_802_11_AI_REQFI RequestFixedIEs;
    uint RequestIELength;
    uint OffsetRequestIEs;
    ushort AvailableResponseFixedIEs;
    NDIS_802_11_AI_RESFI ResponseFixedIEs;
    uint ResponseIELength;
    uint OffsetResponseIEs;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NDIS_802_11_ASSOCIATION_INFORMATION サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; Length : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; AvailableRequestFixedIEs : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; RequestFixedIEs : NDIS_802_11_AI_REQFI (+6, 10byte)  varptr(st)+6 を基点に操作(10byte:入れ子/配列)
; RequestIELength : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; OffsetRequestIEs : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; AvailableResponseFixedIEs : WORD (+24, 2byte)  wpoke st,24,値  /  値 = wpeek(st,24)
; ResponseFixedIEs : NDIS_802_11_AI_RESFI (+26, 6byte)  varptr(st)+26 を基点に操作(6byte:入れ子/配列)
; ResponseIELength : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; OffsetResponseIEs : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global NDIS_802_11_AI_REQFI
    #field short Capabilities
    #field short ListenInterval
    #field byte CurrentAPAddress 6
#endstruct

#defstruct global NDIS_802_11_AI_RESFI
    #field short Capabilities
    #field short StatusCode
    #field short AssociationId
#endstruct

#defstruct global NDIS_802_11_ASSOCIATION_INFORMATION
    #field int Length
    #field short AvailableRequestFixedIEs
    #field NDIS_802_11_AI_REQFI RequestFixedIEs
    #field int RequestIELength
    #field int OffsetRequestIEs
    #field short AvailableResponseFixedIEs
    #field NDIS_802_11_AI_RESFI ResponseFixedIEs
    #field int ResponseIELength
    #field int OffsetResponseIEs
#endstruct

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