CriticalSection オブジェクトは次のように定義されます。
typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;
としてRTL_CRITICAL_SECTION
定義された
typedef struct _RTL_CRITICAL_SECTION {
PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
LONG LockCount;
LONG RecursionCount;
HANDLE OwningThread; // from the thread's ClientId->UniqueThread
HANDLE LockSemaphore;
ULONG_PTR SpinCount; // force size on 64-bit systems when packed
} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
OwningThreadには、所有スレッドへのハンドルが含まれます。したがって、CriticalSection
データ構造を読み取るだけで、所有スレッドへのハンドルを取得できます。
DWORD WINAPI GetThreadId(_In_ HANDLE OwningThread);
所有スレッドの ID を返します。
ただし、OwningThread の定義には小さな問題があります。MSDNは、フィールドに実際にスレッド ID 自体が含まれていると報告しています。
あなたは使用することができます
GetThreadInformation(OwningThread,....);
スレッドの詳細を取得します。
Break Free of Code Deadlocks in Critical Sections Under Windows on MSDN は、このコンテキストで読む必要があります。特に、構造EntryCount/ContentionCount
内のフィールドは、RTL_CRITICAL_SECTION_DEBUG
ここでの質問に対する答えを与える可能性があります。