NtReplyPort
NTSTATUS __stdcall NtReplyPort(HANDLE PortHandle, PPORT_MESSAGE LpcReply){
_ETHREAD *CurrentThread;
NTSTATUS v5;
INT64 v6;
_ALPC_DISPATCH_CONTEXT result;
PVOID Object;
memset((INT64)&result, 0i64);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
Object = 0i64;
v5 = ObReferenceObjectByHandle(
PortHandle,
1u,
AlpcPortObjectType,
*((_BYTE *)KeGetCurrentThread() + 562),
&Object,
0i64);
if( v5 >= 0 )
{
result.Flags = 0;
result.PortObject = (_ALPC_PORT *)Object;
if( (*((_DWORD *)Object + 104) & 0x2000) != 0 )
{
LOBYTE(v6) = *((_BYTE *)KeGetCurrentThread() + 562);
v5 = AlpcpReplyLegacySynchronousRequest(&result, LpcReply, v6);
}
else
{
result.Flags = 65537;
v5 = AlpcpSendMessage(&result, LpcReply, 0i64, *((_BYTE *)KeGetCurrentThread() + 562));
if( v5 == -1073740029 )
v5 = -1073741769;
}
HalPutDmaAdapter((PADAPTER_OBJECT)Object);
}
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return v5;
}Referenced by:
No references.