PopUmpoProcessMessages
VOID __stdcall PopUmpoProcessMessages(){
VOID **PoolWithTag;
NTSTATUS v1;
INT64 v2;
INT64 v3;
_ALPC_CONTEXT_ATTR *MessageAttribute;
PORT_MESSAGE *ReceiveMessage;
UINT64 *BufferLength;
UINT64 v7;
_LARGE_INTEGER Timeout;
__int64 RequiredBufferSize[2];
_ALPC_MESSAGE_ATTRIBUTES Buffer[20];
v7 = 0i64;
Timeout.QuadPart = 0i64;
PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x1000ui64, 1869638997i64);
if( !PoolWithTag )
goto LABEL_7;
memset(Buffer, 0i64, sizeof(Buffer));
while( 1 )
{
AlpcInitializeMessageAttribute(0x20000000ui64, Buffer, 0xA0ui64, (UINT64 *)RequiredBufferSize);
v7 = 4096i64;
v1 = ZwAlpcSendWaitReceivePort(
(VOID *)PopAlpcServerPort,
0i64,
0i64,
0i64,
(PORT_MESSAGE *)PoolWithTag,
&v7,
Buffer,
&Timeout);
if( v1 )
break;
MessageAttribute = (_ALPC_CONTEXT_ATTR *)AlpcGetMessageAttribute(
Buffer,
0x20000000ui64,
v2,
v3,
(INT64)ReceiveMessage,
(INT64)BufferLength);
PopUmpoProcessMessage((PORT_MESSAGE *)PoolWithTag, MessageAttribute);
}
ExFreePoolWithTag(PoolWithTag, 0);
if( v1 < 0 )
LABEL_7:
PopDiagTraceUmpoAlpcProcessingError();
}Referenced by:
PopUmpoInitializeChannel
PopUmpoMessageCallback