ホーム › NetworkManagement.NetBios › SESSION_BUFFER
SESSION_BUFFER
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| lsn | BYTE | 1 | +0 | +0 | ローカルセッション番号。 |
| state | BYTE | 1 | +1 | +1 | セッションの状態を示す値。 |
| local_name | BYTE | 16 | +2 | +2 | セッションのローカル名(16バイト)。 |
| remote_name | BYTE | 16 | +18 | +18 | セッションのリモート名(16バイト)。 |
| rcvs_outstanding | BYTE | 1 | +34 | +34 | 未処理の受信コマンド数。 |
| sends_outstanding | BYTE | 1 | +35 | +35 | 未処理の送信コマンド数。 |
各言語での定義
#include <windows.h>
// SESSION_BUFFER (x64 36 / x86 36 バイト)
typedef struct SESSION_BUFFER {
BYTE lsn;
BYTE state;
BYTE local_name[16];
BYTE remote_name[16];
BYTE rcvs_outstanding;
BYTE sends_outstanding;
} SESSION_BUFFER;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SESSION_BUFFER
{
public byte lsn;
public byte state;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] local_name;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] remote_name;
public byte rcvs_outstanding;
public byte sends_outstanding;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SESSION_BUFFER
Public lsn As Byte
Public state As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public local_name() As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public remote_name() As Byte
Public rcvs_outstanding As Byte
Public sends_outstanding As Byte
End Structureimport ctypes
from ctypes import wintypes
class SESSION_BUFFER(ctypes.Structure):
_fields_ = [
("lsn", ctypes.c_ubyte),
("state", ctypes.c_ubyte),
("local_name", ctypes.c_ubyte * 16),
("remote_name", ctypes.c_ubyte * 16),
("rcvs_outstanding", ctypes.c_ubyte),
("sends_outstanding", ctypes.c_ubyte),
]#[repr(C)]
pub struct SESSION_BUFFER {
pub lsn: u8,
pub state: u8,
pub local_name: [u8; 16],
pub remote_name: [u8; 16],
pub rcvs_outstanding: u8,
pub sends_outstanding: u8,
}import "golang.org/x/sys/windows"
type SESSION_BUFFER struct {
lsn byte
state byte
local_name [16]byte
remote_name [16]byte
rcvs_outstanding byte
sends_outstanding byte
}type
SESSION_BUFFER = record
lsn: Byte;
state: Byte;
local_name: array[0..15] of Byte;
remote_name: array[0..15] of Byte;
rcvs_outstanding: Byte;
sends_outstanding: Byte;
end;const SESSION_BUFFER = extern struct {
lsn: u8,
state: u8,
local_name: [16]u8,
remote_name: [16]u8,
rcvs_outstanding: u8,
sends_outstanding: u8,
};type
SESSION_BUFFER {.bycopy.} = object
lsn: uint8
state: uint8
local_name: array[16, uint8]
remote_name: array[16, uint8]
rcvs_outstanding: uint8
sends_outstanding: uint8struct SESSION_BUFFER
{
ubyte lsn;
ubyte state;
ubyte[16] local_name;
ubyte[16] remote_name;
ubyte rcvs_outstanding;
ubyte sends_outstanding;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SESSION_BUFFER サイズ: 36 バイト(x64)
dim st, 9 ; 4byte整数×9(構造体サイズ 36 / 4 切り上げ)
; lsn : BYTE (+0, 1byte) poke st,0,値 / 値 = peek(st,0)
; state : BYTE (+1, 1byte) poke st,1,値 / 値 = peek(st,1)
; local_name : BYTE (+2, 16byte) varptr(st)+2 を基点に操作(16byte:入れ子/配列)
; remote_name : BYTE (+18, 16byte) varptr(st)+18 を基点に操作(16byte:入れ子/配列)
; rcvs_outstanding : BYTE (+34, 1byte) poke st,34,値 / 値 = peek(st,34)
; sends_outstanding : BYTE (+35, 1byte) poke st,35,値 / 値 = peek(st,35)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SESSION_BUFFER
#field byte lsn
#field byte state
#field byte local_name 16
#field byte remote_name 16
#field byte rcvs_outstanding
#field byte sends_outstanding
#endstruct
stdim st, SESSION_BUFFER ; NSTRUCT 変数を確保
st->lsn = 100
mes "lsn=" + st->lsn