1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #ifndef _INC_WCT 7 #define _INC_WCT 8 #if (_WIN32_WINNT >= 0x0600) 9 10 #ifdef __cplusplus 11 extern "C" { 12 #endif 13 14 typedef LPVOID HWCT; 15 16 typedef enum _WCT_OBJECT_TYPE { 17 WctCriticalSectionType = 1, 18 WctSendMessageType, 19 WctMutexType, 20 WctAlpcType, 21 WctComType, 22 WctThreadWaitType, 23 WctProcessWaitType, 24 WctThreadType, 25 WctComActivationType, 26 WctUnknownType 27 } WCT_OBJECT_TYPE; 28 29 typedef enum _WCT_OBJECT_STATUS { 30 WctStatusNoAccess = 1, 31 WctStatusRunning, 32 WctStatusBlocked, 33 WctStatusPidOnly, 34 WctStatusPidOnlyRpcss, 35 WctStatusOwned, 36 WctStatusNotOwned, 37 WctStatusAbandoned, 38 WctStatusUnknown, 39 WctStatusError 40 } WCT_OBJECT_STATUS; 41 42 /* According to http://msdn.microsoft.com/en-us/magazine/cc163395.aspx 43 RealObjectName has 0x8 offset and TimeOutLowPart has 0x108 44 WCT_OBJNAME_LENGTH assumed to be 128 ((0x108-0x8)/sizeof (ushort) = 128) 45 */ 46 #define WCT_OBJNAME_LENGTH 128 47 48 typedef struct _WAITCHAIN_NODE_INFO { 49 WCT_OBJECT_TYPE ObjectType; 50 WCT_OBJECT_STATUS ObjectStatus; 51 __C89_NAMELESS union { 52 struct { 53 WCHAR ObjectName[WCT_OBJNAME_LENGTH]; 54 LARGE_INTEGER Timeout; 55 WINBOOL Alertable; 56 } LockObject; 57 struct { 58 DWORD ProcessId; 59 DWORD ThreadId; 60 DWORD WaitTime; 61 DWORD ContextSwitches; 62 } ThreadObject; 63 }; 64 } WAITCHAIN_NODE_INFO, *PWAITCHAIN_NODE_INFO; 65 66 typedef VOID (CALLBACK *PWAITCHAINCALLBACK)(HWCT WctHandle,DWORD_PTR Context,DWORD CallbackStatus,LPDWORD NodeCount,PWAITCHAIN_NODE_INFO NodeInfoArray,LPBOOL IsCycle); 67 68 HWCT WINAPI OpenThreadWaitChainSession(DWORD Flags,PWAITCHAINCALLBACK callback); 69 VOID WINAPI CloseThreadWaitChainSession(HWCT WctHandle); 70 WINBOOL WINAPI GetThreadWaitChain(HWCT WctHandle,DWORD_PTR Context,DWORD Flags,DWORD ThreadId,LPDWORD NodeCount,PWAITCHAIN_NODE_INFO NodeInfoArray,LPBOOL IsCycle); 71 72 /* Unknown Callbacks */ 73 typedef LPVOID (WINAPI *PCOGETCALLSTATE)(); 74 typedef LPVOID (WINAPI *PCOGETACTIVATIONSTATE)(); 75 76 VOID WINAPI RegisterWaitChainCOMCallback(PCOGETCALLSTATE CallStateCallback,PCOGETACTIVATIONSTATE ActivationStateCallback); 77 78 #ifdef __cplusplus 79 } 80 #endif 81 82 #endif /* (_WIN32_WINNT >= 0x0600) */ 83 #endif /*_INC_WCT*/ 84