AlpcpReturnMessageOnInsufficientBuffer
INT64 __fastcall AlpcpReturnMessageOnInsufficientBuffer(_ALPC_PORT *PortObject, _KALPC_MESSAGE *Message){
_OWORD *v2;
INT64 *v3;
INT64 v6;
int v7;
v3 = (INT64 *)((char *)PortObject + 352);
*v2 = 0i64;
v2[1] = 0i64;
v6 = (INT64)v2;
ExAcquirePushLockSharedEx((UINT64)PortObject + 352, 0i64);
v7 = *((_DWORD *)PortObject + 104) & 0x40;
if( *((_ALPC_PORT **)Message + 8) == PortObject )
{
if( v7 )
{
*((_QWORD *)Message + 8) = 0i64;
*((_QWORD *)Message + 7) = 0i64;
}
else
{
++*((_WORD *)Message - 15);
AlpcpInsertMessageCanceledQueue((INT64)PortObject, (INT64)Message);
}
LABEL_12:
if( _InterlockedCompareExchange64(v3, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(v3);
KeAbPostRelease(v3);
AlpcpExposeContextAttribute((INT64)PortObject, (INT64)Message, v6, 0i64);
return 3221225507i64;
}
if( !v7 )
{
if( *((_QWORD *)Message + 2) )
AlpcpRemoveMessageFromPendingQueue(Message);
++*((_WORD *)Message - 15);
AlpcpInsertMessageLargeMessageQueue((INT64)PortObject, (INT64)Message);
goto LABEL_12;
}
if( _InterlockedCompareExchange64(v3, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(v3);
KeAbPostRelease(v3);
return 3221227264i64;
}Referenced by:
AlpcpProcessSynchronousRequest
AlpcpReceiveMessage