AlpcDeleteBlobByHandle
INT64 __fastcall AlpcDeleteBlobByHandle(_ALPC_HANDLE_TABLE *HandleTable, VOID *Handle, VOID *Resource){
INT64 result;
char v4;
int v6;
_EX_PUSH_LOCK *p_Lock;
unsigned __int64 v9;
void *retaddr;
result = (INT64)&retaddr;
v4 = 0;
v6 = (int)Handle;
if( HandleTable )
{
p_Lock = &HandleTable->Lock;
ExAcquirePushLockExclusiveEx((UINT64)&HandleTable->Lock, 0i64);
v9 = (unsigned int)(v6 - 16);
if( v9 < HandleTable->TotalHandles && HandleTable->Handles[v9].Object == Resource )
{
HandleTable->Handles[v9].Object = 0i64;
v4 = 1;
}
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)p_Lock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)p_Lock);
KeAbPostRelease(p_Lock);
LOBYTE(result) = v4;
}
else
{
LOBYTE(result) = 0;
}
return result;
}Referenced by:
AlpcReserveDestroyProcedure
AlpcSectionDeleteProcedure
AlpcSectionDestroyProcedure
AlpcSecurityDestroyProcedure