mirror of https://github.com/UMSKT/xpmgr.git
150 lines
3.2 KiB
C
150 lines
3.2 KiB
C
/*++
|
|
|
|
Copyright (c) 2004 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
wct.h
|
|
|
|
Abstract:
|
|
|
|
Private interfaces for thread wait chain traversal.
|
|
|
|
History:
|
|
|
|
12/01/2004 sdoll Created.
|
|
|
|
--*/
|
|
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
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, // ACCESS_DENIED for this object
|
|
WctStatusRunning, // Thread status
|
|
WctStatusBlocked, // Thread status
|
|
WctStatusPidOnly, // Thread status
|
|
WctStatusPidOnlyRpcss, // Thread status
|
|
WctStatusOwned, // Dispatcher object status
|
|
WctStatusNotOwned, // Dispatcher object status
|
|
WctStatusAbandoned, // Dispatcher object status
|
|
WctStatusUnknown, // All objects
|
|
WctStatusError, // All objects
|
|
WctStatusMax
|
|
} WCT_OBJECT_STATUS;
|
|
|
|
// Max. number of nodes in the wait chain
|
|
#define WCT_MAX_NODE_COUNT 16
|
|
|
|
#define WCT_OBJNAME_LENGTH 128
|
|
|
|
typedef struct _WAITCHAIN_NODE_INFO
|
|
{
|
|
WCT_OBJECT_TYPE ObjectType;
|
|
WCT_OBJECT_STATUS ObjectStatus;
|
|
|
|
union {
|
|
struct {
|
|
WCHAR ObjectName[WCT_OBJNAME_LENGTH];
|
|
LARGE_INTEGER Timeout; // Not implemented in v1
|
|
BOOL Alertable; // Not implemented in v1
|
|
} 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 WctHandle,
|
|
DWORD_PTR Context,
|
|
DWORD CallbackStatus,
|
|
LPDWORD NodeCount,
|
|
PWAITCHAIN_NODE_INFO NodeInfoArray,
|
|
LPBOOL IsCycle
|
|
);
|
|
|
|
#define WCT_ASYNC_OPEN_FLAG 0x1
|
|
#define WCTP_OPEN_ALL_FLAGS (WCT_ASYNC_OPEN_FLAG)
|
|
|
|
__checkReturn
|
|
WINADVAPI
|
|
HWCT WINAPI
|
|
OpenThreadWaitChainSession (
|
|
__in DWORD Flags,
|
|
__in_opt PWAITCHAINCALLBACK callback
|
|
);
|
|
|
|
WINADVAPI
|
|
VOID WINAPI
|
|
CloseThreadWaitChainSession (
|
|
__in HWCT WctHandle
|
|
);
|
|
|
|
#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)
|
|
|
|
__checkReturn
|
|
WINADVAPI
|
|
BOOL WINAPI
|
|
GetThreadWaitChain (
|
|
__in HWCT WctHandle,
|
|
__in_opt DWORD_PTR Context,
|
|
__in DWORD Flags,
|
|
__in DWORD ThreadId,
|
|
__inout LPDWORD NodeCount,
|
|
__out_ecount(*NodeCount) PWAITCHAIN_NODE_INFO NodeInfoArray,
|
|
__out LPBOOL IsCycle
|
|
);
|
|
|
|
typedef HRESULT (*PCOGETCALLSTATE)(int, PULONG);
|
|
typedef HRESULT (*PCOGETACTIVATIONSTATE)(GUID, DWORD, DWORD*);
|
|
|
|
WINADVAPI
|
|
VOID WINAPI
|
|
RegisterWaitChainCOMCallback (
|
|
__in PCOGETCALLSTATE CallStateCallback,
|
|
__in PCOGETACTIVATIONSTATE ActivationStateCallback
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|