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

TdhFormatProperty

関数
イベントプロパティの値を表示用の文字列に書式化する。
DLLTDH.dll呼出規約winapi対応OSWindows 7 以降

シグネチャ

// TDH.dll
#include <windows.h>

DWORD TdhFormatProperty(
    TRACE_EVENT_INFO* EventInfo,
    EVENT_MAP_INFO* MapInfo,   // optional
    DWORD PointerSize,
    WORD PropertyInType,
    WORD PropertyOutType,
    WORD PropertyLength,
    WORD UserDataLength,
    BYTE* UserData,
    DWORD* BufferSize,
    LPWSTR Buffer,   // optional
    WORD* UserDataConsumed
);

パラメーター

名前方向説明
EventInfoTRACE_EVENT_INFO*inプロパティ定義を含むTRACE_EVENT_INFO構造体。
MapInfoEVENT_MAP_INFO*inoptional値マップ(列挙名)情報を示すEVENT_MAP_INFO。NULL可。
PointerSizeDWORDinイベント生成元のポインタサイズ(4または8バイト)。
PropertyInTypeWORDinプロパティの入力型を示すTDH_IN_TYPE値。
PropertyOutTypeWORDinプロパティの出力型を示すTDH_OUT_TYPE値。
PropertyLengthWORDinプロパティの長さ(バイトまたは要素数)。
UserDataLengthWORDin残りのユーザーデータのサイズ(バイト)。
UserDataBYTE*in整形元となる生のプロパティデータへのポインタ。
BufferSizeDWORD*inout入力でBufferサイズ、出力で必要サイズ(バイト)を受け取るポインタ。
BufferLPWSTRoutoptional整形済みの文字列を受け取るUnicode出力バッファ。
UserDataConsumedWORD*out今回消費したユーザーデータのバイト数を受け取る出力ポインタ。

戻り値の型: DWORD

各言語での呼び出し定義

// TDH.dll
#include <windows.h>

DWORD TdhFormatProperty(
    TRACE_EVENT_INFO* EventInfo,
    EVENT_MAP_INFO* MapInfo,   // optional
    DWORD PointerSize,
    WORD PropertyInType,
    WORD PropertyOutType,
    WORD PropertyLength,
    WORD UserDataLength,
    BYTE* UserData,
    DWORD* BufferSize,
    LPWSTR Buffer,   // optional
    WORD* UserDataConsumed
);
[DllImport("TDH.dll", ExactSpelling = true)]
static extern uint TdhFormatProperty(
    IntPtr EventInfo,   // TRACE_EVENT_INFO*
    IntPtr MapInfo,   // EVENT_MAP_INFO* optional
    uint PointerSize,   // DWORD
    ushort PropertyInType,   // WORD
    ushort PropertyOutType,   // WORD
    ushort PropertyLength,   // WORD
    ushort UserDataLength,   // WORD
    IntPtr UserData,   // BYTE*
    ref uint BufferSize,   // DWORD* in/out
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder Buffer,   // LPWSTR optional, out
    out ushort UserDataConsumed   // WORD* out
);
<DllImport("TDH.dll", ExactSpelling:=True)>
Public Shared Function TdhFormatProperty(
    EventInfo As IntPtr,   ' TRACE_EVENT_INFO*
    MapInfo As IntPtr,   ' EVENT_MAP_INFO* optional
    PointerSize As UInteger,   ' DWORD
    PropertyInType As UShort,   ' WORD
    PropertyOutType As UShort,   ' WORD
    PropertyLength As UShort,   ' WORD
    UserDataLength As UShort,   ' WORD
    UserData As IntPtr,   ' BYTE*
    ByRef BufferSize As UInteger,   ' DWORD* in/out
    <MarshalAs(UnmanagedType.LPWStr)> Buffer As System.Text.StringBuilder,   ' LPWSTR optional, out
    <Out> ByRef UserDataConsumed As UShort   ' WORD* out
) As UInteger
End Function
' EventInfo : TRACE_EVENT_INFO*
' MapInfo : EVENT_MAP_INFO* optional
' PointerSize : DWORD
' PropertyInType : WORD
' PropertyOutType : WORD
' PropertyLength : WORD
' UserDataLength : WORD
' UserData : BYTE*
' BufferSize : DWORD* in/out
' Buffer : LPWSTR optional, out
' UserDataConsumed : WORD* out
Declare PtrSafe Function TdhFormatProperty Lib "tdh" ( _
    ByVal EventInfo As LongPtr, _
    ByVal MapInfo As LongPtr, _
    ByVal PointerSize As Long, _
    ByVal PropertyInType As Integer, _
    ByVal PropertyOutType As Integer, _
    ByVal PropertyLength As Integer, _
    ByVal UserDataLength As Integer, _
    ByVal UserData As LongPtr, _
    ByRef BufferSize As Long, _
    ByVal Buffer As LongPtr, _
    ByRef UserDataConsumed As Integer) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

TdhFormatProperty = ctypes.windll.tdh.TdhFormatProperty
TdhFormatProperty.restype = wintypes.DWORD
TdhFormatProperty.argtypes = [
    ctypes.c_void_p,  # EventInfo : TRACE_EVENT_INFO*
    ctypes.c_void_p,  # MapInfo : EVENT_MAP_INFO* optional
    wintypes.DWORD,  # PointerSize : DWORD
    ctypes.c_ushort,  # PropertyInType : WORD
    ctypes.c_ushort,  # PropertyOutType : WORD
    ctypes.c_ushort,  # PropertyLength : WORD
    ctypes.c_ushort,  # UserDataLength : WORD
    ctypes.POINTER(ctypes.c_ubyte),  # UserData : BYTE*
    ctypes.POINTER(wintypes.DWORD),  # BufferSize : DWORD* in/out
    wintypes.LPWSTR,  # Buffer : LPWSTR optional, out
    ctypes.POINTER(ctypes.c_ushort),  # UserDataConsumed : WORD* out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('TDH.dll')
TdhFormatProperty = Fiddle::Function.new(
  lib['TdhFormatProperty'],
  [
    Fiddle::TYPE_VOIDP,  # EventInfo : TRACE_EVENT_INFO*
    Fiddle::TYPE_VOIDP,  # MapInfo : EVENT_MAP_INFO* optional
    -Fiddle::TYPE_INT,  # PointerSize : DWORD
    -Fiddle::TYPE_SHORT,  # PropertyInType : WORD
    -Fiddle::TYPE_SHORT,  # PropertyOutType : WORD
    -Fiddle::TYPE_SHORT,  # PropertyLength : WORD
    -Fiddle::TYPE_SHORT,  # UserDataLength : WORD
    Fiddle::TYPE_VOIDP,  # UserData : BYTE*
    Fiddle::TYPE_VOIDP,  # BufferSize : DWORD* in/out
    Fiddle::TYPE_VOIDP,  # Buffer : LPWSTR optional, out
    Fiddle::TYPE_VOIDP,  # UserDataConsumed : WORD* out
  ],
  -Fiddle::TYPE_INT)
#[link(name = "tdh")]
extern "system" {
    fn TdhFormatProperty(
        EventInfo: *mut TRACE_EVENT_INFO,  // TRACE_EVENT_INFO*
        MapInfo: *mut EVENT_MAP_INFO,  // EVENT_MAP_INFO* optional
        PointerSize: u32,  // DWORD
        PropertyInType: u16,  // WORD
        PropertyOutType: u16,  // WORD
        PropertyLength: u16,  // WORD
        UserDataLength: u16,  // WORD
        UserData: *mut u8,  // BYTE*
        BufferSize: *mut u32,  // DWORD* in/out
        Buffer: *mut u16,  // LPWSTR optional, out
        UserDataConsumed: *mut u16  // WORD* out
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("TDH.dll")]
public static extern uint TdhFormatProperty(IntPtr EventInfo, IntPtr MapInfo, uint PointerSize, ushort PropertyInType, ushort PropertyOutType, ushort PropertyLength, ushort UserDataLength, IntPtr UserData, ref uint BufferSize, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder Buffer, out ushort UserDataConsumed);
"@
$api = Add-Type -MemberDefinition $sig -Name 'TDH_TdhFormatProperty' -Namespace Win32 -PassThru
# $api::TdhFormatProperty(EventInfo, MapInfo, PointerSize, PropertyInType, PropertyOutType, PropertyLength, UserDataLength, UserData, BufferSize, Buffer, UserDataConsumed)
#uselib "TDH.dll"
#func global TdhFormatProperty "TdhFormatProperty" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; TdhFormatProperty varptr(EventInfo), varptr(MapInfo), PointerSize, PropertyInType, PropertyOutType, PropertyLength, UserDataLength, varptr(UserData), varptr(BufferSize), varptr(Buffer), varptr(UserDataConsumed)   ; 戻り値は stat
; EventInfo : TRACE_EVENT_INFO* -> "sptr"
; MapInfo : EVENT_MAP_INFO* optional -> "sptr"
; PointerSize : DWORD -> "sptr"
; PropertyInType : WORD -> "sptr"
; PropertyOutType : WORD -> "sptr"
; PropertyLength : WORD -> "sptr"
; UserDataLength : WORD -> "sptr"
; UserData : BYTE* -> "sptr"
; BufferSize : DWORD* in/out -> "sptr"
; Buffer : LPWSTR optional, out -> "sptr"
; UserDataConsumed : WORD* out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "TDH.dll"
#cfunc global TdhFormatProperty "TdhFormatProperty" var, var, int, int, int, int, int, var, var, var, var
; res = TdhFormatProperty(EventInfo, MapInfo, PointerSize, PropertyInType, PropertyOutType, PropertyLength, UserDataLength, UserData, BufferSize, Buffer, UserDataConsumed)
; EventInfo : TRACE_EVENT_INFO* -> "var"
; MapInfo : EVENT_MAP_INFO* optional -> "var"
; PointerSize : DWORD -> "int"
; PropertyInType : WORD -> "int"
; PropertyOutType : WORD -> "int"
; PropertyLength : WORD -> "int"
; UserDataLength : WORD -> "int"
; UserData : BYTE* -> "var"
; BufferSize : DWORD* in/out -> "var"
; Buffer : LPWSTR optional, out -> "var"
; UserDataConsumed : WORD* out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; DWORD TdhFormatProperty(TRACE_EVENT_INFO* EventInfo, EVENT_MAP_INFO* MapInfo, DWORD PointerSize, WORD PropertyInType, WORD PropertyOutType, WORD PropertyLength, WORD UserDataLength, BYTE* UserData, DWORD* BufferSize, LPWSTR Buffer, WORD* UserDataConsumed)
#uselib "TDH.dll"
#cfunc global TdhFormatProperty "TdhFormatProperty" var, var, int, int, int, int, int, var, var, var, var
; res = TdhFormatProperty(EventInfo, MapInfo, PointerSize, PropertyInType, PropertyOutType, PropertyLength, UserDataLength, UserData, BufferSize, Buffer, UserDataConsumed)
; EventInfo : TRACE_EVENT_INFO* -> "var"
; MapInfo : EVENT_MAP_INFO* optional -> "var"
; PointerSize : DWORD -> "int"
; PropertyInType : WORD -> "int"
; PropertyOutType : WORD -> "int"
; PropertyLength : WORD -> "int"
; UserDataLength : WORD -> "int"
; UserData : BYTE* -> "var"
; BufferSize : DWORD* in/out -> "var"
; Buffer : LPWSTR optional, out -> "var"
; UserDataConsumed : WORD* out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	tdh = windows.NewLazySystemDLL("TDH.dll")
	procTdhFormatProperty = tdh.NewProc("TdhFormatProperty")
)

// EventInfo (TRACE_EVENT_INFO*), MapInfo (EVENT_MAP_INFO* optional), PointerSize (DWORD), PropertyInType (WORD), PropertyOutType (WORD), PropertyLength (WORD), UserDataLength (WORD), UserData (BYTE*), BufferSize (DWORD* in/out), Buffer (LPWSTR optional, out), UserDataConsumed (WORD* out)
r1, _, err := procTdhFormatProperty.Call(
	uintptr(EventInfo),
	uintptr(MapInfo),
	uintptr(PointerSize),
	uintptr(PropertyInType),
	uintptr(PropertyOutType),
	uintptr(PropertyLength),
	uintptr(UserDataLength),
	uintptr(UserData),
	uintptr(BufferSize),
	uintptr(Buffer),
	uintptr(UserDataConsumed),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // DWORD
function TdhFormatProperty(
  EventInfo: Pointer;   // TRACE_EVENT_INFO*
  MapInfo: Pointer;   // EVENT_MAP_INFO* optional
  PointerSize: DWORD;   // DWORD
  PropertyInType: Word;   // WORD
  PropertyOutType: Word;   // WORD
  PropertyLength: Word;   // WORD
  UserDataLength: Word;   // WORD
  UserData: Pointer;   // BYTE*
  BufferSize: Pointer;   // DWORD* in/out
  Buffer: PWideChar;   // LPWSTR optional, out
  UserDataConsumed: Pointer   // WORD* out
): DWORD; stdcall;
  external 'TDH.dll' name 'TdhFormatProperty';
result := DllCall("TDH\TdhFormatProperty"
    , "Ptr", EventInfo   ; TRACE_EVENT_INFO*
    , "Ptr", MapInfo   ; EVENT_MAP_INFO* optional
    , "UInt", PointerSize   ; DWORD
    , "UShort", PropertyInType   ; WORD
    , "UShort", PropertyOutType   ; WORD
    , "UShort", PropertyLength   ; WORD
    , "UShort", UserDataLength   ; WORD
    , "Ptr", UserData   ; BYTE*
    , "Ptr", BufferSize   ; DWORD* in/out
    , "Ptr", Buffer   ; LPWSTR optional, out
    , "Ptr", UserDataConsumed   ; WORD* out
    , "UInt")   ; return: DWORD
●TdhFormatProperty(EventInfo, MapInfo, PointerSize, PropertyInType, PropertyOutType, PropertyLength, UserDataLength, UserData, BufferSize, Buffer, UserDataConsumed) = DLL("TDH.dll", "dword TdhFormatProperty(void*, void*, dword, int, int, int, int, void*, void*, char*, void*)")
# 呼び出し: TdhFormatProperty(EventInfo, MapInfo, PointerSize, PropertyInType, PropertyOutType, PropertyLength, UserDataLength, UserData, BufferSize, Buffer, UserDataConsumed)
# EventInfo : TRACE_EVENT_INFO* -> "void*"
# MapInfo : EVENT_MAP_INFO* optional -> "void*"
# PointerSize : DWORD -> "dword"
# PropertyInType : WORD -> "int"
# PropertyOutType : WORD -> "int"
# PropertyLength : WORD -> "int"
# UserDataLength : WORD -> "int"
# UserData : BYTE* -> "void*"
# BufferSize : DWORD* in/out -> "void*"
# Buffer : LPWSTR optional, out -> "char*"
# UserDataConsumed : WORD* out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。