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