CmpSetVideoBiosInformation

VOID __stdcall CmpSetVideoBiosInformation(PVOID SectionHandle, PVOID ParentHandle){
  unsigned int v4; 
  unsigned int v5; 
  unsigned int v6; 
  UINT8 *PoolWithTag; 
  WCHAR v8; 
  __int16 v9; 
  UINT8 *v10; 
  INT8 v11; 
  unsigned int v12; 
  PLARGE_INTEGER SectionOffset; 
  UINT64 AllocationType; 
  UINT64 AllocationTypea; 
  UINT64 Win32Protect; 
  UINT64 Win32Protecta; 
  PVOID BaseAddress; 
  LARGE_INTEGER v19; 
  struct _UNICODE_STRING UnicodeString; 
  ULONG_PTR ViewSize; 
  STRING v22; 
  struct _UNICODE_STRING DestinationString; 
  char SourceString[128]; 
  BaseAddress = 0i64;
  v19.QuadPart = 0i64;
  ViewSize = 4096i64;
  LODWORD(Win32Protect) = 4;
  LODWORD(AllocationType) = 0;
  v4 = 0;
  v22 = 0i64;
  UnicodeString = 0i64;
  DestinationString = 0i64;
  v5 = 786432;
  if( ZwMapViewOfSection(
         SectionHandle,
         (PVOID)0xFFFFFFFFFFFFFFFFi64,
         &BaseAddress,
         0i64,
         0x1000ui64,
         &v19,
         &ViewSize,
         ViewUnmap,
         AllocationType,
         Win32Protect) >= 0 )
  {
    v6 = ((*((_DWORD *)BaseAddress + 16) & 0xFFF0) + (*((_DWORD *)BaseAddress + 16) >> 12)) & 0xFFFF8000;
    if( v6 < 0xC0000 )
      v6 = 786432;
    v5 = v6;
    ZwUnmapViewOfSection((HANDLE)0xFFFFFFFFFFFFFFFFi64, BaseAddress);
  }
  LODWORD(Win32Protecta) = 4;
  LODWORD(AllocationTypea) = 0;
  BaseAddress = 0i64;
  ViewSize = 0x8000i64;
  v19.QuadPart = v5;
  if( ZwMapViewOfSection(
         SectionHandle,
         (PVOID)0xFFFFFFFFFFFFFFFFi64,
         &BaseAddress,
         0i64,
         0x8000ui64,
         &v19,
         &ViewSize,
         ViewUnmap,
         AllocationTypea,
         Win32Protecta) >= 0 )
  {
    PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, 0x1000ui64, 0x20204D43ui64);
    if( CmpGetBiosDate((PSTR)BaseAddress, 0x8000ui64, SourceString, 0) )
    {
      RtlInitUnicodeString(&DestinationString, L"VideoBiosDate", v8);
      RtlInitAnsiString(&v22, SourceString, v11);
      if( RtlAnsiStringToUnicodeString(&UnicodeString, &v22, 1u) >= 0 )
      {
        LODWORD(SectionOffset) = UnicodeString.Length + 2;
        ZwSetValueKey(ParentHandle, &DestinationString, 0i64, 1ui64, UnicodeString.Buffer, (UINT64)SectionOffset);
        RtlFreeAnsiString(&UnicodeString);
      }
    }
    if( PoolWithTag && CmpGetBiosVersion((PSTR)BaseAddress, 0x8000ui64, SourceString) )
    {
      v10 = PoolWithTag;
      do
      {
        RtlInitAnsiString(&v22, SourceString, v9);
        if( RtlAnsiStringToUnicodeString(&UnicodeString, &v22, 1u) >= 0 )
        {
          v12 = UnicodeString.Length + 2;
          memmove(v10, (UINT8 *)UnicodeString.Buffer, v12);
          v4 += v12;
          RtlFreeAnsiString(&UnicodeString);
          if( (unsigned __int64)v4 + 260 > 0x1000 )
            break;
          v10 += v12;
        }
      }
      while( CmpGetBiosVersion(0i64, 0i64, SourceString) );
      if( v4 - 1 <= 0xFFD )
      {
        *(_WORD *)v10 = 0;
        RtlInitUnicodeString(&DestinationString, L"VideoBiosVersion", v9);
        LODWORD(SectionOffset) = v4 + 2;
        ZwSetValueKey(ParentHandle, &DestinationString, 0i64, 7ui64, PoolWithTag, (UINT64)SectionOffset);
      }
    }
    ZwUnmapViewOfSection((HANDLE)0xFFFFFFFFFFFFFFFFi64, BaseAddress);
    if( PoolWithTag )
      ExFreePoolWithTag(PoolWithTag, 0);
  }
}

Referenced by:

CmpInitializeMachineDependentConfiguration