AlpcpFreeMessageFunction
VOID __stdcall AlpcpFreeMessageFunction(PVOID Buffer){
unsigned int v2;
_ETHREAD *CurrentThread;
_HANDLE_TABLE *v4;
unsigned int v5;
_HANDLE_TABLE_ENTRY *v6;
v2 = *((_DWORD *)Buffer + 78) & 0x7FFFFFFF;
if( v2 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
if( (v2 & 0xFC000000) != 0 )
{
v4 = 0i64;
if( AlpcpSecondaryMessageTables )
v4 = *(_HANDLE_TABLE **)(AlpcpSecondaryMessageTables + 8 * ((unsigned __int64)v2 >> 26));
}
else
{
v4 = (_HANDLE_TABLE *)AlpcMessageTable;
}
v5 = v2 & 0x3FFFFFF;
v6 = (_HANDLE_TABLE_ENTRY *)ExMapHandleToPointerEx(
(ULONG_PTR)v4,
v2 & 0x3FFFFFF,
*((_BYTE *)KeGetCurrentThread() + 562));
ExDestroyHandle(v4, (VOID *)v5, v6);
KeLeaveCriticalRegionThread((__int64)CurrentThread);
}
ExFreePoolWithTag(Buffer, 0);
}Referenced by:
No references.