DrvDbDeleteObjectRegKey
__int64 __fastcall DrvDbDeleteObjectRegKey(__int64 *a1, int a2, wchar_t *a3, unsigned int a4){
char v7;
int ObjectDatabaseNode;
__int64 v9;
UNICODE_STRING *v10;
int v11;
int v12;
__int64 *i;
int v14;
__int64 v15;
char *v17;
UNICODE_STRING *v18;
WCHAR *v19;
unsigned int v20;
v20 = a4;
v19 = a3;
v17 = 0i64;
v18 = 0i64;
v7 = 0;
ObjectDatabaseNode = DrvDbGetObjectDatabaseNode((INT64)a1, a3, &v19, (const UNICODE_STRING **)&v18);
v10 = v18;
v11 = ObjectDatabaseNode;
if( ObjectDatabaseNode >= 0 )
{
if( v18 )
{
v12 = DrvDbAcquireDatabaseNodeBaseKey(a1, (__int64)v18, a2, (void **)&v17);
v11 = v12;
if( v12 >= 0 )
{
v11 = DrvDbDeleteObjectSubKey(a1, v17, v19, a4);
}
else if( v12 == -1073740697 )
{
v11 = -1073741662;
}
}
else
{
for( i = (__int64 *)a1[2]; i != a1 + 2; i = (__int64 *)*i )
{
v10 = (UNICODE_STRING *)i;
v14 = DrvDbAcquireDatabaseNodeBaseKey(a1, (__int64)i, a2, (void **)&v17);
v11 = v14;
if( v14 == -1073740697 )
{
v11 = -1073741662;
}
else
{
if( v14 < 0 )
break;
v11 = DrvDbDeleteObjectSubKey(a1, v17, v19, v20);
DrvDbReleaseDatabaseNodeBaseKey((__int64)a1, (__int64)i, v15, v17);
v17 = 0i64;
if( v11 < 0 )
{
if( v11 != -1073741772 )
goto LABEL_17;
}
else
{
v7 = 1;
}
}
}
if( v11 == -1073741772 )
goto LABEL_18;
LABEL_17:
if( v11 != -1073741662 )
goto LABEL_20;
LABEL_18:
if( v7 )
v11 = 0;
}
}
LABEL_20:
if( v17 )
DrvDbReleaseDatabaseNodeBaseKey((__int64)a1, (__int64)v10, v9, v17);
return(unsigned int)v11;
}Referenced by:
DrvDbDispatchDeviceId
DrvDbDispatchDriverFile
DrvDbDispatchDriverInfFile
DrvDbDispatchDriverPackage