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

NDIS_STATISTICS_INFO

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

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

フィールド

フィールドサイズx64x86説明
HeaderNDIS_OBJECT_HEADER4+0+0NDISオブジェクトのヘッダ(NDIS_OBJECT_HEADER)である。
SupportedStatisticsDWORD4+4+4サポートされる統計項目を示すビットマスクである。
ifInDiscardsULONGLONG8+8+8受信側で破棄されたパケット数(誤りなし)である。
ifInErrorsULONGLONG8+16+16誤りにより破棄された受信パケット数である。
ifHCInOctetsULONGLONG8+24+24受信した総バイト数(高容量カウンタ)である。
ifHCInUcastPktsULONGLONG8+32+32受信したユニキャストパケット数(高容量カウンタ)である。
ifHCInMulticastPktsULONGLONG8+40+40受信したマルチキャストパケット数(高容量カウンタ)である。
ifHCInBroadcastPktsULONGLONG8+48+48受信したブロードキャストパケット数(高容量カウンタ)である。
ifHCOutOctetsULONGLONG8+56+56送信した総バイト数(高容量カウンタ)である。
ifHCOutUcastPktsULONGLONG8+64+64送信したユニキャストパケット数(高容量カウンタ)である。
ifHCOutMulticastPktsULONGLONG8+72+72送信したマルチキャストパケット数(高容量カウンタ)である。
ifHCOutBroadcastPktsULONGLONG8+80+80送信したブロードキャストパケット数(高容量カウンタ)である。
ifOutErrorsULONGLONG8+88+88誤りにより破棄された送信パケット数である。
ifOutDiscardsULONGLONG8+96+96送信側で破棄されたパケット数(誤りなし)である。
ifHCInUcastOctetsULONGLONG8+104+104受信したユニキャストバイト数(高容量カウンタ)である。
ifHCInMulticastOctetsULONGLONG8+112+112受信したマルチキャストバイト数(高容量カウンタ)である。
ifHCInBroadcastOctetsULONGLONG8+120+120受信したブロードキャストバイト数(高容量カウンタ)である。
ifHCOutUcastOctetsULONGLONG8+128+128送信したユニキャストバイト数(高容量カウンタ)である。
ifHCOutMulticastOctetsULONGLONG8+136+136送信したマルチキャストバイト数(高容量カウンタ)である。
ifHCOutBroadcastOctetsULONGLONG8+144+144送信したブロードキャストバイト数(高容量カウンタ)である。

各言語での定義

#include <windows.h>

// NDIS_OBJECT_HEADER  (x64 4 / x86 4 バイト)
typedef struct NDIS_OBJECT_HEADER {
    BYTE Type;
    BYTE Revision;
    WORD Size;
} NDIS_OBJECT_HEADER;

// NDIS_STATISTICS_INFO  (x64 152 / x86 152 バイト)
typedef struct NDIS_STATISTICS_INFO {
    NDIS_OBJECT_HEADER Header;
    DWORD SupportedStatistics;
    ULONGLONG ifInDiscards;
    ULONGLONG ifInErrors;
    ULONGLONG ifHCInOctets;
    ULONGLONG ifHCInUcastPkts;
    ULONGLONG ifHCInMulticastPkts;
    ULONGLONG ifHCInBroadcastPkts;
    ULONGLONG ifHCOutOctets;
    ULONGLONG ifHCOutUcastPkts;
    ULONGLONG ifHCOutMulticastPkts;
    ULONGLONG ifHCOutBroadcastPkts;
    ULONGLONG ifOutErrors;
    ULONGLONG ifOutDiscards;
    ULONGLONG ifHCInUcastOctets;
    ULONGLONG ifHCInMulticastOctets;
    ULONGLONG ifHCInBroadcastOctets;
    ULONGLONG ifHCOutUcastOctets;
    ULONGLONG ifHCOutMulticastOctets;
    ULONGLONG ifHCOutBroadcastOctets;
} NDIS_STATISTICS_INFO;
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 NDIS_STATISTICS_INFO
{
    public NDIS_OBJECT_HEADER Header;
    public uint SupportedStatistics;
    public ulong ifInDiscards;
    public ulong ifInErrors;
    public ulong ifHCInOctets;
    public ulong ifHCInUcastPkts;
    public ulong ifHCInMulticastPkts;
    public ulong ifHCInBroadcastPkts;
    public ulong ifHCOutOctets;
    public ulong ifHCOutUcastPkts;
    public ulong ifHCOutMulticastPkts;
    public ulong ifHCOutBroadcastPkts;
    public ulong ifOutErrors;
    public ulong ifOutDiscards;
    public ulong ifHCInUcastOctets;
    public ulong ifHCInMulticastOctets;
    public ulong ifHCInBroadcastOctets;
    public ulong ifHCOutUcastOctets;
    public ulong ifHCOutMulticastOctets;
    public ulong ifHCOutBroadcastOctets;
}
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 NDIS_STATISTICS_INFO
    Public Header As NDIS_OBJECT_HEADER
    Public SupportedStatistics As UInteger
    Public ifInDiscards As ULong
    Public ifInErrors As ULong
    Public ifHCInOctets As ULong
    Public ifHCInUcastPkts As ULong
    Public ifHCInMulticastPkts As ULong
    Public ifHCInBroadcastPkts As ULong
    Public ifHCOutOctets As ULong
    Public ifHCOutUcastPkts As ULong
    Public ifHCOutMulticastPkts As ULong
    Public ifHCOutBroadcastPkts As ULong
    Public ifOutErrors As ULong
    Public ifOutDiscards As ULong
    Public ifHCInUcastOctets As ULong
    Public ifHCInMulticastOctets As ULong
    Public ifHCInBroadcastOctets As ULong
    Public ifHCOutUcastOctets As ULong
    Public ifHCOutMulticastOctets As ULong
    Public ifHCOutBroadcastOctets As ULong
End Structure
import 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 NDIS_STATISTICS_INFO(ctypes.Structure):
    _fields_ = [
        ("Header", NDIS_OBJECT_HEADER),
        ("SupportedStatistics", wintypes.DWORD),
        ("ifInDiscards", ctypes.c_ulonglong),
        ("ifInErrors", ctypes.c_ulonglong),
        ("ifHCInOctets", ctypes.c_ulonglong),
        ("ifHCInUcastPkts", ctypes.c_ulonglong),
        ("ifHCInMulticastPkts", ctypes.c_ulonglong),
        ("ifHCInBroadcastPkts", ctypes.c_ulonglong),
        ("ifHCOutOctets", ctypes.c_ulonglong),
        ("ifHCOutUcastPkts", ctypes.c_ulonglong),
        ("ifHCOutMulticastPkts", ctypes.c_ulonglong),
        ("ifHCOutBroadcastPkts", ctypes.c_ulonglong),
        ("ifOutErrors", ctypes.c_ulonglong),
        ("ifOutDiscards", ctypes.c_ulonglong),
        ("ifHCInUcastOctets", ctypes.c_ulonglong),
        ("ifHCInMulticastOctets", ctypes.c_ulonglong),
        ("ifHCInBroadcastOctets", ctypes.c_ulonglong),
        ("ifHCOutUcastOctets", ctypes.c_ulonglong),
        ("ifHCOutMulticastOctets", ctypes.c_ulonglong),
        ("ifHCOutBroadcastOctets", ctypes.c_ulonglong),
    ]
#[repr(C)]
pub struct NDIS_OBJECT_HEADER {
    pub Type: u8,
    pub Revision: u8,
    pub Size: u16,
}

#[repr(C)]
pub struct NDIS_STATISTICS_INFO {
    pub Header: NDIS_OBJECT_HEADER,
    pub SupportedStatistics: u32,
    pub ifInDiscards: u64,
    pub ifInErrors: u64,
    pub ifHCInOctets: u64,
    pub ifHCInUcastPkts: u64,
    pub ifHCInMulticastPkts: u64,
    pub ifHCInBroadcastPkts: u64,
    pub ifHCOutOctets: u64,
    pub ifHCOutUcastPkts: u64,
    pub ifHCOutMulticastPkts: u64,
    pub ifHCOutBroadcastPkts: u64,
    pub ifOutErrors: u64,
    pub ifOutDiscards: u64,
    pub ifHCInUcastOctets: u64,
    pub ifHCInMulticastOctets: u64,
    pub ifHCInBroadcastOctets: u64,
    pub ifHCOutUcastOctets: u64,
    pub ifHCOutMulticastOctets: u64,
    pub ifHCOutBroadcastOctets: u64,
}
import "golang.org/x/sys/windows"

type NDIS_OBJECT_HEADER struct {
	Type byte
	Revision byte
	Size uint16
}

type NDIS_STATISTICS_INFO struct {
	Header NDIS_OBJECT_HEADER
	SupportedStatistics uint32
	ifInDiscards uint64
	ifInErrors uint64
	ifHCInOctets uint64
	ifHCInUcastPkts uint64
	ifHCInMulticastPkts uint64
	ifHCInBroadcastPkts uint64
	ifHCOutOctets uint64
	ifHCOutUcastPkts uint64
	ifHCOutMulticastPkts uint64
	ifHCOutBroadcastPkts uint64
	ifOutErrors uint64
	ifOutDiscards uint64
	ifHCInUcastOctets uint64
	ifHCInMulticastOctets uint64
	ifHCInBroadcastOctets uint64
	ifHCOutUcastOctets uint64
	ifHCOutMulticastOctets uint64
	ifHCOutBroadcastOctets uint64
}
type
  NDIS_OBJECT_HEADER = record
    Type: Byte;
    Revision: Byte;
    Size: Word;
  end;

  NDIS_STATISTICS_INFO = record
    Header: NDIS_OBJECT_HEADER;
    SupportedStatistics: DWORD;
    ifInDiscards: UInt64;
    ifInErrors: UInt64;
    ifHCInOctets: UInt64;
    ifHCInUcastPkts: UInt64;
    ifHCInMulticastPkts: UInt64;
    ifHCInBroadcastPkts: UInt64;
    ifHCOutOctets: UInt64;
    ifHCOutUcastPkts: UInt64;
    ifHCOutMulticastPkts: UInt64;
    ifHCOutBroadcastPkts: UInt64;
    ifOutErrors: UInt64;
    ifOutDiscards: UInt64;
    ifHCInUcastOctets: UInt64;
    ifHCInMulticastOctets: UInt64;
    ifHCInBroadcastOctets: UInt64;
    ifHCOutUcastOctets: UInt64;
    ifHCOutMulticastOctets: UInt64;
    ifHCOutBroadcastOctets: UInt64;
  end;
const NDIS_OBJECT_HEADER = extern struct {
    Type: u8,
    Revision: u8,
    Size: u16,
};

const NDIS_STATISTICS_INFO = extern struct {
    Header: NDIS_OBJECT_HEADER,
    SupportedStatistics: u32,
    ifInDiscards: u64,
    ifInErrors: u64,
    ifHCInOctets: u64,
    ifHCInUcastPkts: u64,
    ifHCInMulticastPkts: u64,
    ifHCInBroadcastPkts: u64,
    ifHCOutOctets: u64,
    ifHCOutUcastPkts: u64,
    ifHCOutMulticastPkts: u64,
    ifHCOutBroadcastPkts: u64,
    ifOutErrors: u64,
    ifOutDiscards: u64,
    ifHCInUcastOctets: u64,
    ifHCInMulticastOctets: u64,
    ifHCInBroadcastOctets: u64,
    ifHCOutUcastOctets: u64,
    ifHCOutMulticastOctets: u64,
    ifHCOutBroadcastOctets: u64,
};
type
  NDIS_OBJECT_HEADER {.bycopy.} = object
    Type: uint8
    Revision: uint8
    Size: uint16

  NDIS_STATISTICS_INFO {.bycopy.} = object
    Header: NDIS_OBJECT_HEADER
    SupportedStatistics: uint32
    ifInDiscards: uint64
    ifInErrors: uint64
    ifHCInOctets: uint64
    ifHCInUcastPkts: uint64
    ifHCInMulticastPkts: uint64
    ifHCInBroadcastPkts: uint64
    ifHCOutOctets: uint64
    ifHCOutUcastPkts: uint64
    ifHCOutMulticastPkts: uint64
    ifHCOutBroadcastPkts: uint64
    ifOutErrors: uint64
    ifOutDiscards: uint64
    ifHCInUcastOctets: uint64
    ifHCInMulticastOctets: uint64
    ifHCInBroadcastOctets: uint64
    ifHCOutUcastOctets: uint64
    ifHCOutMulticastOctets: uint64
    ifHCOutBroadcastOctets: uint64
struct NDIS_OBJECT_HEADER
{
    ubyte Type;
    ubyte Revision;
    ushort Size;
}

struct NDIS_STATISTICS_INFO
{
    NDIS_OBJECT_HEADER Header;
    uint SupportedStatistics;
    ulong ifInDiscards;
    ulong ifInErrors;
    ulong ifHCInOctets;
    ulong ifHCInUcastPkts;
    ulong ifHCInMulticastPkts;
    ulong ifHCInBroadcastPkts;
    ulong ifHCOutOctets;
    ulong ifHCOutUcastPkts;
    ulong ifHCOutMulticastPkts;
    ulong ifHCOutBroadcastPkts;
    ulong ifOutErrors;
    ulong ifOutDiscards;
    ulong ifHCInUcastOctets;
    ulong ifHCInMulticastOctets;
    ulong ifHCInBroadcastOctets;
    ulong ifHCOutUcastOctets;
    ulong ifHCOutMulticastOctets;
    ulong ifHCOutBroadcastOctets;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NDIS_STATISTICS_INFO サイズ: 152 バイト(x64)
dim st, 38    ; 4byte整数×38(構造体サイズ 152 / 4 切り上げ)
; Header : NDIS_OBJECT_HEADER (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; SupportedStatistics : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; ifInDiscards : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; ifInErrors : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; ifHCInOctets : ULONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ifHCInUcastPkts : ULONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; ifHCInMulticastPkts : ULONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ifHCInBroadcastPkts : ULONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ifHCOutOctets : ULONGLONG (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; ifHCOutUcastPkts : ULONGLONG (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; ifHCOutMulticastPkts : ULONGLONG (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; ifHCOutBroadcastPkts : ULONGLONG (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; ifOutErrors : ULONGLONG (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; ifOutDiscards : ULONGLONG (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; ifHCInUcastOctets : ULONGLONG (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; ifHCInMulticastOctets : ULONGLONG (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; ifHCInBroadcastOctets : ULONGLONG (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; ifHCOutUcastOctets : ULONGLONG (+128, 8byte)  qpoke st,128,値 / qpeek(st,128)  ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; ifHCOutMulticastOctets : ULONGLONG (+136, 8byte)  qpoke st,136,値 / qpeek(st,136)  ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; ifHCOutBroadcastOctets : ULONGLONG (+144, 8byte)  qpoke st,144,値 / qpeek(st,144)  ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; ※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 NDIS_STATISTICS_INFO
    #field NDIS_OBJECT_HEADER Header
    #field int SupportedStatistics
    #field int64 ifInDiscards
    #field int64 ifInErrors
    #field int64 ifHCInOctets
    #field int64 ifHCInUcastPkts
    #field int64 ifHCInMulticastPkts
    #field int64 ifHCInBroadcastPkts
    #field int64 ifHCOutOctets
    #field int64 ifHCOutUcastPkts
    #field int64 ifHCOutMulticastPkts
    #field int64 ifHCOutBroadcastPkts
    #field int64 ifOutErrors
    #field int64 ifOutDiscards
    #field int64 ifHCInUcastOctets
    #field int64 ifHCInMulticastOctets
    #field int64 ifHCInBroadcastOctets
    #field int64 ifHCOutUcastOctets
    #field int64 ifHCOutMulticastOctets
    #field int64 ifHCOutBroadcastOctets
#endstruct

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