From e3421d50fd1b1273e1d5758666c72e069a9597f9 Mon Sep 17 00:00:00 2001 From: Gijs Vermeulen Date: Sun, 13 Mar 2022 00:27:57 +0100 Subject: [PATCH] include: Add more Wait Chain Traversal definitions. Signed-off-by: Gijs Vermeulen Signed-off-by: Alexandre Julliard --- include/wct.h | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/include/wct.h b/include/wct.h index 0cef59d7174..6c239786916 100644 --- a/include/wct.h +++ b/include/wct.h @@ -19,9 +19,85 @@ #ifndef __WINE_WCT_H #define __WINE_WCT_H +#ifdef __cplusplus +extern "C" { +#endif + +#define WCT_MAX_NODE_COUNT 16 +#define WCT_OBJNAME_LENGTH 128 + +#define WCT_ASYNC_OPEN_FLAG 0x1 +#define WCTP_OPEN_ALL_FLAGS (WCT_ASYNC_OPEN_FLAG) + +#define WCT_OUT_OF_PROC_FLAG 0x1 +#define WCT_OUT_OF_PROC_COM_FLAG 0x2 +#define WCT_OUT_OF_PROC_CS_FLAG 0x4 +#define WCT_NETWORK_IO_FLAG 0x8 +#define WCTP_GETINFO_ALL_FLAGS (WCT_OUT_OF_PROC_FLAG|WCT_OUT_OF_PROC_COM_FLAG|WCT_OUT_OF_PROC_CS_FLAG) + +typedef enum _WCT_OBJECT_TYPE +{ + WctCriticalSectionType = 1, + WctSendMessageType, + WctMutexType, + WctAlpcType, + WctComType, + WctThreadWaitType, + WctProcessWaitType, + WctThreadType, + WctComActivationType, + WctUnknownType, + WctSocketIoType, + WctSmbIoType, + WctMaxType +} WCT_OBJECT_TYPE; + +typedef enum _WCT_OBJECT_STATUS +{ + WctStatusNoAccess = 1, + WctStatusRunning, + WctStatusBlocked, + WctStatusPidOnly, + WctStatusPidOnlyRpcss, + WctStatusOwned, + WctStatusNotOwned, + WctStatusAbandoned, + WctStatusUnknown, + WctStatusError, + WctStatusMax +} WCT_OBJECT_STATUS; + +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; + BOOL Alertable; + } LockObject; + struct { + DWORD ProcessId; + DWORD ThreadId; + DWORD WaitTime; + DWORD ContextSwitches; + } ThreadObject; + }; +} WAITCHAIN_NODE_INFO, *PWAITCHAIN_NODE_INFO; + +typedef LPVOID HWCT; +typedef VOID (CALLBACK *PWAITCHAINCALLBACK) (HWCT,DWORD_PTR,DWORD,LPDWORD,PWAITCHAIN_NODE_INFO,LPBOOL); typedef HRESULT (WINAPI *PCOGETCALLSTATE)(int,PULONG); typedef HRESULT (WINAPI *PCOGETACTIVATIONSTATE)(GUID,DWORD,DWORD*); +VOID WINAPI CloseThreadWaitChainSession(HWCT); +BOOL WINAPI GetThreadWaitChain(HWCT,DWORD_PTR,DWORD,DWORD,LPDWORD,PWAITCHAIN_NODE_INFO,LPBOOL); +HWCT WINAPI OpenThreadWaitChainSession(DWORD,PWAITCHAINCALLBACK); void WINAPI RegisterWaitChainCOMCallback(PCOGETCALLSTATE,PCOGETACTIVATIONSTATE); +#ifdef __cplusplus +} +#endif + #endif /* __WINE_WCT_H */