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