/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #ifndef _INC_WCT #define _INC_WCT #if (_WIN32_WINNT >= 0x0600) #ifdef __cplusplus extern "C" { #endif typedef LPVOID HWCT; typedef enum _WCT_OBJECT_TYPE { WctCriticalSectionType = 1, WctSendMessageType, WctMutexType, WctAlpcType, WctComType, WctThreadWaitType, WctProcessWaitType, WctThreadType, WctComActivationType, WctUnknownType } WCT_OBJECT_TYPE; typedef enum _WCT_OBJECT_STATUS { WctStatusNoAccess = 1, WctStatusRunning, WctStatusBlocked, WctStatusPidOnly, WctStatusPidOnlyRpcss, WctStatusOwned, WctStatusNotOwned, WctStatusAbandoned, WctStatusUnknown, WctStatusError } WCT_OBJECT_STATUS; /* According to http://msdn.microsoft.com/en-us/magazine/cc163395.aspx RealObjectName has 0x8 offset and TimeOutLowPart has 0x108 WCT_OBJNAME_LENGTH assumed to be 128 ((0x108-0x8)/sizeof (ushort) = 128) */ #define WCT_OBJNAME_LENGTH 128 typedef struct _WAITCHAIN_NODE_INFO { WCT_OBJECT_TYPE ObjectType; WCT_OBJECT_STATUS ObjectStatus; __C89_NAMELESS union { struct { WCHAR ObjectName[WCT_OBJNAME_LENGTH]; LARGE_INTEGER Timeout; WINBOOL Alertable; } LockObject; struct { DWORD ProcessId; DWORD ThreadId; DWORD WaitTime; DWORD ContextSwitches; } ThreadObject; }; } WAITCHAIN_NODE_INFO, *PWAITCHAIN_NODE_INFO; typedef VOID (CALLBACK *PWAITCHAINCALLBACK)(HWCT WctHandle,DWORD_PTR Context,DWORD CallbackStatus,LPDWORD NodeCount,PWAITCHAIN_NODE_INFO NodeInfoArray,LPBOOL IsCycle); HWCT WINAPI OpenThreadWaitChainSession(DWORD Flags,PWAITCHAINCALLBACK callback); VOID WINAPI CloseThreadWaitChainSession(HWCT WctHandle); WINBOOL WINAPI GetThreadWaitChain(HWCT WctHandle,DWORD_PTR Context,DWORD Flags,DWORD ThreadId,LPDWORD NodeCount,PWAITCHAIN_NODE_INFO NodeInfoArray,LPBOOL IsCycle); /* Unknown Callbacks */ typedef LPVOID (WINAPI *PCOGETCALLSTATE)(); typedef LPVOID (WINAPI *PCOGETACTIVATIONSTATE)(); VOID WINAPI RegisterWaitChainCOMCallback(PCOGETCALLSTATE CallStateCallback,PCOGETACTIVATIONSTATE ActivationStateCallback); #ifdef __cplusplus } #endif #endif /* (_WIN32_WINNT >= 0x0600) */ #endif /*_INC_WCT*/