46{
51 ULONG ConnectionInfoLength;
60
63 "Context: %p. Message: %p. Accept: %lx. Views: %p/%p\n",
64 PortContext,
66 AcceptConnection,
67 ClientView,
68 ServerView);
69
70
72 {
74 {
75
77
78
81 ConnectionInfoLength = CapturedReplyMessage.u1.s1.DataLength;
82
83
85
86
87
88
89 if (ServerView)
90 {
92 CapturedServerView = *(
volatile PORT_VIEW*)ServerView;
93
94
95 if (CapturedServerView.
Length !=
sizeof(CapturedServerView))
96 {
97
99 }
100 }
101
102
103 if (ClientView)
104 {
106
107
109 {
110
112 }
113 }
114 }
116 {
117
119 }
121 }
122 else
123 {
125 ConnectionInfoLength = CapturedReplyMessage.u1.s1.DataLength;
126
127
128 if (ServerView)
129 {
130
131 if (ServerView->Length != sizeof(*ServerView))
132 {
133
135 }
136 CapturedServerView = *ServerView;
137 }
138
139
140 if (ClientView)
141 {
142
143 if (ClientView->Length != sizeof(*ClientView))
144 {
145
147 }
148 }
149 }
150
151
153 &ClientProcess,
156
157
159
160
164 {
165
170 }
171
172
175
176
179
180
182 {
183
188 }
189
190
193
194
197
198
200 {
201
203 }
204
205
206 Message->Request.u1.s1.DataLength = (
CSHORT)ConnectionInfoLength +
209 Message->Request.u1.s1.DataLength;
210
211
213 Message->Request.u2.s2.DataInfoOffset = 0;
216 Message->Request.ClientViewSize = 0;
217
219 {
221 }
223 {
226 }
228
229
230 if (!AcceptConnection)
231 {
232 DPRINT1(
"LPC connection was refused\n");
234 }
235
236
243 0,
244 0,
247
248
255
256
258
259
263
264
267
268
273
274
275 if (ClientSectionToMap)
276 {
277
279
280
284 0,
285 0,
289 0,
291
292
295 {
296
298 ClientSectionBase;
299
300
303 }
304 else
305 {
306
309 DPRINT1(
"View base, offset, size: %p %lx %p\n",
314 }
315 }
316
317
318 if (ServerView)
319 {
320
323 }
324
325
327
328
332 0,
336 {
337
340 }
341
342
344 {
345
346 if (ClientView)
347 {
348
351 }
352
353
355 }
357 {
358
363 }
365
367 "Handle: %p. Messages: %p/%p. Ports: %p/%p/%p\n",
370 ConnectMessage,
373 ConnectionPort);
374
375
378
379
383
384
386
387
389
391
393
394
396 {
403 }
404
405
407 "Status: %lx. Thread: %p. Process: [%.16s]\n",
414}
static const INTERNET_PORT ServerPort
UINT CALLBACK ClientThread(_Inout_ PVOID Parameter)
VOID NTAPI LpcpPrepareToWakeClient(IN PETHREAD Thread)
#define NT_SUCCESS(StatCode)
static const WCHAR Message[]
static const WCHAR Cleanup[]
#define PsGetCurrentThread()
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
_Outptr_ PFLT_PORT * ClientPort
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
#define EXCEPTION_EXECUTE_HANDLER
POBJECT_TYPE LpcPortObjectType
#define LPCTRACE(x, fmt,...)
#define LPC_COMPLETE_DEBUG
#define LpcpCompleteWait(s)
FORCEINLINE PLPCP_MESSAGE LpcpGetMessageFromThread(IN PETHREAD Thread)
#define LPCP_COMMUNICATION_PORT
struct _LPCP_MESSAGE LPCP_MESSAGE
struct _LPCP_CONNECTION_MESSAGE * PLPCP_CONNECTION_MESSAGE
#define KeGetPreviousMode()
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER SectionOffset
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG _In_ ULONG Length
NTSTATUS NTAPI PsLookupProcessThreadByCid(IN PCLIENT_ID Cid, OUT PEPROCESS *Process OPTIONAL, OUT PETHREAD *Thread)
#define STATUS_REPLY_MESSAGE_MISMATCH
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
NTSTATUS NTAPI ObInsertObject(IN PVOID Object, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG ObjectPointerBias, OUT PVOID *NewObject OPTIONAL, OUT PHANDLE Handle)
NTSTATUS NTAPI ObCreateObject(IN KPROCESSOR_MODE ProbeMode OPTIONAL, IN POBJECT_TYPE Type, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, IN ULONG ObjectSize, IN ULONG PagedPoolCharge OPTIONAL, IN ULONG NonPagedPoolCharge OPTIONAL, OUT PVOID *Object)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
#define ProbeForWriteHandle(Ptr)
NTSTATUS NTAPI MmMapViewOfSection(IN PVOID SectionObject, IN PEPROCESS Process, IN OUT PVOID *BaseAddress, IN ULONG_PTR ZeroBits, IN SIZE_T CommitSize, IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, IN OUT PSIZE_T ViewSize, IN SECTION_INHERIT InheritDisposition, IN ULONG AllocationType, IN ULONG Protect)
PLPCP_PORT_OBJECT ClientPort
ULONG MaxConnectionInfoLength
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INVALID_PARAMETER
BOOL WINAPI ReplyMessage(_In_ LRESULT)
#define ObDereferenceObject
#define ObReferenceObject
#define PsGetCurrentProcess
_In_ KPROCESSOR_MODE PreviousMode