53 CurrentThread->LpcReceivedMessageId = 0;
54 CurrentThread->LpcReplyMessage =
NULL;
58 SectionToMap = (*ConnectMessage)->SectionToMap;
59 (*ConnectMessage)->SectionToMap =
NULL;
95 PSID CapturedServerSid;
96 ULONG ConnectionInfoLength = 0;
100 ULONG PortMessageLength;
109 "Name: %wZ. SecurityQos: %p. Views: %p/%p. Sid: %p\n",
136 CapturedClientView = *(
volatile PORT_VIEW*)ClientView;
139 if (CapturedClientView.
Length !=
sizeof(CapturedClientView))
160 if (MaxMessageLength)
164 if (ConnectionInformationLength)
167 ConnectionInfoLength = *(
volatile ULONG*)ConnectionInformationLength;
171 if (ConnectionInformation)
174 CapturedServerSid = ServerSid;
175 if (ServerSid !=
NULL)
185 DPRINT1(
"Failed to capture ServerSid!\n");
199 CapturedQos = *SecurityQos;
208 if (ClientView->Length !=
sizeof(*ClientView))
213 CapturedClientView = *ClientView;
220 if (ServerView->Length !=
sizeof(*ServerView))
228 if (ConnectionInformationLength)
229 ConnectionInfoLength = *ConnectionInformationLength;
231 CapturedServerSid = ServerSid;
247 if (CapturedServerSid != ServerSid)
261 if (CapturedServerSid != ServerSid)
271 if (
Port->ServerProcess)
282 if (!
RtlEqualSid(CapturedServerSid, TokenUserInfo->User.Sid))
301 if (CapturedServerSid != ServerSid)
384 (
PVOID*)&SectionToMap,
389 DPRINT1(
"Failed to reference port section handle: 0x%lx\n",
Status);
436 if (ConnectionInfoLength >
Port->MaxConnectionInfoLength)
439 ConnectionInfoLength =
Port->MaxConnectionInfoLength;
447 DPRINT1(
"LpcpAllocateFromPortZone failed\n");
466 sizeof(CapturedClientView));
472 Message->Request.ClientViewSize = 0;
481 Message->Request.u1.s1.DataLength = (
CSHORT)ConnectionInfoLength +
484 Message->Request.u1.s1.DataLength;
488 if (ConnectionInformation)
494 ConnectionInformation,
495 ConnectionInfoLength);
499 DPRINT1(
"Exception 0x%lx when copying connection info to user mode\n",
562 "Messages: %p/%p. Ports: %p/%p. Status: %lx\n",
605 if ((
Message->Request.u1.s1.DataLength -
609 ConnectionInfoLength =
Message->Request.u1.s1.DataLength -
614 if (ConnectionInformation)
619 if (ConnectionInformationLength)
620 *ConnectionInformationLength = ConnectionInfoLength;
625 ConnectionInfoLength);
640 PortMessageLength =
Port->MaxMessageLength;
652 "Handle: %p. Length: %lx\n",
662 if (MaxMessageLength)
663 *MaxMessageLength = PortMessageLength;
671 sizeof(*ClientView));
680 sizeof(*ServerView));
770 ConnectionInformation,
771 ConnectionInformationLength);
#define ProbeForWriteUlong(Ptr)
#define STATUS_SERVER_SID_MISMATCH
REMOTE_PORT_VIEW ServerView
struct _LPCP_CONNECTION_MESSAGE * PLPCP_CONNECTION_MESSAGE
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define PsGetCurrentThread()
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
#define STATUS_INVALID_PARAMETER
#define LpcpCompleteWait(s)
#define KeGetPreviousMode()
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE _In_ ULONG _In_ ULONG _In_opt_ PTOKEN_GROUPS _In_ PTOKEN_SOURCE _Out_ PVOID _Out_ PULONG _Inout_ PLUID _Out_ PHANDLE Token
_Outptr_ PFLT_PORT * ClientPort
#define InsertTailList(ListHead, Entry)
#define LPCP_PORT_TYPE_MASK
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
#define STATUS_INVALID_PORT_HANDLE
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
#define STATUS_PORT_CONNECTION_REFUSED
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
NTSTATUS NTAPI NtSecureConnectPort(OUT PHANDLE PortHandle, IN PUNICODE_STRING PortName, IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, IN OUT PPORT_VIEW ClientView OPTIONAL, IN PSID ServerSid OPTIONAL, IN OUT PREMOTE_PORT_VIEW ServerView OPTIONAL, OUT PULONG MaxMessageLength OPTIONAL, IN OUT PVOID ConnectionInformation OPTIONAL, IN OUT PULONG ConnectionInformationLength OPTIONAL)
#define LPCP_CONNECTION_PORT
#define PsGetCurrentProcess
#define EXCEPTION_EXECUTE_HANDLER
FORCEINLINE PLPCP_MESSAGE LpcpGetMessageFromThread(IN PETHREAD Thread)
PVOID NTAPI LpcpFreeConMsg(IN OUT PLPCP_MESSAGE *Message, IN OUT PLPCP_CONNECTION_MESSAGE *ConnectMessage, IN PETHREAD CurrentThread)
#define LpcpConnectWait(s, w)
NTKERNELAPI NTSTATUS NTAPI SeCreateClientSecurity(IN PETHREAD Thread, IN PSECURITY_QUALITY_OF_SERVICE QualityOfService, IN BOOLEAN RemoteClient, OUT PSECURITY_CLIENT_CONTEXT ClientContext)
BOOL WINAPI ReplyMessage(_In_ LRESULT)
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)
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)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER SectionOffset
static __inline PLPCP_MESSAGE LpcpAllocateFromPortZone(VOID)
#define SECTION_MAP_WRITE
POBJECT_TYPE LpcPortObjectType
NTSTATUS NTAPI LpcpInitializePortQueue(IN PLPCP_PORT_OBJECT Port)
_In_ KPROCESSOR_MODE PreviousMode
NTSTATUS NTAPI NtConnectPort(OUT PHANDLE PortHandle, IN PUNICODE_STRING PortName, IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, IN OUT PPORT_VIEW ClientView OPTIONAL, IN OUT PREMOTE_PORT_VIEW ServerView OPTIONAL, OUT PULONG MaxMessageLength OPTIONAL, IN OUT PVOID ConnectionInformation OPTIONAL, IN OUT PULONG ConnectionInformationLength OPTIONAL)
#define _SEH2_YIELD(STMT_)
#define NT_SUCCESS(StatCode)
#define ObDereferenceObject
#define ProbeForWriteHandle(Ptr)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
POBJECT_TYPE MmSectionObjectType
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
#define SECURITY_DYNAMIC_TRACKING
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
#define LPCP_NAME_DELETED
#define KeEnterCriticalRegion()
PACCESS_TOKEN NTAPI PsReferencePrimaryToken(PEPROCESS Process)
#define LPCP_WAITABLE_PORT
VOID NTAPI LpcpFreeToPortZone(IN PLPCP_MESSAGE Message, IN ULONG LockFlags)
PLPCP_PORT_OBJECT ClientPort
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)
#define KeLeaveCriticalRegion()
#define STATUS_OBJECT_NAME_NOT_FOUND
NTSTATUS NTAPI SeQueryInformationToken(IN PACCESS_TOKEN AccessToken, IN TOKEN_INFORMATION_CLASS TokenInformationClass, OUT PVOID *TokenInformation)
#define InitializeListHead(ListHead)
LONG NTAPI KeReadStateSemaphore(IN PKSEMAPHORE Semaphore)
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
VOID NTAPI SepReleaseSid(IN PSID CapturedSid, IN KPROCESSOR_MODE AccessMode, IN BOOLEAN CaptureIfKernel)
VOID NTAPI PsDereferencePrimaryToken(IN PACCESS_TOKEN PrimaryToken)
struct _LPCP_MESSAGE LPCP_MESSAGE
struct _LPCP_CONNECTION_MESSAGE LPCP_CONNECTION_MESSAGE
#define ObReferenceObject
#define RtlZeroMemory(Destination, Length)
#define LPCP_SECURITY_DYNAMIC
#define RtlCopyMemory(Destination, Source, Length)
#define LPC_CONNECT_DEBUG
#define _SEH2_EXCEPT(...)
#define ExFreePoolWithTag(_P, _T)
#define _SEH2_GetExceptionCode()
NTSTATUS NTAPI SepCaptureSid(IN PSID InputSid, IN KPROCESSOR_MODE AccessMode, IN POOL_TYPE PoolType, IN BOOLEAN CaptureIfKernel, OUT PSID *CapturedSid)
NTSTATUS NTAPI ObReferenceObjectByName(IN PUNICODE_STRING ObjectPath, IN ULONG Attributes, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext, OUT PVOID *ObjectPtr)
#define LPCTRACE(x, fmt,...)
NTSYSAPI BOOLEAN NTAPI RtlEqualSid(_In_ PSID Sid1, _In_ PSID Sid2)
IN PUNICODE_STRING PortName
PULONG MinorVersion OPTIONAL