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