KseQueryDeviceData
INT64 __fastcall KseQueryDeviceData(_SECTION *Section, VOID *MappedBase, UINT64 LoadFlags){
UINT64 *v3;
UINT64 *v4;
int v8;
int RegistryDeviceData;
_DWORD *v11;
void *v12;
__int64 v13;
PVOID DataBuffer;
INT64 a1;
PVOID v16;
a1 = 0i64;
v4 = v3;
if( dword_140C50324 != 2 || (*(_BYTE *)KseEngine & 2) != 0 )
return(unsigned int)-1073741275;
if( !MappedBase || !LoadFlags || !v3 )
return(unsigned int)-1073741811;
v8 = *(_DWORD *)LoadFlags;
*(_DWORD *)LoadFlags = 0;
if( (v8 & 0x20000000) == 0 )
{
RegistryDeviceData = KsepDbQueryRegistryDeviceData(
(PWCHAR)Section,
(PWCHAR)MappedBase,
(UINT64 *)LoadFlags,
v3,
v16);
if( RegistryDeviceData != -1073741275 )
goto LABEL_14;
}
if( (unsigned int)KsepShimDbChanged() )
{
KseResetDeviceCache();
}
else
{
RegistryDeviceData = KsepDbCacheQueryDevice((WCHAR *)Section, (WCHAR *)MappedBase, (UINT64 *)LoadFlags, v4, v16);
if( RegistryDeviceData != -1073741275 )
goto LABEL_14;
}
RegistryDeviceData = KsepDbCacheReadDevice((WCHAR *)Section, (CHAR **)&a1);
if( RegistryDeviceData < 0 )
return(unsigned int)RegistryDeviceData;
v11 = (_DWORD *)LoadFlags;
v12 = (void *)a1;
RegistryDeviceData = KsepDbCacheQueryDeviceData(a1, (const WCHAR *)MappedBase, v11, v4, (UINT8 *)v16);
if( (int)KsepDbCacheInsertDevice((WCHAR *)Section, (INT64)v12) < 0 )
KsepCacheDeviceFree(v12);
LABEL_14:
if( RegistryDeviceData >= 0 )
{
if( !*(_DWORD *)v4 )
RegistryDeviceData = -1073741275;
v13 = ((unsigned __int8)_InterlockedExchangeAdd(&KsepHistoryMessagesIndex, 1u) + 1) & 0x3F;
HIDWORD(KsepHistoryMessages[v13]) = 0;
LODWORD(KsepHistoryMessages[v13]) = 592101;
if( (KsepDebugFlag & 1) != 0 )
{
LODWORD(DataBuffer) = RegistryDeviceData;
KsepDebugPrint(0i64, "KSE: Query device [%ws, %ws]: found in cache %08x\n", MappedBase, Section, DataBuffer);
}
LODWORD(DataBuffer) = RegistryDeviceData;
KsepLogInfo(0, "KSE: Query device [%ws, %ws]: found in cache %08x\n", MappedBase, Section, DataBuffer);
}
return(unsigned int)RegistryDeviceData;
}Referenced by:
ExpGetDeviceDataInformation
KseQueryDeviceFlags