KseLookupHardwareId
NTSTATUS __stdcall KseLookupHardwareId(PWCHAR HardwareId){
WCHAR v1;
WCHAR v2;
PWCHAR v3;
ULONG_PTR v4;
NTSTATUS v6;
WCHAR v7;
PWCHAR v8;
_ETHREAD *v9;
_ETHREAD *CurrentThread;
_QWORD *i;
WCHAR *v13;
INT64 a2[2];
__int128 v15;
struct _UNICODE_STRING DestinationString;
__int64 v17;
v2 = *HardwareId;
v3 = HardwareId + 1;
v4 = qword_140C50370;
*(_OWORD *)a2 = 0i64;
if( v2 != 42 )
v3 = HardwareId;
v15 = 0i64;
v6 = -1073741275;
DestinationString = 0i64;
v17 = 0i64;
v7 = *v3;
if( *v3 )
{
v8 = v3;
while( v7 != 42 && v7 != 63 )
{
v7 = *++v8;
if( !*v8 )
goto LABEL_8;
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx(v4, 0i64);
for( i = *(_QWORD **)(v4 + 32); ; i = (_QWORD *)*i )
{
if( i == (_QWORD *)(v4 + 32) )
goto LABEL_10;
v13 = (WCHAR *)i[3];
if( v2 == 42 )
{
if( *v13 != 42 )
continue;
++v13;
}
if( AslStringPatternMatchW(v3, v13) )
{
v6 = 0;
goto LABEL_10;
}
}
}
LABEL_8:
RtlInitUnicodeString((PUNICODE_STRING)&DestinationString.Buffer, HardwareId, v1);
v9 = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)v9 + 242);
ExAcquirePushLockExclusiveEx(v4, 0i64);
if( KsepCacheLookup(v4, (INT64)a2) )
v6 = 0;
LABEL_10:
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)v4, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)v4);
KeAbPostRelease((PVOID)v4);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return v6;
}Referenced by:
AhcCacheQueryHwId