| /** |
| * 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*/ |