ホーム › System.Diagnostics.ClrProfiling › COR_PRF_ASSEMBLY_REFERENCE_INFO
COR_PRF_ASSEMBLY_REFERENCE_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| pbPublicKeyOrToken | void* | 8/4 | +0 | +0 | アセンブリの公開鍵または公開鍵トークンを指すポインタ。トークンか公開鍵かはdwAssemblyRefFlagsで判別する。 |
| cbPublicKeyOrToken | DWORD | 4 | +8 | +4 | pbPublicKeyOrTokenが指すデータのバイト長を表す。 |
| szName | LPWSTR | 8/4 | +16 | +8 | 参照先アセンブリの名前を表すワイド文字列。 |
| pMetaData | ASSEMBLYMETADATA* | 8/4 | +24 | +12 | アセンブリのバージョン・カルチャなどを保持するASSEMBLYMETADATA構造体へのポインタ。 |
| pbHashValue | void* | 8/4 | +32 | +16 | アセンブリのハッシュ値を格納したバッファへのポインタ。不要ならNULL可。 |
| cbHashValue | DWORD | 4 | +40 | +20 | pbHashValueが指すハッシュ値のバイト長を表す。 |
| dwAssemblyRefFlags | DWORD | 4 | +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 Structureimport 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: uint32struct 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