DrvDbGetObjectSubKeyList

NTSTATUS __stdcall DrvDbGetObjectSubKeyList(
        INT64 a1,
        VOID *a2,
        INT64 a3,
        INT64 a4,
        _WORD *a5,
        UINT64 a6,
        UINT64 *a7,
        INT64 a8){
  int v12; 
  int v13; 
  unsigned int v14; 
  _BYTE v16[548]; 
  int v17; 

  *(_DWORD *)a7 = 0;
  if( a5 && (_DWORD)a6 )
    *a5 = 0;
  memset(&v16[4], 0i64, 0x204u);
  *(_DWORD *)v16 = a8;
  *(_QWORD *)&v16[520] = a3;
  *(_QWORD *)&v16[528] = a4;
  *(_QWORD *)&v16[536] = a5;
  *(_DWORD *)&v16[544] = a6;
  v17 = 0;
  v12 = PnpCtxRegEnumKeyWithCallback(a1, a2, (INT64)DrvDbGetObjectSubKeyCallback, (INT64)v16);
  if( v12 >= 0 )
  {
    v13 = v17;
    *(_DWORD *)a7 = v17;
    if( v13 )
    {
      v14 = v13 + 1;
      *(_DWORD *)a7 = v14;
      if( a5 && v14 <= (unsigned int)a6 )
        a5[v14 - 1] = 0;
      else
        return -1073741789;
    }
    else
    {
      return 0;
    }
  }
  return v12;
}

Referenced by:

DrvDbGetObjectList