MmSetPermanentCacheAttribute
NTSTATUS __stdcall MmSetPermanentCacheAttribute(
_LARGE_INTEGER StartAddress,
_LARGE_INTEGER NumberOfBytes,
_MEMORY_CACHING_TYPE CacheType,
UINT64 Flags){
NTSTATUS result;
unsigned __int64 v5;
unsigned __int64 v6;
VOID *Pool;
void *v8;
VOID *v9;
NTSTATUS v10;
int v11;
v11 = 0;
if( KeGetCurrentIrql() )
return -1073741811;
if( (Flags & 0xFFFFFFFE) != 0 )
return -1073741582;
if( (StartAddress.anonymous_0.LowPart & 0xFFF) != 0 )
return -1073741585;
if( (NumberOfBytes.anonymous_0.LowPart & 0xFFF) != 0 )
return -1073741584;
v5 = (unsigned __int64)StartAddress.QuadPart >> 12;
v6 = (unsigned __int64)NumberOfBytes.QuadPart >> 12;
if( !((unsigned __int64)NumberOfBytes.QuadPart >> 12) )
return -1073741584;
if( CacheType != MmCached )
return -1073741583;
Pool = MiAllocatePool(64i64, 0x30ui64, 0x6F49694Dui64);
v8 = Pool;
if( !Pool )
return -1073741670;
*((_QWORD *)Pool + 3) = v5;
*((_DWORD *)Pool + 10) = 1;
*((_QWORD *)Pool + 4) = v5 + v6 - 1;
v10 = 0;
v9 = Pool;
KeGenericCallDpc((__int64)MiMakeIoRangePermanentDpc, (__int64)&v9);
result = v10;
if( v10 < 0 )
{
ExFreePoolWithTag(v8, 0);
return v10;
}
return result;
}Referenced by:
No references.