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