ホーム › System.Diagnostics.Debug.Extensions › DEBUG_PNP_TRIAGE_INFO
DEBUG_PNP_TRIAGE_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| SizeOfStruct | DWORD | 4 | +0 | +0 | この構造体のバイトサイズ。呼び出し前に設定する。 |
| Lock_Address | ULONGLONG | 8 | +8 | +8 | PnPロックオブジェクトのアドレス。 |
| Lock_ActiveCount | INT | 4 | +16 | +16 | ロックのアクティブカウント(符号付き)。 |
| Lock_ContentionCount | DWORD | 4 | +20 | +20 | ロックの競合発生回数。 |
| Lock_NumberOfExclusiveWaiters | DWORD | 4 | +24 | +24 | 排他取得を待機しているスレッド数。 |
| Lock_NumberOfSharedWaiters | DWORD | 4 | +28 | +28 | 共有取得を待機しているスレッド数。 |
| Lock_Flag | WORD | 2 | +32 | +32 | ロックの状態フラグ。 |
| TriagedThread | ULONGLONG | 8 | +40 | +40 | トリアージ対象スレッドのアドレス。 |
| ThreadCount | INT | 4 | +48 | +48 | 関連するスレッド数(符号付き)。 |
| TriagedThread_WaitTime | ULONGLONG | 8 | +56 | +56 | トリアージ対象スレッドの待機時間。 |
各言語での定義
#include <windows.h>
// DEBUG_PNP_TRIAGE_INFO (x64 64 / x86 64 バイト)
typedef struct DEBUG_PNP_TRIAGE_INFO {
DWORD SizeOfStruct;
ULONGLONG Lock_Address;
INT Lock_ActiveCount;
DWORD Lock_ContentionCount;
DWORD Lock_NumberOfExclusiveWaiters;
DWORD Lock_NumberOfSharedWaiters;
WORD Lock_Flag;
ULONGLONG TriagedThread;
INT ThreadCount;
ULONGLONG TriagedThread_WaitTime;
} DEBUG_PNP_TRIAGE_INFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DEBUG_PNP_TRIAGE_INFO
{
public uint SizeOfStruct;
public ulong Lock_Address;
public int Lock_ActiveCount;
public uint Lock_ContentionCount;
public uint Lock_NumberOfExclusiveWaiters;
public uint Lock_NumberOfSharedWaiters;
public ushort Lock_Flag;
public ulong TriagedThread;
public int ThreadCount;
public ulong TriagedThread_WaitTime;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DEBUG_PNP_TRIAGE_INFO
Public SizeOfStruct As UInteger
Public Lock_Address As ULong
Public Lock_ActiveCount As Integer
Public Lock_ContentionCount As UInteger
Public Lock_NumberOfExclusiveWaiters As UInteger
Public Lock_NumberOfSharedWaiters As UInteger
Public Lock_Flag As UShort
Public TriagedThread As ULong
Public ThreadCount As Integer
Public TriagedThread_WaitTime As ULong
End Structureimport ctypes
from ctypes import wintypes
class DEBUG_PNP_TRIAGE_INFO(ctypes.Structure):
_fields_ = [
("SizeOfStruct", wintypes.DWORD),
("Lock_Address", ctypes.c_ulonglong),
("Lock_ActiveCount", ctypes.c_int),
("Lock_ContentionCount", wintypes.DWORD),
("Lock_NumberOfExclusiveWaiters", wintypes.DWORD),
("Lock_NumberOfSharedWaiters", wintypes.DWORD),
("Lock_Flag", ctypes.c_ushort),
("TriagedThread", ctypes.c_ulonglong),
("ThreadCount", ctypes.c_int),
("TriagedThread_WaitTime", ctypes.c_ulonglong),
]#[repr(C)]
pub struct DEBUG_PNP_TRIAGE_INFO {
pub SizeOfStruct: u32,
pub Lock_Address: u64,
pub Lock_ActiveCount: i32,
pub Lock_ContentionCount: u32,
pub Lock_NumberOfExclusiveWaiters: u32,
pub Lock_NumberOfSharedWaiters: u32,
pub Lock_Flag: u16,
pub TriagedThread: u64,
pub ThreadCount: i32,
pub TriagedThread_WaitTime: u64,
}import "golang.org/x/sys/windows"
type DEBUG_PNP_TRIAGE_INFO struct {
SizeOfStruct uint32
Lock_Address uint64
Lock_ActiveCount int32
Lock_ContentionCount uint32
Lock_NumberOfExclusiveWaiters uint32
Lock_NumberOfSharedWaiters uint32
Lock_Flag uint16
TriagedThread uint64
ThreadCount int32
TriagedThread_WaitTime uint64
}type
DEBUG_PNP_TRIAGE_INFO = record
SizeOfStruct: DWORD;
Lock_Address: UInt64;
Lock_ActiveCount: Integer;
Lock_ContentionCount: DWORD;
Lock_NumberOfExclusiveWaiters: DWORD;
Lock_NumberOfSharedWaiters: DWORD;
Lock_Flag: Word;
TriagedThread: UInt64;
ThreadCount: Integer;
TriagedThread_WaitTime: UInt64;
end;const DEBUG_PNP_TRIAGE_INFO = extern struct {
SizeOfStruct: u32,
Lock_Address: u64,
Lock_ActiveCount: i32,
Lock_ContentionCount: u32,
Lock_NumberOfExclusiveWaiters: u32,
Lock_NumberOfSharedWaiters: u32,
Lock_Flag: u16,
TriagedThread: u64,
ThreadCount: i32,
TriagedThread_WaitTime: u64,
};type
DEBUG_PNP_TRIAGE_INFO {.bycopy.} = object
SizeOfStruct: uint32
Lock_Address: uint64
Lock_ActiveCount: int32
Lock_ContentionCount: uint32
Lock_NumberOfExclusiveWaiters: uint32
Lock_NumberOfSharedWaiters: uint32
Lock_Flag: uint16
TriagedThread: uint64
ThreadCount: int32
TriagedThread_WaitTime: uint64struct DEBUG_PNP_TRIAGE_INFO
{
uint SizeOfStruct;
ulong Lock_Address;
int Lock_ActiveCount;
uint Lock_ContentionCount;
uint Lock_NumberOfExclusiveWaiters;
uint Lock_NumberOfSharedWaiters;
ushort Lock_Flag;
ulong TriagedThread;
int ThreadCount;
ulong TriagedThread_WaitTime;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DEBUG_PNP_TRIAGE_INFO サイズ: 64 バイト(x64)
dim st, 16 ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; SizeOfStruct : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; Lock_Address : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; Lock_ActiveCount : INT (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; Lock_ContentionCount : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; Lock_NumberOfExclusiveWaiters : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; Lock_NumberOfSharedWaiters : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; Lock_Flag : WORD (+32, 2byte) wpoke st,32,値 / 値 = wpeek(st,32)
; TriagedThread : ULONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ThreadCount : INT (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; TriagedThread_WaitTime : ULONGLONG (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DEBUG_PNP_TRIAGE_INFO
#field int SizeOfStruct
#field int64 Lock_Address
#field int Lock_ActiveCount
#field int Lock_ContentionCount
#field int Lock_NumberOfExclusiveWaiters
#field int Lock_NumberOfSharedWaiters
#field short Lock_Flag
#field int64 TriagedThread
#field int ThreadCount
#field int64 TriagedThread_WaitTime
#endstruct
stdim st, DEBUG_PNP_TRIAGE_INFO ; NSTRUCT 変数を確保
st->SizeOfStruct = 100
mes "SizeOfStruct=" + st->SizeOfStruct