ホーム › System.Diagnostics.Debug.Extensions › XML_DRIVER_NODE_INFO
XML_DRIVER_NODE_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| FileName | CHAR | 64 | +0 | +0 | ドライバファイル名のNULL終端文字列。 |
| FileSize | ULONGLONG | 8 | +64 | +64 | ファイルサイズ(バイト数)。 |
| CreationDate | ULONGLONG | 8 | +72 | +72 | ファイルの作成日時(64ビット時刻値)。 |
| Version | CHAR | 64 | +80 | +80 | ドライバのバージョン文字列。 |
| Manufacturer | CHAR | 260 | +144 | +144 | 製造元名の文字列。 |
| ProductName | CHAR | 260 | +404 | +404 | 製品名の文字列。 |
| Group | CHAR | 260 | +664 | +664 | ドライバが属するグループ名の文字列。 |
| Altitude | CHAR | 260 | +924 | +924 | フィルタドライバのアルティチュード(読み込み順序)文字列。 |
各言語での定義
#include <windows.h>
// XML_DRIVER_NODE_INFO (x64 1184 / x86 1184 バイト)
typedef struct XML_DRIVER_NODE_INFO {
CHAR FileName[64];
ULONGLONG FileSize;
ULONGLONG CreationDate;
CHAR Version[64];
CHAR Manufacturer[260];
CHAR ProductName[260];
CHAR Group[260];
CHAR Altitude[260];
} XML_DRIVER_NODE_INFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct XML_DRIVER_NODE_INFO
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] public sbyte[] FileName;
public ulong FileSize;
public ulong CreationDate;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] public sbyte[] Version;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 260)] public sbyte[] Manufacturer;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 260)] public sbyte[] ProductName;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 260)] public sbyte[] Group;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 260)] public sbyte[] Altitude;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure XML_DRIVER_NODE_INFO
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> Public FileName() As SByte
Public FileSize As ULong
Public CreationDate As ULong
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> Public Version() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=260)> Public Manufacturer() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=260)> Public ProductName() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=260)> Public Group() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=260)> Public Altitude() As SByte
End Structureimport ctypes
from ctypes import wintypes
class XML_DRIVER_NODE_INFO(ctypes.Structure):
_fields_ = [
("FileName", ctypes.c_byte * 64),
("FileSize", ctypes.c_ulonglong),
("CreationDate", ctypes.c_ulonglong),
("Version", ctypes.c_byte * 64),
("Manufacturer", ctypes.c_byte * 260),
("ProductName", ctypes.c_byte * 260),
("Group", ctypes.c_byte * 260),
("Altitude", ctypes.c_byte * 260),
]#[repr(C)]
pub struct XML_DRIVER_NODE_INFO {
pub FileName: [i8; 64],
pub FileSize: u64,
pub CreationDate: u64,
pub Version: [i8; 64],
pub Manufacturer: [i8; 260],
pub ProductName: [i8; 260],
pub Group: [i8; 260],
pub Altitude: [i8; 260],
}import "golang.org/x/sys/windows"
type XML_DRIVER_NODE_INFO struct {
FileName [64]int8
FileSize uint64
CreationDate uint64
Version [64]int8
Manufacturer [260]int8
ProductName [260]int8
Group [260]int8
Altitude [260]int8
}type
XML_DRIVER_NODE_INFO = record
FileName: array[0..63] of Shortint;
FileSize: UInt64;
CreationDate: UInt64;
Version: array[0..63] of Shortint;
Manufacturer: array[0..259] of Shortint;
ProductName: array[0..259] of Shortint;
Group: array[0..259] of Shortint;
Altitude: array[0..259] of Shortint;
end;const XML_DRIVER_NODE_INFO = extern struct {
FileName: [64]i8,
FileSize: u64,
CreationDate: u64,
Version: [64]i8,
Manufacturer: [260]i8,
ProductName: [260]i8,
Group: [260]i8,
Altitude: [260]i8,
};type
XML_DRIVER_NODE_INFO {.bycopy.} = object
FileName: array[64, int8]
FileSize: uint64
CreationDate: uint64
Version: array[64, int8]
Manufacturer: array[260, int8]
ProductName: array[260, int8]
Group: array[260, int8]
Altitude: array[260, int8]struct XML_DRIVER_NODE_INFO
{
byte[64] FileName;
ulong FileSize;
ulong CreationDate;
byte[64] Version;
byte[260] Manufacturer;
byte[260] ProductName;
byte[260] Group;
byte[260] Altitude;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; XML_DRIVER_NODE_INFO サイズ: 1184 バイト(x64)
dim st, 296 ; 4byte整数×296(構造体サイズ 1184 / 4 切り上げ)
; FileName : CHAR (+0, 64byte) varptr(st)+0 を基点に操作(64byte:入れ子/配列)
; FileSize : ULONGLONG (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; CreationDate : ULONGLONG (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; Version : CHAR (+80, 64byte) varptr(st)+80 を基点に操作(64byte:入れ子/配列)
; Manufacturer : CHAR (+144, 260byte) varptr(st)+144 を基点に操作(260byte:入れ子/配列)
; ProductName : CHAR (+404, 260byte) varptr(st)+404 を基点に操作(260byte:入れ子/配列)
; Group : CHAR (+664, 260byte) varptr(st)+664 を基点に操作(260byte:入れ子/配列)
; Altitude : CHAR (+924, 260byte) varptr(st)+924 を基点に操作(260byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global XML_DRIVER_NODE_INFO
#field byte FileName 64
#field int64 FileSize
#field int64 CreationDate
#field byte Version 64
#field byte Manufacturer 260
#field byte ProductName 260
#field byte Group 260
#field byte Altitude 260
#endstruct
stdim st, XML_DRIVER_NODE_INFO ; NSTRUCT 変数を確保
st->FileSize = 100
mes "FileSize=" + st->FileSize