KseQueryDeviceDataList

NTSTATUS __stdcall KseQueryDeviceDataList(
        WCHAR *DeviceId,
        WCHAR *DataList,
        UINT64 DataListLength,
        UINT64 *ActualLength){
  unsigned int v5; 
  NTSTATUS RegistryDeviceDataList; 
  VOID *v9; 
  VOID *v10; 
  VOID *v11; 
  VOID *InsertObject; 
  _QWORD SearchObject[10]; 

  v5 = DataListLength;
  memset(SearchObject, 0i64, 0x48u);
  InsertObject = 0i64;
  if( dword_140C50324 != 2 || (Engine & 2) != 0 )
    return -1073741275;
  if( !DeviceId || !ActualLength )
    return -1073741811;
  RegistryDeviceDataList = KsepDbQueryRegistryDeviceDataList(DeviceId, DataList, v5, ActualLength);
  if( RegistryDeviceDataList == -1073741275 )
  {
    if( KsepShimDbChanged() )
    {
      KseResetDeviceCache();
LABEL_11:
      RegistryDeviceDataList = KsepDbCacheReadDevice(DeviceId, &InsertObject);
      if( RegistryDeviceDataList >= 0 )
      {
        v11 = InsertObject;
        RegistryDeviceDataList = KsepDbCacheQueryDeviceDataList(
                                   (__int64)InsertObject,
                                   (char *)DataList,
                                   v5,
                                   ActualLength);
        if( KsepDbCacheInsertDevice(DeviceId, v11) < 0 )
          KsepCacheDeviceFree(v11);
      }
      return RegistryDeviceDataList;
    }
    RtlInitUnicodeString((PUNICODE_STRING)&SearchObject[5], DeviceId);
    KsepCacheLock((_KSE_CACHE *)Cache);
    v9 = KsepCacheLookup((_KSE_CACHE *)Cache, SearchObject);
    InsertObject = v9;
    v10 = v9;
    if( v9 )
      RegistryDeviceDataList = KsepDbCacheQueryDeviceDataList((__int64)v9, (char *)DataList, v5, ActualLength);
    KsepCacheUnlock((_KSE_CACHE *)Cache);
    if( !v10 )
      goto LABEL_11;
  }
  return RegistryDeviceDataList;
}

Referenced by:

ExpGetDeviceDataInformation