VslpLockPagesForTransfer
NTSTATUS __stdcall VslpLockPagesForTransfer(INT64 a1, INT64 a2, UINT64 a3, INT64 a4, CHAR a5){
unsigned int v5;
INT64 v6;
_MDL *v8;
unsigned int v9;
_MDL *PoolWithTag;
unsigned __int64 v11;
_MDL *v12;
int v13;
_MDL *Next;
unsigned __int64 v16;
int v17;
v17 = a4;
v5 = a3;
v6 = a2;
v8 = 0i64;
if( (a5 & 3) != 0 && (v11 = ((a2 & 0xFFF) + (unsigned int)a3 + 4095i64) & 0xFFFFFFFFFFFFF000ui64, v11 > 0x1FA000) )
{
v13 = -1073741811;
LABEL_16:
while( v8 )
{
Next = v8->Next;
v8->Next = 0i64;
if( (v8->MdlFlags & 2) != 0 )
MmUnlockPages((INT64)v8, v11, a3);
ExFreePoolWithTag(v8, 0);
v8 = Next;
}
return v13;
}
else
{
v12 = 0i64;
do
{
v16 = ((v6 & 0xFFF) + (unsigned __int64)v5 + 4095) >> 12;
v9 = 8 * v16 + 48;
if( (a5 & 1) != 0 )
v9 = 4096;
if( (a5 & 4) != 0 )
v9 = (v9 + 4095) & 0xFFFFF000;
PoolWithTag = (_MDL *)ExAllocatePoolWithTag(0x200ui64, v9, 1416850774i64);
v8 = PoolWithTag;
if( !PoolWithTag )
{
v8 = v12;
v13 = -1073741670;
goto LABEL_16;
}
PoolWithTag->Next = 0i64;
PoolWithTag->Size = 8 * (v16 + 6);
PoolWithTag->MdlFlags = 0;
PoolWithTag->StartVa = (void *)(v6 & 0xFFFFFFFFFFFFF000ui64);
PoolWithTag->ByteOffset = v6 & 0xFFF;
PoolWithTag->ByteCount = v5;
if( (a5 & 6) != 0 )
{
MmBuildMdlForNonPagedPool(PoolWithTag);
}
else if( v5 )
{
MiProbeAndLockPages((INT64)PoolWithTag, 0, v17 != 0);
}
v8->Next = v12;
v12 = v8;
v6 = (INT64)v8;
v5 = v9;
}
while( v9 > 0x1000 );
v13 = VslpLockMdlForTransfer(a1, (INT64)v8, a5);
if( v13 < 0 )
goto LABEL_16;
*(_DWORD *)(a1 + 64) |= 8u;
return 0;
}
}Referenced by:
VslAllocatePool
VslCapturePgoData
VslCaptureSecureImageIat
VslConnectSwInterrupt
VslCreateEnclave
VslCreateSecureImageSection
VslCreateSecureSection
VslDebugReadWriteSecureProcess
VslFillSecureAllocation
VslFinishStartSecureProcessor
VslGetEtwDebugId
VslGetOnDemandDebugChallenge
VslInitializeEnclave
VslInitializeSecureProcess
VslIumEfiRuntimeService
VslObtainHotPatchUndoTable
VslPrepareSecureImageRelocations
VslQuerySecureKernelProfileInformation
VslRegisterLogPages
VslRetrieveMailbox
VslStartSecureProcessor
VslTransferSecureImageVersionResource
VslValidateSecureImagePages
VslpSkMapBuffers