Win32 API 日本語リファレンス
ホームSystem.SystemServices › DRIVER_INFO_ENTRY

DRIVER_INFO_ENTRY

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

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

フィールド

フィールドサイズx64x86説明
InternalNameCHAR32+0+0ドライバの内部名(CHAR配列)。
ImageHashAlgorithmWORD2+32+32イメージハッシュに使用したアルゴリズム識別子。
PublisherThumbprintHashAlgorithmWORD2+34+34発行者証明書サムプリントのハッシュアルゴリズム識別子。
ImageHashOffsetDWORD4+36+36イメージハッシュデータへのオフセット。
PublisherThumbprintOffsetDWORD4+40+40発行者サムプリントデータへのオフセット。
LoadCountWORD2+44+44ドライバの読み込み回数。
OemNameSizeWORD2+46+46OEM名のサイズをバイト単位で示す。
OemNameOffsetDWORD4+48+48OEM名データへのオフセット。
Flags_Flags_e__Union8/4+56+52ドライバ情報のフラグを保持する無名共用体。
PaddingWORD2+64+56アライメント調整用の埋め込みフィールド。

共用体: _Flags_e__Union x64 8B / x86 4B

フィールドサイズx64x86
Anonymous_Anonymous_e__Struct8/4+0+0
AsUInt16WORD2+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 Structure
import 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: uint16
struct 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 非対応)。必要に応じ手動でアクセス。