KsepDbCacheQueryDevice
INT64 __stdcall KsepDbCacheQueryDevice(
WCHAR *DeviceId,
WCHAR *DataName,
UINT64 *DataType,
UINT64 *DataBufferLength,
PVOID DataBuffer){
unsigned int DeviceData;
WCHAR v10;
_ETHREAD *CurrentThread;
UINT64 v12;
_QWORD *v13;
volatile INT64 *v14;
char v15;
INT64 a2[5];
struct _UNICODE_STRING DestinationString;
DeviceData = -1073741275;
memset((INT64)a2, 0i64);
RtlInitUnicodeString(&DestinationString, DeviceId, v10);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v12 = qword_140C50368;
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx(v12, 0i64);
v13 = KsepCacheLookup(qword_140C50368, (INT64)a2);
if( v13 )
DeviceData = KsepDbCacheQueryDeviceData((INT64)v13, DataName, DataType, DataBufferLength, (UINT8 *)DataBuffer);
v14 = (volatile INT64 *)qword_140C50368;
v15 = _InterlockedExchangeAdd64((volatile signed __int64 *)qword_140C50368, 0xFFFFFFFFFFFFFFFFui64);
if( (v15 & 2) != 0 && (v15 & 4) == 0 )
ExfTryToWakePushLock(v14);
KeAbPostRelease((PVOID)v14);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return DeviceData;
}Referenced by:
KseQueryDeviceData