KseQueryDeviceData
NTSTATUS __stdcall KseQueryDeviceData(
WCHAR *DeviceId,
WCHAR *DataName,
UINT64 *DataType,
UINT64 *DataBufferLength,
VOID *DataBuffer){
int v9;
NTSTATUS v10;
NTSTATUS Device;
UINT64 *v13;
VOID *v14;
__int64 v15;
VOID *v16;
VOID *InsertObject;
InsertObject = 0i64;
if( dword_140C50324 != 2 || (Engine & 2) != 0 )
return -1073741275;
if( !DataName || !DataType || !DataBufferLength )
return -1073741811;
v9 = *(_DWORD *)DataType;
*(_DWORD *)DataType = 0;
if( (v9 & 0x20000000) == 0 )
{
HIDWORD(v16) = HIDWORD(DataBuffer);
KsepDbQueryRegistryDeviceData(DeviceId, DataName, DataType, DataBufferLength);
Device = v10;
if( v10 != -1073741275 )
goto LABEL_14;
}
if( KsepShimDbChanged() )
{
KseResetDeviceCache();
}
else
{
Device = KsepDbCacheQueryDevice(DeviceId, DataName, DataType, DataBufferLength, DataBuffer);
if( Device != -1073741275 )
goto LABEL_14;
}
Device = KsepDbCacheReadDevice(DeviceId, &InsertObject);
if( Device < 0 )
return Device;
v13 = DataType;
v14 = InsertObject;
Device = KsepDbCacheQueryDeviceData(
(__int64)InsertObject,
DataName,
v13,
(unsigned int *)DataBufferLength,
DataBuffer);
if( KsepDbCacheInsertDevice(DeviceId, v14) < 0 )
KsepCacheDeviceFree(v14);
LABEL_14:
if( Device >= 0 )
{
if( !*(_DWORD *)DataBufferLength )
Device = -1073741275;
v15 = ((unsigned __int8)_InterlockedExchangeAdd(&KsepHistoryMessagesIndex, 1u) + 1) & 0x3F;
HIDWORD(KsepHistoryMessages[v15]) = 0;
LODWORD(KsepHistoryMessages[v15]) = 592101;
if( (KsepDebugFlag & 1) != 0 )
{
LODWORD(v16) = Device;
KsepDebugPrint(0i64, "KSE: Query device [%ws, %ws]: found in cache %08x\n", DataName, DeviceId, v16);
}
LODWORD(v16) = Device;
KsepLogInfo(0, "KSE: Query device [%ws, %ws]: found in cache %08x\n", DataName, DeviceId, v16);
}
return Device;
}Referenced by:
ExpGetDeviceDataInformation
KseQueryDeviceFlags