Win32 API 日本語リファレンス
ホームSystem.Diagnostics.ClrProfiling › COR_PRF_ASSEMBLY_REFERENCE_INFO

COR_PRF_ASSEMBLY_REFERENCE_INFO

構造体
サイズx64: 48 バイト / x86: 28 バイト

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

フィールド

フィールドサイズx64x86説明
pbPublicKeyOrTokenvoid*8/4+0+0アセンブリの公開鍵または公開鍵トークンを指すポインタ。トークンか公開鍵かはdwAssemblyRefFlagsで判別する。
cbPublicKeyOrTokenDWORD4+8+4pbPublicKeyOrTokenが指すデータのバイト長を表す。
szNameLPWSTR8/4+16+8参照先アセンブリの名前を表すワイド文字列。
pMetaDataASSEMBLYMETADATA*8/4+24+12アセンブリのバージョン・カルチャなどを保持するASSEMBLYMETADATA構造体へのポインタ。
pbHashValuevoid*8/4+32+16アセンブリのハッシュ値を格納したバッファへのポインタ。不要ならNULL可。
cbHashValueDWORD4+40+20pbHashValueが指すハッシュ値のバイト長を表す。
dwAssemblyRefFlagsDWORD4+44+24アセンブリ参照のフラグ(CorAssemblyFlags)。公開鍵かトークンかなどの属性を示す。

各言語での定義

#include <windows.h>

// COR_PRF_ASSEMBLY_REFERENCE_INFO  (x64 48 / x86 28 バイト)
typedef struct COR_PRF_ASSEMBLY_REFERENCE_INFO {
    void* pbPublicKeyOrToken;
    DWORD cbPublicKeyOrToken;
    LPWSTR szName;
    ASSEMBLYMETADATA* pMetaData;
    void* pbHashValue;
    DWORD cbHashValue;
    DWORD dwAssemblyRefFlags;
} COR_PRF_ASSEMBLY_REFERENCE_INFO;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct COR_PRF_ASSEMBLY_REFERENCE_INFO
{
    public IntPtr pbPublicKeyOrToken;
    public uint cbPublicKeyOrToken;
    public IntPtr szName;
    public IntPtr pMetaData;
    public IntPtr pbHashValue;
    public uint cbHashValue;
    public uint dwAssemblyRefFlags;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure COR_PRF_ASSEMBLY_REFERENCE_INFO
    Public pbPublicKeyOrToken As IntPtr
    Public cbPublicKeyOrToken As UInteger
    Public szName As IntPtr
    Public pMetaData As IntPtr
    Public pbHashValue As IntPtr
    Public cbHashValue As UInteger
    Public dwAssemblyRefFlags As UInteger
End Structure
import ctypes
from ctypes import wintypes

class COR_PRF_ASSEMBLY_REFERENCE_INFO(ctypes.Structure):
    _fields_ = [
        ("pbPublicKeyOrToken", ctypes.c_void_p),
        ("cbPublicKeyOrToken", wintypes.DWORD),
        ("szName", ctypes.c_void_p),
        ("pMetaData", ctypes.c_void_p),
        ("pbHashValue", ctypes.c_void_p),
        ("cbHashValue", wintypes.DWORD),
        ("dwAssemblyRefFlags", wintypes.DWORD),
    ]
#[repr(C)]
pub struct COR_PRF_ASSEMBLY_REFERENCE_INFO {
    pub pbPublicKeyOrToken: *mut core::ffi::c_void,
    pub cbPublicKeyOrToken: u32,
    pub szName: *mut core::ffi::c_void,
    pub pMetaData: *mut core::ffi::c_void,
    pub pbHashValue: *mut core::ffi::c_void,
    pub cbHashValue: u32,
    pub dwAssemblyRefFlags: u32,
}
import "golang.org/x/sys/windows"

type COR_PRF_ASSEMBLY_REFERENCE_INFO struct {
	pbPublicKeyOrToken uintptr
	cbPublicKeyOrToken uint32
	szName uintptr
	pMetaData uintptr
	pbHashValue uintptr
	cbHashValue uint32
	dwAssemblyRefFlags uint32
}
type
  COR_PRF_ASSEMBLY_REFERENCE_INFO = record
    pbPublicKeyOrToken: Pointer;
    cbPublicKeyOrToken: DWORD;
    szName: Pointer;
    pMetaData: Pointer;
    pbHashValue: Pointer;
    cbHashValue: DWORD;
    dwAssemblyRefFlags: DWORD;
  end;
const COR_PRF_ASSEMBLY_REFERENCE_INFO = extern struct {
    pbPublicKeyOrToken: ?*anyopaque,
    cbPublicKeyOrToken: u32,
    szName: ?*anyopaque,
    pMetaData: ?*anyopaque,
    pbHashValue: ?*anyopaque,
    cbHashValue: u32,
    dwAssemblyRefFlags: u32,
};
type
  COR_PRF_ASSEMBLY_REFERENCE_INFO {.bycopy.} = object
    pbPublicKeyOrToken: pointer
    cbPublicKeyOrToken: uint32
    szName: pointer
    pMetaData: pointer
    pbHashValue: pointer
    cbHashValue: uint32
    dwAssemblyRefFlags: uint32
struct COR_PRF_ASSEMBLY_REFERENCE_INFO
{
    void* pbPublicKeyOrToken;
    uint cbPublicKeyOrToken;
    void* szName;
    void* pMetaData;
    void* pbHashValue;
    uint cbHashValue;
    uint dwAssemblyRefFlags;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; COR_PRF_ASSEMBLY_REFERENCE_INFO サイズ: 28 バイト(x86)
dim st, 7    ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; pbPublicKeyOrToken : void* (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; cbPublicKeyOrToken : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; szName : LPWSTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pMetaData : ASSEMBLYMETADATA* (+12, 4byte)  varptr(st)+12 を基点に操作(4byte:入れ子/配列)
; pbHashValue : void* (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; cbHashValue : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwAssemblyRefFlags : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; COR_PRF_ASSEMBLY_REFERENCE_INFO サイズ: 48 バイト(x64)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; pbPublicKeyOrToken : void* (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; cbPublicKeyOrToken : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; szName : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pMetaData : ASSEMBLYMETADATA* (+24, 8byte)  varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; pbHashValue : void* (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; cbHashValue : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; dwAssemblyRefFlags : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global COR_PRF_ASSEMBLY_REFERENCE_INFO
    #field intptr pbPublicKeyOrToken
    #field int cbPublicKeyOrToken
    #field intptr szName
    #field intptr pMetaData
    #field intptr pbHashValue
    #field int cbHashValue
    #field int dwAssemblyRefFlags
#endstruct

stdim st, COR_PRF_ASSEMBLY_REFERENCE_INFO        ; NSTRUCT 変数を確保
st->cbPublicKeyOrToken = 100
mes "cbPublicKeyOrToken=" + st->cbPublicKeyOrToken