FILEPATHS_SIGNERINFO_A
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Target | LPSTR | 8/4 | +0 | +0 | ターゲット ファイルへのパスです。 | ||||||||||||||
| Source | LPSTR | 8/4 | +8 | +4 | ソース ファイルへのパスです。このメンバーは、 FILEPATHS 構造体をファイルの削除操作で使用する場合には使用されません。 | ||||||||||||||
| Win32Error | DWORD | 4 | +16 | +8 | エラーが発生した場合、このメンバーは システム エラー コード です。エラーが発生していない場合は NO_ERROR になります。 | ||||||||||||||
| Flags | DWORD | 4 | +20 | +12 | FILEPATHS_SIGNERINFO 構造体と共に送信される通知によって内容が異なる追加情報です。 SPFILENOTIFY_COPYERROR 通知の場合、Flags はダイアログ ボックスの動作を指定し、次のいずれかの値になります。
SPFILENOTIFY_FILEOPDELAYED 通知の場合、Flags は遅延されたファイル操作の種類を指定し、次のいずれかの値になります。
| ||||||||||||||
| DigitalSigner | LPSTR | 8/4 | +24 | +16 | ファイルのデジタル署名者です。 | ||||||||||||||
| Version | LPSTR | 8/4 | +32 | +20 | ファイルのバージョンです。 | ||||||||||||||
| CatalogFile | LPSTR | 8/4 | +40 | +24 | カタログ ファイルです。 |
公式ドキュメント
FILEPATHS_SINGNERINFO 構造体は、ソースとターゲットのパス情報、およびファイルの署名情報を格納します。セットアップ関数は、コールバック ルーチンに送信するいくつかの通知において、 FILEPATHS_SIGNERINFO をパラメーターとして渡します。詳細については、 Notifications を参照してください。
解説(Remarks)
setupapi.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版と Unicode 版を自動的に選択するエイリアスとして FILEPATHS_SIGNERINFO を定義しています。エンコード中立のエイリアスと、エンコード中立でないコードを混在させて使用すると、不整合が生じてコンパイル エラーや実行時エラーの原因になることがあります。詳細については、Conventions for Function Prototypes を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// FILEPATHS_SIGNERINFO_A (x64 48 / x86 28 バイト)
#pragma pack(push, 1)
typedef struct FILEPATHS_SIGNERINFO_A {
LPSTR Target;
LPSTR Source;
DWORD Win32Error;
DWORD Flags;
LPSTR DigitalSigner;
LPSTR Version;
LPSTR CatalogFile;
} FILEPATHS_SIGNERINFO_A;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct FILEPATHS_SIGNERINFO_A
{
public IntPtr Target;
public IntPtr Source;
public uint Win32Error;
public uint Flags;
public IntPtr DigitalSigner;
public IntPtr Version;
public IntPtr CatalogFile;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure FILEPATHS_SIGNERINFO_A
Public Target As IntPtr
Public Source As IntPtr
Public Win32Error As UInteger
Public Flags As UInteger
Public DigitalSigner As IntPtr
Public Version As IntPtr
Public CatalogFile As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class FILEPATHS_SIGNERINFO_A(ctypes.Structure):
_pack_ = 1
_fields_ = [
("Target", ctypes.c_void_p),
("Source", ctypes.c_void_p),
("Win32Error", wintypes.DWORD),
("Flags", wintypes.DWORD),
("DigitalSigner", ctypes.c_void_p),
("Version", ctypes.c_void_p),
("CatalogFile", ctypes.c_void_p),
]#[repr(C, packed(1))]
pub struct FILEPATHS_SIGNERINFO_A {
pub Target: *mut core::ffi::c_void,
pub Source: *mut core::ffi::c_void,
pub Win32Error: u32,
pub Flags: u32,
pub DigitalSigner: *mut core::ffi::c_void,
pub Version: *mut core::ffi::c_void,
pub CatalogFile: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type FILEPATHS_SIGNERINFO_A struct {
Target uintptr
Source uintptr
Win32Error uint32
Flags uint32
DigitalSigner uintptr
Version uintptr
CatalogFile uintptr
}type
FILEPATHS_SIGNERINFO_A = packed record
Target: Pointer;
Source: Pointer;
Win32Error: DWORD;
Flags: DWORD;
DigitalSigner: Pointer;
Version: Pointer;
CatalogFile: Pointer;
end;const FILEPATHS_SIGNERINFO_A = extern struct {
Target: ?*anyopaque,
Source: ?*anyopaque,
Win32Error: u32,
Flags: u32,
DigitalSigner: ?*anyopaque,
Version: ?*anyopaque,
CatalogFile: ?*anyopaque,
};type
FILEPATHS_SIGNERINFO_A {.packed.} = object
Target: pointer
Source: pointer
Win32Error: uint32
Flags: uint32
DigitalSigner: pointer
Version: pointer
CatalogFile: pointeralign(1)
struct FILEPATHS_SIGNERINFO_A
{
void* Target;
void* Source;
uint Win32Error;
uint Flags;
void* DigitalSigner;
void* Version;
void* CatalogFile;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; FILEPATHS_SIGNERINFO_A サイズ: 28 バイト(x86)
dim st, 7 ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; Target : LPSTR (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; Source : LPSTR (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; Win32Error : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; Flags : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; DigitalSigner : LPSTR (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; Version : LPSTR (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; CatalogFile : LPSTR (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; FILEPATHS_SIGNERINFO_A サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; Target : LPSTR (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; Source : LPSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; Win32Error : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; Flags : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; DigitalSigner : LPSTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; Version : LPSTR (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; CatalogFile : LPSTR (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global FILEPATHS_SIGNERINFO_A, pack=1
#field intptr Target
#field intptr Source
#field int Win32Error
#field int Flags
#field intptr DigitalSigner
#field intptr Version
#field intptr CatalogFile
#endstruct
stdim st, FILEPATHS_SIGNERINFO_A ; NSTRUCT 変数を確保
st->Win32Error = 100
mes "Win32Error=" + st->Win32Error