KsepDbCacheQueryDevice
NTSTATUS __stdcall KsepDbCacheQueryDevice(
WCHAR *DeviceId,
WCHAR *DataName,
UINT64 *DataType,
UINT64 *DataBufferLength,
VOID *DataBuffer){
NTSTATUS DeviceData;
_ETHREAD *CurrentThread;
_EX_PUSH_LOCK *v11;
VOID *v12;
_EX_PUSH_LOCK *v13;
char v14;
_QWORD SearchObject[10];
DeviceData = -1073741275;
memset(SearchObject, 0i64, 0x48u);
RtlInitUnicodeString((PUNICODE_STRING)&SearchObject[5], DeviceId);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v11 = Cache;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(v11, 0i64);
v12 = KsepCacheLookup((_KSE_CACHE *)Cache, SearchObject);
if( v12 )
DeviceData = KsepDbCacheQueryDeviceData(
(__int64)v12,
DataName,
DataType,
(unsigned int *)DataBufferLength,
DataBuffer);
v13 = Cache;
v14 = _InterlockedExchangeAdd64(&Cache->_bf_0, 0xFFFFFFFFFFFFFFFFui64);
if( (v14 & 2) != 0 && (v14 & 4) == 0 )
ExfTryToWakePushLock(v13);
KeAbPostRelease(v13);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return DeviceData;
}Referenced by:
KseQueryDeviceData