ホーム › System.SystemServices › DRIVER_INFO_ENTRY
DRIVER_INFO_ENTRY
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| InternalName | CHAR | 32 | +0 | +0 | ドライバの内部名(CHAR配列)。 |
| ImageHashAlgorithm | WORD | 2 | +32 | +32 | イメージハッシュに使用したアルゴリズム識別子。 |
| PublisherThumbprintHashAlgorithm | WORD | 2 | +34 | +34 | 発行者証明書サムプリントのハッシュアルゴリズム識別子。 |
| ImageHashOffset | DWORD | 4 | +36 | +36 | イメージハッシュデータへのオフセット。 |
| PublisherThumbprintOffset | DWORD | 4 | +40 | +40 | 発行者サムプリントデータへのオフセット。 |
| LoadCount | WORD | 2 | +44 | +44 | ドライバの読み込み回数。 |
| OemNameSize | WORD | 2 | +46 | +46 | OEM名のサイズをバイト単位で示す。 |
| OemNameOffset | DWORD | 4 | +48 | +48 | OEM名データへのオフセット。 |
| Flags | _Flags_e__Union | 8/4 | +56 | +52 | ドライバ情報のフラグを保持する無名共用体。 |
| Padding | WORD | 2 | +64 | +56 | アライメント調整用の埋め込みフィールド。 |
共用体: _Flags_e__Union x64 8B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| Anonymous | _Anonymous_e__Struct | 8/4 | +0 | +0 |
| AsUInt16 | WORD | 2 | +0 | +0 |
各言語での定義
#include <windows.h>
// DRIVER_INFO_ENTRY (x64 72 / x86 60 バイト)
typedef struct DRIVER_INFO_ENTRY {
CHAR InternalName[32];
WORD ImageHashAlgorithm;
WORD PublisherThumbprintHashAlgorithm;
DWORD ImageHashOffset;
DWORD PublisherThumbprintOffset;
WORD LoadCount;
WORD OemNameSize;
DWORD OemNameOffset;
_Flags_e__Union Flags;
WORD Padding;
} DRIVER_INFO_ENTRY;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DRIVER_INFO_ENTRY
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public sbyte[] InternalName;
public ushort ImageHashAlgorithm;
public ushort PublisherThumbprintHashAlgorithm;
public uint ImageHashOffset;
public uint PublisherThumbprintOffset;
public ushort LoadCount;
public ushort OemNameSize;
public uint OemNameOffset;
public _Flags_e__Union Flags;
public ushort Padding;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DRIVER_INFO_ENTRY
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public InternalName() As SByte
Public ImageHashAlgorithm As UShort
Public PublisherThumbprintHashAlgorithm As UShort
Public ImageHashOffset As UInteger
Public PublisherThumbprintOffset As UInteger
Public LoadCount As UShort
Public OemNameSize As UShort
Public OemNameOffset As UInteger
Public Flags As _Flags_e__Union
Public Padding As UShort
End Structureimport ctypes
from ctypes import wintypes
class DRIVER_INFO_ENTRY(ctypes.Structure):
_fields_ = [
("InternalName", ctypes.c_byte * 32),
("ImageHashAlgorithm", ctypes.c_ushort),
("PublisherThumbprintHashAlgorithm", ctypes.c_ushort),
("ImageHashOffset", wintypes.DWORD),
("PublisherThumbprintOffset", wintypes.DWORD),
("LoadCount", ctypes.c_ushort),
("OemNameSize", ctypes.c_ushort),
("OemNameOffset", wintypes.DWORD),
("Flags", _Flags_e__Union),
("Padding", ctypes.c_ushort),
]#[repr(C)]
pub struct DRIVER_INFO_ENTRY {
pub InternalName: [i8; 32],
pub ImageHashAlgorithm: u16,
pub PublisherThumbprintHashAlgorithm: u16,
pub ImageHashOffset: u32,
pub PublisherThumbprintOffset: u32,
pub LoadCount: u16,
pub OemNameSize: u16,
pub OemNameOffset: u32,
pub Flags: _Flags_e__Union,
pub Padding: u16,
}import "golang.org/x/sys/windows"
type DRIVER_INFO_ENTRY struct {
InternalName [32]int8
ImageHashAlgorithm uint16
PublisherThumbprintHashAlgorithm uint16
ImageHashOffset uint32
PublisherThumbprintOffset uint32
LoadCount uint16
OemNameSize uint16
OemNameOffset uint32
Flags _Flags_e__Union
Padding uint16
}type
DRIVER_INFO_ENTRY = record
InternalName: array[0..31] of Shortint;
ImageHashAlgorithm: Word;
PublisherThumbprintHashAlgorithm: Word;
ImageHashOffset: DWORD;
PublisherThumbprintOffset: DWORD;
LoadCount: Word;
OemNameSize: Word;
OemNameOffset: DWORD;
Flags: _Flags_e__Union;
Padding: Word;
end;const DRIVER_INFO_ENTRY = extern struct {
InternalName: [32]i8,
ImageHashAlgorithm: u16,
PublisherThumbprintHashAlgorithm: u16,
ImageHashOffset: u32,
PublisherThumbprintOffset: u32,
LoadCount: u16,
OemNameSize: u16,
OemNameOffset: u32,
Flags: _Flags_e__Union,
Padding: u16,
};type
DRIVER_INFO_ENTRY {.bycopy.} = object
InternalName: array[32, int8]
ImageHashAlgorithm: uint16
PublisherThumbprintHashAlgorithm: uint16
ImageHashOffset: uint32
PublisherThumbprintOffset: uint32
LoadCount: uint16
OemNameSize: uint16
OemNameOffset: uint32
Flags: _Flags_e__Union
Padding: uint16struct DRIVER_INFO_ENTRY
{
byte[32] InternalName;
ushort ImageHashAlgorithm;
ushort PublisherThumbprintHashAlgorithm;
uint ImageHashOffset;
uint PublisherThumbprintOffset;
ushort LoadCount;
ushort OemNameSize;
uint OemNameOffset;
_Flags_e__Union Flags;
ushort Padding;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DRIVER_INFO_ENTRY サイズ: 60 バイト(x86)
dim st, 15 ; 4byte整数×15(構造体サイズ 60 / 4 切り上げ)
; InternalName : CHAR (+0, 32byte) varptr(st)+0 を基点に操作(32byte:入れ子/配列)
; ImageHashAlgorithm : WORD (+32, 2byte) wpoke st,32,値 / 値 = wpeek(st,32)
; PublisherThumbprintHashAlgorithm : WORD (+34, 2byte) wpoke st,34,値 / 値 = wpeek(st,34)
; ImageHashOffset : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; PublisherThumbprintOffset : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; LoadCount : WORD (+44, 2byte) wpoke st,44,値 / 値 = wpeek(st,44)
; OemNameSize : WORD (+46, 2byte) wpoke st,46,値 / 値 = wpeek(st,46)
; OemNameOffset : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; Flags : _Flags_e__Union (+52, 4byte) varptr(st)+52 を基点に操作(4byte:入れ子/配列)
; Padding : WORD (+56, 2byte) wpoke st,56,値 / 値 = wpeek(st,56)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DRIVER_INFO_ENTRY サイズ: 72 バイト(x64)
dim st, 18 ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; InternalName : CHAR (+0, 32byte) varptr(st)+0 を基点に操作(32byte:入れ子/配列)
; ImageHashAlgorithm : WORD (+32, 2byte) wpoke st,32,値 / 値 = wpeek(st,32)
; PublisherThumbprintHashAlgorithm : WORD (+34, 2byte) wpoke st,34,値 / 値 = wpeek(st,34)
; ImageHashOffset : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; PublisherThumbprintOffset : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; LoadCount : WORD (+44, 2byte) wpoke st,44,値 / 値 = wpeek(st,44)
; OemNameSize : WORD (+46, 2byte) wpoke st,46,値 / 値 = wpeek(st,46)
; OemNameOffset : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; Flags : _Flags_e__Union (+56, 8byte) varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; Padding : WORD (+64, 2byte) wpoke st,64,値 / 値 = wpeek(st,64)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DRIVER_INFO_ENTRY
#field byte InternalName 32
#field short ImageHashAlgorithm
#field short PublisherThumbprintHashAlgorithm
#field int ImageHashOffset
#field int PublisherThumbprintOffset
#field short LoadCount
#field short OemNameSize
#field int OemNameOffset
#field byte Flags 8
#field short Padding
#endstruct
stdim st, DRIVER_INFO_ENTRY ; NSTRUCT 変数を確保
st->ImageHashAlgorithm = 100
mes "ImageHashAlgorithm=" + st->ImageHashAlgorithm
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。