NtAlpcDeleteSectionView
NTSTATUS __stdcall NtAlpcDeleteSectionView(PVOID PortHandle, UINT64 Flags, PVOID ViewBase){
_ETHREAD *CurrentThread;
signed int v5;
PADAPTER_OBJECT v6;
INT64 *v7;
INT64 v8;
INT64 v9;
int v10;
void *v11;
ULONG_PTR BugCheckParameter2[2];
PADAPTER_OBJECT DmaAdapter;
*(_OWORD *)BugCheckParameter2 = 0i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
if( (_DWORD)Flags )
{
v5 = -1073741811;
}
else
{
DmaAdapter = 0i64;
v5 = ObReferenceObjectByHandle(
PortHandle,
1u,
AlpcPortObjectType,
*((_BYTE *)KeGetCurrentThread() + 562),
(PVOID *)&DmaAdapter,
0i64);
if( v5 >= 0 )
{
BugCheckParameter2[0] = (ULONG_PTR)ViewBase;
v6 = DmaAdapter;
BugCheckParameter2[1] = 0i64;
v7 = (INT64 *)&DmaAdapter[22];
while( 1 )
{
ExAcquirePushLockSharedEx((UINT64)v7, 0i64);
v10 = AlpcpEnumerateResourcesPort((INT64)v6, v8, v9, BugCheckParameter2);
if( _InterlockedCompareExchange64(v7, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(v7);
KeAbPostRelease(v7);
if( v10 != -1073741267 )
break;
v6 = DmaAdapter;
}
v11 = (void *)BugCheckParameter2[1];
if( BugCheckParameter2[1] )
{
v5 = AlpcpDeleteView(BugCheckParameter2[1]) == 0 ? 0xC0000056 : 0;
AlpcpDereferenceBlobEx(v11, 1i64);
}
else
{
v5 = -1073741503;
}
HalPutDmaAdapter(DmaAdapter);
}
}
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return v5;
}Referenced by:
No references.