KseAddHardwareId
NTSTATUS __stdcall KseAddHardwareId(PWCHAR HardwareId){
WCHAR v1;
volatile signed __int64 *v2;
_ETHREAD *CurrentThread;
_QWORD *v5;
__int64 v6;
NTSTATUS v7;
char v8;
__int64 v10;
INT64 a2[2];
__int128 v12;
__int128 v13;
__int64 v14;
v2 = (volatile signed __int64 *)qword_140C50370;
*(_OWORD *)a2 = 0i64;
v12 = 0i64;
v13 = 0i64;
v14 = 0i64;
if( dword_140C50324 != 2 )
{
v10 = ((unsigned __int8)_InterlockedExchangeAdd(&KsepHistoryErrorsIndex, 1u) + 1) & 0x3F;
KsepHistoryErrors[2 * v10 + 1] = -1073741823;
KsepHistoryErrors[2 * v10] = 656075;
if( (KsepDebugFlag & 2) != 0 )
KsepDebugPrint(0i64, "KSE: Cannot add hardware id until the kshim engine is initialized\n");
KsepLogError(0, "KSE: Cannot add hardware id until the kshim engine is initialized\n");
return 0;
}
if( !HardwareId )
return 0;
RtlInitUnicodeString((PUNICODE_STRING)((char *)&v13 + 8), HardwareId, v1);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx((UINT64)v2, 0i64);
v5 = KsepCacheLookup((INT64)v2, (INT64)a2);
if( v5 )
{
LABEL_7:
v7 = 0;
goto LABEL_8;
}
KsepPoolAllocatePaged(0x38ui64);
v5 = (_QWORD *)v6;
if( v6 && KsepStringDuplicate((UNICODE_STRING *)(v6 + 40), HardwareId) >= 0 )
{
KsepCacheInsert((__int64)v2, (__int64)v5);
goto LABEL_7;
}
v7 = -1073741801;
LABEL_8:
v8 = _InterlockedExchangeAdd64(v2, 0xFFFFFFFFFFFFFFFFui64);
if( (v8 & 2) != 0 && (v8 & 4) == 0 )
ExfTryToWakePushLock(v2);
KeAbPostRelease((PVOID)v2);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
if( v7 < 0 )
{
if( v5 )
{
KsepStringFree((UNICODE_STRING *)(v5 + 5));
KsepPoolFreePaged(v5);
}
}
return v7;
}Referenced by:
PiProcessNewDeviceNode