KseLookupHardwareId
NTSTATUS __stdcall KseLookupHardwareId(WCHAR *HardwareId){
WCHAR v1;
WCHAR *v2;
_EX_PUSH_LOCK *v3;
NTSTATUS v5;
wchar_t v6;
WCHAR *v7;
_ETHREAD *v8;
_ETHREAD *CurrentThread;
_EX_PUSH_LOCK *i;
wchar_t *bf_0;
__int128 SearchObject[2];
_UNICODE_STRING DestinationString;
__int64 v15;
v1 = *HardwareId;
v2 = HardwareId + 1;
v3 = qword_140C50370;
SearchObject[0] = 0i64;
if( v1 != 42 )
v2 = HardwareId;
SearchObject[1] = 0i64;
v5 = -1073741275;
DestinationString = 0i64;
v15 = 0i64;
v6 = *v2;
if( *v2 )
{
v7 = v2;
while( v6 != 42 && v6 != 63 )
{
v6 = *++v7;
if( !*v7 )
goto LABEL_8;
}
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(v3, 0i64);
for( i = (_EX_PUSH_LOCK *)v3[4]._bf_0; ; i = (_EX_PUSH_LOCK *)i->_bf_0 )
{
if( i == &v3[4] )
goto LABEL_10;
bf_0 = (wchar_t *)i[3]._bf_0;
if( v1 == 42 )
{
if( *bf_0 != 42 )
continue;
++bf_0;
}
if( AslStringPatternMatchW(v2, bf_0) )
{
v5 = 0;
goto LABEL_10;
}
}
}
LABEL_8:
RtlInitUnicodeString((PUNICODE_STRING)&DestinationString.Buffer, HardwareId);
v8 = (_ETHREAD *)KeGetCurrentThread();
--v8->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(v3, 0i64);
if( KsepCacheLookup((_KSE_CACHE *)v3, SearchObject) )
v5 = 0;
LABEL_10:
if( (_InterlockedExchangeAdd64(&v3->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v3);
KeAbPostRelease(v3);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v5;
}Referenced by:
AhcCacheQueryHwId