WmipFindSMBiosStructure

INT64 __fastcall WmipFindSMBiosStructure(UINT8 Type, VOID **StructPtr, VOID **MapPtr, UINT64 *MapSize){
  VOID **v6; 
  _ETHREAD *CurrentThread; 
  int v9; 
  VOID *v10; 
  _BYTE *v11; 
  _BYTE *v12; 
  _WORD *i; 
  int v15; 
  v6 = StructPtr;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  LOBYTE(StructPtr) = 1;
  ExAcquireResourceSharedLite(&WmipSMBiosLock, (BOOL)StructPtr);
  v9 = 0;
  v15 = 0;
  if( WmipSMBiosTablePhysicalAddress.QuadPart )
  {
    MmMapIoSpaceEx(WmipSMBiosTablePhysicalAddress, (unsigned int)WmipSMBiosTableLength, 4ui64);
    *MapPtr = v10;
    if( v10 )
    {
      *(_DWORD *)MapSize = WmipSMBiosTableLength;
      v11 = *MapPtr;
      goto LABEL_7;
    }
    v9 = -1073741670;
  }
  else
  {
    v9 = -1073741823;
  }
  v11 = 0i64;
  v15 = v9;
LABEL_7:
  if( v9 < 0 )
  {
LABEL_20:
    ExReleaseResourceLite(&WmipSMBiosLock);
    KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
    return(unsigned int)v15;
  }
  *v6 = 0i64;
  v12 = &v11[(unsigned int)WmipSMBiosTableLength];
  v15 = -1073741823;
  while( v11 < v12 )
  {
    if( *v11 == Type )
    {
      *v6 = v11;
      v15 = 0;
      break;
    }
    for( i = &v11[(unsigned __int8)v11[1]]; *i && i < (_WORD *)v12; i = (_WORD *)((char *)i + 1) )
      ;
    v11 = i + 1;
  }
  if( v15 < 0 )
  {
    if( *MapPtr )
      MmUnmapIoSpace(*MapPtr, *(unsigned int *)MapSize);
    goto LABEL_20;
  }
  return(unsigned int)v15;
}

Referenced by:

WmipGetSMBiosEventlog
WmipGetSysIds