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