12#define LpcpGetMessageType(x) \
13 ((x)->u2.s2.Type &~ LPC_KERNELMODE_MESSAGE)
18#define LpcpReceiveWait(s, w) \
20 LPCTRACE(LPC_REPLY_DEBUG, "Wait: %p\n", s); \
21 Status = KeWaitForSingleObject(s, \
26 LPCTRACE(LPC_REPLY_DEBUG, "Wait done: %lx\n", Status); \
32#define LpcpReplyWait(s, w) \
34 LPCTRACE(LPC_SEND_DEBUG, "Wait: %p\n", s); \
35 Status = KeWaitForSingleObject(s, \
40 LPCTRACE(LPC_SEND_DEBUG, "Wait done: %lx\n", Status); \
41 if (Status == STATUS_USER_APC) \
44 if (KeReadStateSemaphore(s)) \
47 KeWaitForSingleObject(s, \
52 Status = STATUS_SUCCESS; \
60#define LpcpConnectWait(s, w) \
62 LPCTRACE(LPC_CONNECT_DEBUG, "Wait: %p\n", s); \
63 Status = KeWaitForSingleObject(s, \
68 LPCTRACE(LPC_CONNECT_DEBUG, "Wait done: %lx\n", Status);\
69 if (Status == STATUS_USER_APC) \
72 if (KeReadStateSemaphore(s)) \
75 KeWaitForSingleObject(s, \
80 Status = STATUS_SUCCESS; \
88#define LpcpCompleteWait(s) \
91 LPCTRACE(LPC_SEND_DEBUG, "Release: %p\n", s); \
92 KeReleaseSemaphore(s, 1, 1, FALSE); \
117 Message->Request.u2.ZeroInit = 0;
static const WCHAR Message[]
#define InitializeListHead(ListHead)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
#define LPCP_THREAD_FLAG_IS_PORT
#define LPCP_THREAD_FLAGS
PAGED_LOOKASIDE_LIST LpcpMessagesLookaside
FORCEINLINE PLPCP_PORT_OBJECT LpcpGetPortFromThread(IN PETHREAD Thread)
FORCEINLINE VOID LpcpSetPortToThread(IN PETHREAD Thread, IN PLPCP_PORT_OBJECT Port)
FORCEINLINE PLPCP_MESSAGE LpcpGetMessageFromThread(IN PETHREAD Thread)
FORCEINLINE PLPCP_DATA_INFO LpcpGetDataInfoFromMessage(PPORT_MESSAGE Message)
static __inline PLPCP_MESSAGE LpcpAllocateFromPortZone(VOID)
struct _LPCP_MESSAGE * PLPCP_MESSAGE