ホーム › Storage.IscsiDisc › ISCSI_CONNECTION_INFO_EX
ISCSI_CONNECTION_INFO_EX
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| ConnectionId | ISCSI_UNIQUE_SESSION_ID | 16 | +0 | +0 | この接続を一意に識別するISCSI_UNIQUE_SESSION_ID。 |
| State | BYTE | 1 | +16 | +16 | 接続の現在の状態を示す値(フリー、ログイン中、フルフィーチャ等)。 |
| Protocol | BYTE | 1 | +17 | +17 | この接続で使用するトランスポートプロトコル種別。 |
| HeaderDigest | BYTE | 1 | +18 | +18 | ネゴシエートされたヘッダダイジェスト方式(なし/CRC32C等)。 |
| DataDigest | BYTE | 1 | +19 | +19 | ネゴシエートされたデータダイジェスト方式(なし/CRC32C等)。 |
| MaxRecvDataSegmentLength | DWORD | 4 | +20 | +20 | 受信可能な最大データセグメント長(バイト)。 |
| AuthType | ISCSI_AUTH_TYPES | 4 | +24 | +24 | この接続で使用された認証方式を示すISCSI_AUTH_TYPES列挙値。 |
| EstimatedThroughput | ULONGLONG | 8 | +32 | +32 | 推定スループット(ビット毎秒)。 |
| MaxDatagramSize | DWORD | 4 | +40 | +40 | 1データグラムあたりの最大サイズ(バイト)。 |
各言語での定義
#include <windows.h>
// ISCSI_UNIQUE_SESSION_ID (x64 16 / x86 16 バイト)
typedef struct ISCSI_UNIQUE_SESSION_ID {
ULONGLONG AdapterUnique;
ULONGLONG AdapterSpecific;
} ISCSI_UNIQUE_SESSION_ID;
// ISCSI_CONNECTION_INFO_EX (x64 48 / x86 48 バイト)
typedef struct ISCSI_CONNECTION_INFO_EX {
ISCSI_UNIQUE_SESSION_ID ConnectionId;
BYTE State;
BYTE Protocol;
BYTE HeaderDigest;
BYTE DataDigest;
DWORD MaxRecvDataSegmentLength;
ISCSI_AUTH_TYPES AuthType;
ULONGLONG EstimatedThroughput;
DWORD MaxDatagramSize;
} ISCSI_CONNECTION_INFO_EX;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ISCSI_UNIQUE_SESSION_ID
{
public ulong AdapterUnique;
public ulong AdapterSpecific;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ISCSI_CONNECTION_INFO_EX
{
public ISCSI_UNIQUE_SESSION_ID ConnectionId;
public byte State;
public byte Protocol;
public byte HeaderDigest;
public byte DataDigest;
public uint MaxRecvDataSegmentLength;
public int AuthType;
public ulong EstimatedThroughput;
public uint MaxDatagramSize;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ISCSI_UNIQUE_SESSION_ID
Public AdapterUnique As ULong
Public AdapterSpecific As ULong
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ISCSI_CONNECTION_INFO_EX
Public ConnectionId As ISCSI_UNIQUE_SESSION_ID
Public State As Byte
Public Protocol As Byte
Public HeaderDigest As Byte
Public DataDigest As Byte
Public MaxRecvDataSegmentLength As UInteger
Public AuthType As Integer
Public EstimatedThroughput As ULong
Public MaxDatagramSize As UInteger
End Structureimport ctypes
from ctypes import wintypes
class ISCSI_UNIQUE_SESSION_ID(ctypes.Structure):
_fields_ = [
("AdapterUnique", ctypes.c_ulonglong),
("AdapterSpecific", ctypes.c_ulonglong),
]
class ISCSI_CONNECTION_INFO_EX(ctypes.Structure):
_fields_ = [
("ConnectionId", ISCSI_UNIQUE_SESSION_ID),
("State", ctypes.c_ubyte),
("Protocol", ctypes.c_ubyte),
("HeaderDigest", ctypes.c_ubyte),
("DataDigest", ctypes.c_ubyte),
("MaxRecvDataSegmentLength", wintypes.DWORD),
("AuthType", ctypes.c_int),
("EstimatedThroughput", ctypes.c_ulonglong),
("MaxDatagramSize", wintypes.DWORD),
]#[repr(C)]
pub struct ISCSI_UNIQUE_SESSION_ID {
pub AdapterUnique: u64,
pub AdapterSpecific: u64,
}
#[repr(C)]
pub struct ISCSI_CONNECTION_INFO_EX {
pub ConnectionId: ISCSI_UNIQUE_SESSION_ID,
pub State: u8,
pub Protocol: u8,
pub HeaderDigest: u8,
pub DataDigest: u8,
pub MaxRecvDataSegmentLength: u32,
pub AuthType: i32,
pub EstimatedThroughput: u64,
pub MaxDatagramSize: u32,
}import "golang.org/x/sys/windows"
type ISCSI_UNIQUE_SESSION_ID struct {
AdapterUnique uint64
AdapterSpecific uint64
}
type ISCSI_CONNECTION_INFO_EX struct {
ConnectionId ISCSI_UNIQUE_SESSION_ID
State byte
Protocol byte
HeaderDigest byte
DataDigest byte
MaxRecvDataSegmentLength uint32
AuthType int32
EstimatedThroughput uint64
MaxDatagramSize uint32
}type
ISCSI_UNIQUE_SESSION_ID = record
AdapterUnique: UInt64;
AdapterSpecific: UInt64;
end;
ISCSI_CONNECTION_INFO_EX = record
ConnectionId: ISCSI_UNIQUE_SESSION_ID;
State: Byte;
Protocol: Byte;
HeaderDigest: Byte;
DataDigest: Byte;
MaxRecvDataSegmentLength: DWORD;
AuthType: Integer;
EstimatedThroughput: UInt64;
MaxDatagramSize: DWORD;
end;const ISCSI_UNIQUE_SESSION_ID = extern struct {
AdapterUnique: u64,
AdapterSpecific: u64,
};
const ISCSI_CONNECTION_INFO_EX = extern struct {
ConnectionId: ISCSI_UNIQUE_SESSION_ID,
State: u8,
Protocol: u8,
HeaderDigest: u8,
DataDigest: u8,
MaxRecvDataSegmentLength: u32,
AuthType: i32,
EstimatedThroughput: u64,
MaxDatagramSize: u32,
};type
ISCSI_UNIQUE_SESSION_ID {.bycopy.} = object
AdapterUnique: uint64
AdapterSpecific: uint64
ISCSI_CONNECTION_INFO_EX {.bycopy.} = object
ConnectionId: ISCSI_UNIQUE_SESSION_ID
State: uint8
Protocol: uint8
HeaderDigest: uint8
DataDigest: uint8
MaxRecvDataSegmentLength: uint32
AuthType: int32
EstimatedThroughput: uint64
MaxDatagramSize: uint32struct ISCSI_UNIQUE_SESSION_ID
{
ulong AdapterUnique;
ulong AdapterSpecific;
}
struct ISCSI_CONNECTION_INFO_EX
{
ISCSI_UNIQUE_SESSION_ID ConnectionId;
ubyte State;
ubyte Protocol;
ubyte HeaderDigest;
ubyte DataDigest;
uint MaxRecvDataSegmentLength;
int AuthType;
ulong EstimatedThroughput;
uint MaxDatagramSize;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; ISCSI_CONNECTION_INFO_EX サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; ConnectionId : ISCSI_UNIQUE_SESSION_ID (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; State : BYTE (+16, 1byte) poke st,16,値 / 値 = peek(st,16)
; Protocol : BYTE (+17, 1byte) poke st,17,値 / 値 = peek(st,17)
; HeaderDigest : BYTE (+18, 1byte) poke st,18,値 / 値 = peek(st,18)
; DataDigest : BYTE (+19, 1byte) poke st,19,値 / 値 = peek(st,19)
; MaxRecvDataSegmentLength : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; AuthType : ISCSI_AUTH_TYPES (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; EstimatedThroughput : ULONGLONG (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; MaxDatagramSize : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global ISCSI_UNIQUE_SESSION_ID
#field int64 AdapterUnique
#field int64 AdapterSpecific
#endstruct
#defstruct global ISCSI_CONNECTION_INFO_EX
#field ISCSI_UNIQUE_SESSION_ID ConnectionId
#field byte State
#field byte Protocol
#field byte HeaderDigest
#field byte DataDigest
#field int MaxRecvDataSegmentLength
#field int AuthType
#field int64 EstimatedThroughput
#field int MaxDatagramSize
#endstruct
stdim st, ISCSI_CONNECTION_INFO_EX ; NSTRUCT 変数を確保
st->State = 100
mes "State=" + st->State