NtReplyPort
NTSTATUS __fastcall NtReplyPort(_HANDLE Handle, _PORT_MESSAGE *Message){
VOID *v3;
_ETHREAD *CurrentThread;
int v5;
_ALPC_DISPATCH_CONTEXT DispatchContext;
PVOID Object;
v3 = *(VOID **)&Handle;
memset(&DispatchContext, 0i64, sizeof(DispatchContext));
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
Object = 0i64;
v5 = ObReferenceObjectByHandle(v3, 1ui64, AlpcPortObjectType, KeGetCurrentThread()->PreviousMode, &Object, 0i64);
if( v5 >= 0 )
{
DispatchContext.Flags = 0;
DispatchContext.PortObject = (_ALPC_PORT *)Object;
if( (*((_DWORD *)Object + 104) & 0x2000) != 0 )
{
v5 = AlpcpReplyLegacySynchronousRequest(
&DispatchContext,
(PORT_MESSAGE *)&Message->u1.DataLength,
KeGetCurrentThread()->PreviousMode);
}
else
{
DispatchContext.Flags = 65537;
v5 = AlpcpSendMessage(&DispatchContext, Message, 0i64, KeGetCurrentThread()->PreviousMode);
if( v5 == -1073740029 )
v5 = -1073741769;
}
HalPutDmaAdapter((PADAPTER_OBJECT)Object);
}
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v5;
}Referenced by:
No references.