ResFwGetContext
NTSTATUS __stdcall ResFwGetContext(VOID **Context){
char *v1;
char v3;
int v4;
unsigned int v5;
unsigned int v6;
PMDL *PagesForMdl;
PMDL *v8;
PMDL v9;
__int64 v10;
NTSTATUS result;
UINT64 CacheType;
UINT64 Flags;
v1 = 0i64;
if( !Context )
return -1073741811;
v3 = *(&SbiVmbusArrivalEvent + 368);
*Context = 0i64;
if( (v3 & 1) == 0 )
return -1073741823;
v4 = *(&SbiVmbusArrivalEvent + 99);
if( *(&SbiVmbusArrivalEvent + 100) >= *(&SbiVmbusArrivalEvent + 99) )
v4 = *(&SbiVmbusArrivalEvent + 100);
v5 = (*(&SbiVmbusArrivalEvent + 103) + v4 + *(&SbiVmbusArrivalEvent + 102) + 20479) & 0xFFFFF000;
v6 = ((v5 >> 3) + 4095) & 0xFFFFF000;
PagesForMdl = MmAllocatePagesForMdlEx(0i64, (PHYSICAL_ADDRESS)-1i64, 0i64, v5 + v6, MmCached, 5u);
v8 = PagesForMdl;
if( PagesForMdl )
{
if( (*((_BYTE *)PagesForMdl + 10) & 5) != 0 )
{
v9 = PagesForMdl[3];
}
else
{
LODWORD(Flags) = 1073741856;
LODWORD(CacheType) = 0;
v9 = (PMDL)MmMapLockedPagesSpecifyCache((_MDL *)PagesForMdl, 0, MmCached, 0i64, CacheType, Flags);
}
}
else
{
v9 = 0i64;
}
v10 = *(&SbiVmbusArrivalEvent + 52);
*(_QWORD *)(*(&SbiVmbusArrivalEvent + 52) + 8i64) = v8;
*(_QWORD *)(v10 + 16) = v9;
if( v9 )
v1 = (char *)v9 + v6;
*(_DWORD *)(v10 + 24) = v9 != 0i64 ? v5 + v6 : 0;
*(_DWORD *)(v10 + 248) = v9 != 0i64 ? v5 : 0;
*(_QWORD *)(v10 + 240) = v1;
qword_140C50460 = *(&SbiVmbusArrivalEvent + 70);
qword_140C50458 = *(&SbiVmbusArrivalEvent + 71);
result = 0;
*Context = (VOID *)v10;
return result;
}Referenced by:
BgGetContext