xpmgr/BuildTools/Include/wct.h

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