ObpMarkDirectoryTreeTemporary
VOID __fastcall ObpMarkDirectoryTreeTemporary(CHAR *a1){
_ETHREAD *CurrentThread;
struct _DMA_ADAPTER *v2;
PVOID v3;
ObpMarkDirectoryObjectsTemporary((PADAPTER_OBJECT)a1);
while( 1 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = 0i64;
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx((UINT64)&ObpPendingObjectDirectoryListLock, 0i64);
v3 = ObpPendingObjectDirectoryList;
if( ObpPendingObjectDirectoryList )
{
v2 = (struct _DMA_ADAPTER *)*((_QWORD *)ObpPendingObjectDirectoryList + 1);
ObpPendingObjectDirectoryList = *(PVOID *)ObpPendingObjectDirectoryList;
}
ExReleasePushLockEx((UINT64)&ObpPendingObjectDirectoryListLock, 0i64);
KeLeaveCriticalRegion();
if( v3 )
ExFreePoolWithTag(v3, 0);
if( !v2 )
break;
ObpMarkDirectoryObjectsTemporary(v2);
HalPutDmaAdapter(v2);
}
}Referenced by:
ObCloseHandleTableEntry
ObpDeleteNameCheck