ホーム › System.Diagnostics.Debug.Extensions › DBG_THREAD_ATTRIBUTES
DBG_THREAD_ATTRIBUTES
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| ThreadIndex | DWORD | 4 | +0 | +0 | スレッドのインデックス番号。 |
| ProcessID | ULONGLONG | 8 | +8 | +8 | スレッドが属するプロセスのID。 |
| ThreadID | ULONGLONG | 8 | +16 | +16 | スレッドのID。 |
| AttributeBits | ULONGLONG | 8 | +24 | +24 | スレッドの各種属性を示すビットマスク。 |
| BoolBits | DWORD | 4 | +32 | +32 | ブール属性をまとめたビットフィールド。 |
| BlockedOnPID | ULONGLONG | 8 | +40 | +40 | ブロック原因となっているプロセスのID。なければ0。 |
| BlockedOnTID | ULONGLONG | 8 | +48 | +48 | ブロック原因となっているスレッドのID。なければ0。 |
| CritSecAddress | ULONGLONG | 8 | +56 | +56 | 待機しているクリティカルセクションのアドレス。 |
| Timeout_msec | DWORD | 4 | +64 | +64 | 待機のタイムアウト時間(ミリ秒)。 |
| StringData | CHAR | 100 | +68 | +68 | スレッドに関する説明文字列(ASCII)。 |
| SymName | CHAR | 100 | +168 | +168 | 関連するシンボル名(ASCII)。 |
各言語での定義
#include <windows.h>
// DBG_THREAD_ATTRIBUTES (x64 272 / x86 272 バイト)
typedef struct DBG_THREAD_ATTRIBUTES {
DWORD ThreadIndex;
ULONGLONG ProcessID;
ULONGLONG ThreadID;
ULONGLONG AttributeBits;
DWORD BoolBits;
ULONGLONG BlockedOnPID;
ULONGLONG BlockedOnTID;
ULONGLONG CritSecAddress;
DWORD Timeout_msec;
CHAR StringData[100];
CHAR SymName[100];
} DBG_THREAD_ATTRIBUTES;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DBG_THREAD_ATTRIBUTES
{
public uint ThreadIndex;
public ulong ProcessID;
public ulong ThreadID;
public ulong AttributeBits;
public uint BoolBits;
public ulong BlockedOnPID;
public ulong BlockedOnTID;
public ulong CritSecAddress;
public uint Timeout_msec;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)] public sbyte[] StringData;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)] public sbyte[] SymName;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DBG_THREAD_ATTRIBUTES
Public ThreadIndex As UInteger
Public ProcessID As ULong
Public ThreadID As ULong
Public AttributeBits As ULong
Public BoolBits As UInteger
Public BlockedOnPID As ULong
Public BlockedOnTID As ULong
Public CritSecAddress As ULong
Public Timeout_msec As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=100)> Public StringData() As SByte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=100)> Public SymName() As SByte
End Structureimport ctypes
from ctypes import wintypes
class DBG_THREAD_ATTRIBUTES(ctypes.Structure):
_fields_ = [
("ThreadIndex", wintypes.DWORD),
("ProcessID", ctypes.c_ulonglong),
("ThreadID", ctypes.c_ulonglong),
("AttributeBits", ctypes.c_ulonglong),
("BoolBits", wintypes.DWORD),
("BlockedOnPID", ctypes.c_ulonglong),
("BlockedOnTID", ctypes.c_ulonglong),
("CritSecAddress", ctypes.c_ulonglong),
("Timeout_msec", wintypes.DWORD),
("StringData", ctypes.c_byte * 100),
("SymName", ctypes.c_byte * 100),
]#[repr(C)]
pub struct DBG_THREAD_ATTRIBUTES {
pub ThreadIndex: u32,
pub ProcessID: u64,
pub ThreadID: u64,
pub AttributeBits: u64,
pub BoolBits: u32,
pub BlockedOnPID: u64,
pub BlockedOnTID: u64,
pub CritSecAddress: u64,
pub Timeout_msec: u32,
pub StringData: [i8; 100],
pub SymName: [i8; 100],
}import "golang.org/x/sys/windows"
type DBG_THREAD_ATTRIBUTES struct {
ThreadIndex uint32
ProcessID uint64
ThreadID uint64
AttributeBits uint64
BoolBits uint32
BlockedOnPID uint64
BlockedOnTID uint64
CritSecAddress uint64
Timeout_msec uint32
StringData [100]int8
SymName [100]int8
}type
DBG_THREAD_ATTRIBUTES = record
ThreadIndex: DWORD;
ProcessID: UInt64;
ThreadID: UInt64;
AttributeBits: UInt64;
BoolBits: DWORD;
BlockedOnPID: UInt64;
BlockedOnTID: UInt64;
CritSecAddress: UInt64;
Timeout_msec: DWORD;
StringData: array[0..99] of Shortint;
SymName: array[0..99] of Shortint;
end;const DBG_THREAD_ATTRIBUTES = extern struct {
ThreadIndex: u32,
ProcessID: u64,
ThreadID: u64,
AttributeBits: u64,
BoolBits: u32,
BlockedOnPID: u64,
BlockedOnTID: u64,
CritSecAddress: u64,
Timeout_msec: u32,
StringData: [100]i8,
SymName: [100]i8,
};type
DBG_THREAD_ATTRIBUTES {.bycopy.} = object
ThreadIndex: uint32
ProcessID: uint64
ThreadID: uint64
AttributeBits: uint64
BoolBits: uint32
BlockedOnPID: uint64
BlockedOnTID: uint64
CritSecAddress: uint64
Timeout_msec: uint32
StringData: array[100, int8]
SymName: array[100, int8]struct DBG_THREAD_ATTRIBUTES
{
uint ThreadIndex;
ulong ProcessID;
ulong ThreadID;
ulong AttributeBits;
uint BoolBits;
ulong BlockedOnPID;
ulong BlockedOnTID;
ulong CritSecAddress;
uint Timeout_msec;
byte[100] StringData;
byte[100] SymName;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DBG_THREAD_ATTRIBUTES サイズ: 272 バイト(x64)
dim st, 68 ; 4byte整数×68(構造体サイズ 272 / 4 切り上げ)
; ThreadIndex : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; ProcessID : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; ThreadID : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; AttributeBits : ULONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; BoolBits : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; BlockedOnPID : ULONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; BlockedOnTID : ULONGLONG (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; CritSecAddress : ULONGLONG (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; Timeout_msec : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; StringData : CHAR (+68, 100byte) varptr(st)+68 を基点に操作(100byte:入れ子/配列)
; SymName : CHAR (+168, 100byte) varptr(st)+168 を基点に操作(100byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DBG_THREAD_ATTRIBUTES
#field int ThreadIndex
#field int64 ProcessID
#field int64 ThreadID
#field int64 AttributeBits
#field int BoolBits
#field int64 BlockedOnPID
#field int64 BlockedOnTID
#field int64 CritSecAddress
#field int Timeout_msec
#field byte StringData 100
#field byte SymName 100
#endstruct
stdim st, DBG_THREAD_ATTRIBUTES ; NSTRUCT 変数を確保
st->ThreadIndex = 100
mes "ThreadIndex=" + st->ThreadIndex