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