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