NtAlpcDeleteSectionView
NTSTATUS __stdcall NtAlpcDeleteSectionView(VOID *PortHandle, UINT64 Flags, VOID *ViewBase){
_ETHREAD *CurrentThread;
int v4;
_ALPC_PORT *v5;
_EX_PUSH_LOCK *p_PortObjectLock;
VOID *v7;
NTSTATUS v8;
_ALPC_PORT *PortObject;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
if( (_DWORD)Flags )
{
v4 = -1073741811;
}
else
{
PortObject = 0i64;
v4 = ObReferenceObjectByHandle(
PortHandle,
1ui64,
AlpcPortObjectType,
KeGetCurrentThread()->PreviousMode,
(VOID **)&PortObject,
0i64);
if( v4 >= 0 )
{
v5 = PortObject;
p_PortObjectLock = &PortObject->PortObjectLock;
while( 1 )
{
ExAcquirePushLockSharedEx(p_PortObjectLock, 0i64);
v8 = AlpcpEnumerateResourcesPort(v5, v7);
if( _InterlockedCompareExchange64(&p_PortObjectLock->_bf_0, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(p_PortObjectLock);
KeAbPostRelease(p_PortObjectLock);
if( v8 != -1073741267 )
break;
v5 = PortObject;
}
v4 = -1073741503;
HalPutDmaAdapter((PADAPTER_OBJECT)PortObject);
}
}
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v4;
}Referenced by:
No references.