DrvDbUnloadDatabaseNode
INT64 __fastcall DrvDbUnloadDatabaseNode(INT64 a1, INT64 a2){
__int64(__fastcall *v2)(INT64, _QWORD, __int64);
NTSTATUS v3;
int v6;
unsigned int v7;
unsigned int v9;
HANDLE *v10;
INT64 v11;
v2 = *(__int64(__fastcall **)(INT64, _QWORD, __int64))(a2 + 72);
v3 = 0;
v11 = 0i64;
if( v2 )
{
v11 = a2 + 88;
v6 = ((__int64(__fastcall *)(INT64, _QWORD, __int64, __int64, INT64 *, _QWORD))v2)(
a1,
*(_QWORD *)(a2 + 24),
2i64,
1i64,
&v11,
*(_QWORD *)(a2 + 80));
if( v6 == -1073741822 )
{
v2 = 0i64;
}
else if( v6 < 0 )
{
v3 = v6;
goto LABEL_5;
}
}
if( *(_QWORD *)(a2 + 88) )
{
if( (*(_DWORD *)(a2 + 56) & 2) != 0 )
{
v9 = 0;
v10 = (HANDLE *)(a2 + 96);
do
{
if( *v10 )
{
v3 = ZwClose(*v10);
if( v3 < 0 )
goto LABEL_5;
*v10 = 0i64;
}
++v9;
++v10;
}
while( v9 < 6 );
}
v3 = ZwClose(*(HANDLE *)(a2 + 88));
if( v3 >= 0 )
*(_QWORD *)(a2 + 88) = 0i64;
}
LABEL_5:
if( v2 )
{
v7 = v2(a1, *(_QWORD *)(a2 + 24), 2i64);
if( (int)(v7 + 0x80000000) >= 0 && v7 != -1073741822 && !v3 )
return v7;
}
return(unsigned int)v3;
}Referenced by:
DrvDbDestroyDatabaseNode
DrvDbLoadDatabaseNode
DrvDbOpenDriverDatabaseRegKey
DrvDbReleaseDatabaseNodeBaseKey
DrvDbSetDriverDatabaseMappedProperty