AlpcpDestroyBlob
VOID __stdcall AlpcpDestroyBlob(PVOID Blob){
int v1;
char *v2;
int v3;
__int64 v5;
v2 = (char *)Blob - 48;
v3 = v1;
v5 = AlpcpRegisteredTypes[(unsigned __int8)*((char *)Blob - 31)];
(*(void(**)(void))(v5 + 24))();
if( v3 )
{
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)Blob - 2, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)Blob - 2);
KeAbPostRelease((char *)Blob - 16);
}
if( (*(int(__fastcall **)(PVOID))(v5 + 40))(Blob) >= 0 )
{
if( (v2[16] & 2) != 0 )
{
ExFreeToNPagedLookasideList(
(NPAGED_LOOKASIDE_LIST *)&AlpcpLookasides[16 * (unsigned __int64)*(unsigned int *)(v5 + 8)],
v2);
}
else if( *(_QWORD *)(v5 + 48) )
{
((void(__fastcall *)(char *))AlpcpLookasides[16 * (unsigned __int64)*(unsigned int *)(v5 + 8) + 7])(v2);
}
else
{
ExFreePoolWithTag(v2, *(_DWORD *)(v5 + 4));
}
}
}Referenced by:
AlpcpCompleteDispatchMessage
AlpcpReceiveMessage