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