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