KseQueryDeviceDataList

INT64 __stdcall KseQueryDeviceDataList(WCHAR *DeviceId, WCHAR *DataList, UINT64 DataListLength, UINT64 *ActualLength){
  unsigned int v5; 
  int RegistryDeviceDataList; 
  WCHAR v9; 
  _QWORD *v10; 
  _QWORD *v11; 
  void *v12; 
  INT64 v14; 
  INT64 a2[5]; 
  struct _UNICODE_STRING DestinationString; 
  v5 = DataListLength;
  memset((INT64)a2, 0i64);
  v14 = 0i64;
  if( dword_140C50324 != 2 || (*(_BYTE *)KseEngine & 2) != 0 )
    return(unsigned int)-1073741275;
  if( !DeviceId || !ActualLength )
    return(unsigned int)-1073741811;
  RegistryDeviceDataList = KsepDbQueryRegistryDeviceDataList(DeviceId, DataList, v5, ActualLength);
  if( RegistryDeviceDataList == -1073741275 )
  {
    if( (unsigned int)KsepShimDbChanged() )
    {
      KseResetDeviceCache();
LABEL_11:
      RegistryDeviceDataList = KsepDbCacheReadDevice(DeviceId, (CHAR **)&v14);
      if( RegistryDeviceDataList >= 0 )
      {
        v12 = (void *)v14;
        RegistryDeviceDataList = KsepDbCacheQueryDeviceDataList(v14, (char *)DataList, v5, ActualLength);
        if( (int)KsepDbCacheInsertDevice(DeviceId, (INT64)v12) < 0 )
          KsepCacheDeviceFree(v12);
      }
      return(unsigned int)RegistryDeviceDataList;
    }
    RtlInitUnicodeString(&DestinationString, DeviceId, v9);
    KsepCacheLock(qword_140C50368);
    v10 = KsepCacheLookup(qword_140C50368, (INT64)a2);
    v14 = (INT64)v10;
    v11 = v10;
    if( v10 )
      RegistryDeviceDataList = KsepDbCacheQueryDeviceDataList((__int64)v10, (char *)DataList, v5, ActualLength);
    KsepCacheUnlock(qword_140C50368);
    if( !v11 )
      goto LABEL_11;
  }
  return(unsigned int)RegistryDeviceDataList;
}

Referenced by:

ExpGetDeviceDataInformation