ObpUnlockHandleDatabaseEntry

VOID __stdcall ObpUnlockHandleDatabaseEntry(_OBJECT_HEADER *ObjectHeader, _EPROCESS *Process){
  _OBJECT_HEADER_HANDLE_INFO *v2; 
  _OBJECT_HANDLE_COUNT_DATABASE *v3; 
  __int64 v4; 
  _OBJECT_HEADER_HANDLE_INFO *HandleCountEntries; 
  _OBJECT_HANDLE_COUNT_DATABASE *HandleCountDataBase; 
  unsigned int CountEntries; 
  char v8; 

  v2 = OBJECT_HEADER_TO_HANDLE_INFO(ObjectHeader);
  HandleCountEntries = v2;
  if( (*(_BYTE *)(v4 + 27) & 0x40) != 0 )
  {
LABEL_11:
    --*((_BYTE *)&v2->SingleEntry + 11);
    goto LABEL_12;
  }
  HandleCountDataBase = v2->HandleCountDataBase;
  CountEntries = HandleCountDataBase->CountEntries;
  HandleCountEntries = (_OBJECT_HEADER_HANDLE_INFO *)HandleCountDataBase->HandleCountEntries;
  v2 = 0i64;
  if( !CountEntries )
    goto LABEL_12;
  while( HandleCountEntries->HandleCountDataBase != v3 )
  {
LABEL_6:
    ++HandleCountEntries;
    if( !--CountEntries )
      goto LABEL_9;
  }
  v8 = *((_BYTE *)&HandleCountEntries->SingleEntry + 11);
  if( v8 == -1 )
  {
    v2 = HandleCountEntries;
    goto LABEL_6;
  }
  *((_BYTE *)&HandleCountEntries->SingleEntry + 11) = v8 - 1;
  v2 = 0i64;
LABEL_9:
  if( v2 )
  {
    HandleCountEntries = v2;
    goto LABEL_11;
  }
LABEL_12:
  if( !*((_BYTE *)&HandleCountEntries->SingleEntry + 11)
    && (*((_DWORD *)&HandleCountEntries->SingleEntry + 2) & 0xFFFFFF) == 0 )
  {
    HandleCountEntries->HandleCountDataBase = 0i64;
  }
}

Referenced by:

ObpIncrementHandleCountEx