Fungsi MmAllocateContiguousMemorySpecifyCache (ntddk.h)

Rutinitas MmAllocateContiguousMemorySpecifyCache mengalokasikan berbagai memori fisik yang berdampingan dan tidak bertepatan dan memetakannya ke ruang alamat sistem.

Sintaks

PVOID MmAllocateContiguousMemorySpecifyCache(
  [in]           SIZE_T              NumberOfBytes,
  [in]           PHYSICAL_ADDRESS    LowestAcceptableAddress,
  [in]           PHYSICAL_ADDRESS    HighestAcceptableAddress,
  [in, optional] PHYSICAL_ADDRESS    BoundaryAddressMultiple,
  [in]           MEMORY_CACHING_TYPE CacheType
);

Parameter

[in] NumberOfBytes

Ukuran, dalam byte, dari blok memori yang berdampingan untuk dialokasikan. Untuk informasi selengkapnya, lihat Keterangan.

[in] LowestAcceptableAddress

Alamat fisik terendah yang dapat digunakan pemanggil. Misalnya, jika perangkat hanya dapat mengatasi lokasi di atas 8 megabyte pertama dari rentang alamat memori fisik prosesor, driver untuk perangkat ini harus mengatur LowestAcceptableAddress ke 0x0000000000800000.

[in] HighestAcceptableAddress

Alamat fisik valid tertinggi yang dapat digunakan pemanggil. Misalnya, jika perangkat hanya dapat mengatasi lokasi dalam 16 megabyte pertama dari rentang alamat memori fisik prosesor, driver untuk perangkat ini harus mengatur HighestAcceptableAddress ke 0x0000000000FFFFFF.

[in, optional] BoundaryAddressMultiple

Alamat fisik beberapa yang tidak boleh dilintasi oleh buffer yang dialokasikan. Kelipatan alamat fisik harus selalu menjadi kekuatan dua. Parameter ini bersifat opsional dan dapat ditentukan sebagai nol untuk menunjukkan bahwa perangkat tidak memiliki batasan batas memori khusus. Untuk informasi selengkapnya, lihat Keterangan.

[in] CacheType

Menentukan nilai MEMORY_CACHING_TYPE , yang menunjukkan jenis penembolokan yang diizinkan untuk memori yang diminta.

Mengembalikan nilai

MmAllocateContiguousMemorySpecifyCache mengembalikan alamat virtual dasar untuk memori yang dialokasikan. Jika sistem tidak dapat mengalokasikan buffer yang diminta, rutinitas mengembalikan NULL.

Keterangan

MmAllocateContiguousMemorySpecifyCache mengalokasikan blok memori tidak bertumpuk yang berdampingan di ruang alamat fisik. Rutin memetakan blok ini ke blok memori virtual yang berdampingan di ruang alamat sistem dan mengembalikan alamat virtual dasar blok ini. Rutinitas menyelaraskan alamat awal alokasi memori yang berdekatan ke batas halaman memori.

Driver tidak boleh mengakses memori di luar ukuran alokasi yang diminta. Misalnya, pengembang tidak boleh berasumsi bahwa driver mereka dapat dengan aman menggunakan memori antara akhir alokasi yang diminta dan batas halaman berikutnya.

Karena memori fisik yang berdampingan biasanya dalam pasokan singkat, memori fisik harus digunakan dengan hemat dan hanya jika perlu. Driver yang harus menggunakan memori yang berdekatan harus mengalokasikan memori ini selama inisialisasi driver karena memori fisik cenderung menjadi terfragmentasi dari waktu ke waktu saat sistem operasi mengalokasikan dan membebaskan memori. Biasanya, driver memanggil MmAllocateContiguousMemorySpecifyCache dari rutinitas DriverEntry-nya untuk mengalokasikan buffer internal untuk penggunaan jangka panjang, dan membebaskan buffer tepat sebelum driver dibongkar.

Memori yang dialokasikan oleh MmAllocateContiguousMemorySpecifyCache harus dibebaskan ketika memori tidak lagi diperlukan. Panggil rutinitas MmFreeContiguousMemory untuk membebaskan memori yang dialokasikan oleh MmAllocateContiguousMemorySpecifyCache.

Jika Anda menentukan nilai bukan nol untuk parameter BoundaryAddressMultiple , rentang alamat fisik blok memori yang dialokasikan tidak akan melewati batas alamat yang merupakan kelipatan bilangan bulat dari nilai ini. Driver harus mengatur parameter ini ke nol kecuali nilai bukan nol diperlukan untuk mengatasi batasan perangkat keras. Misalnya, jika perangkat tidak dapat mentransfer data di seluruh batas fisik 16 megabyte, driver harus menentukan nilai 0x1000000 untuk parameter ini untuk memastikan bahwa alamat yang dilihat perangkat tidak dibungkus pada batas 16 megabyte.

Jika Anda menggunakan rutinitas MmAllocateContiguousMemorySpecifyCache pada komputer dengan memori dalam jumlah besar, performa sistem operasi mungkin sangat menuram ketika sistem mencoba membuat potongan memori yang berdekatan. Degradasi ini sangat berkurang dimulai dengan Windows Vista SP1 dan Windows Server 2008, tetapi memori yang berdekatan masih bisa mahal untuk dialokasikan. Untuk alasan ini, driver harus menghindari panggilan berulang ke MmAllocateContiguousMemorySpecifyCache. Sebagai gantinya, driver harus mengalokasikan semua buffer yang berdampingan yang diperlukan dalam rutinitas DriverEntry mereka dan menggunakan kembali buffer ini.

Memori yang dialokasikan MmAllocateContiguousMemorySpecifyCache tidak diinisialisasi. Driver mode kernel harus terlebih dahulu nol memori ini jika akan membuatnya terlihat oleh perangkat lunak mode pengguna (untuk menghindari kebocoran konten yang berpotensi istimewa).

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia dimulai dengan Windows 2000.
Target Platform Universal
Header ntddk.h (termasuk Wdm.h, Ntddk.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

Lihat juga

MmAllocateContiguousMemory

MmFreeContiguousMemory