|  | /** | 
|  | * This file has no copyright assigned and is placed in the Public Domain. | 
|  | * This file is part of the w64 mingw-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*/ |