KsepDbCacheInsertDevice
NTSTATUS __fastcall KsepDbCacheInsertDevice(WCHAR *SourceString, VOID *InsertObject){
NTSTATUS v4;
_ETHREAD *CurrentThread;
_EX_PUSH_LOCK *v6;
_EX_PUSH_LOCK *v7;
char v8;
_QWORD SearchObject[10];
v4 = -1073741811;
memset(SearchObject, 0i64, 0x48u);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v6 = Cache;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(v6, 0i64);
RtlInitUnicodeString((PUNICODE_STRING)&SearchObject[5], SourceString);
if( !KsepCacheLookup((_KSE_CACHE *)Cache, SearchObject) )
{
KsepCacheInsert((_KSE_CACHE *)Cache, InsertObject);
v4 = 0;
}
v7 = Cache;
v8 = _InterlockedExchangeAdd64(&Cache->_bf_0, 0xFFFFFFFFFFFFFFFFui64);
if( (v8 & 2) != 0 && (v8 & 4) == 0 )
ExfTryToWakePushLock(v7);
KeAbPostRelease(v7);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v4;
}Referenced by:
KseQueryDeviceData
KseQueryDeviceDataList