Bagikan melalui


Makro EngAllocUserMem (winddi.h)

Fungsi EngAllocUserMem mengalokasikan blok memori dari ruang alamat proses saat ini dan menyisipkan tag yang disediakan penelepon sebelum alokasi.

Sintaks

void EngAllocUserMem(
  [in]  cj,
  [in]  tag
);

Parameter

[in] cj

Menentukan jumlah byte yang akan dialokasikan.

[in] tag

Menentukan tag kumpulan 4 byte yang secara unik mengidentifikasi driver yang melakukan alokasi memori. Untuk informasi selengkapnya tentang tag kumpulan, lihat ExAllocatePoolWithTag.

Mengembalikan nilai

Tidak ada

Keterangan

Proses dalam sistem operasi berbasis NT memiliki ruang alamat virtual 4 GB. 2 GB atas adalah memori sistem yang hanya dapat diakses oleh utas mode kernel; ruang ini identik di semua proses. 2 GB yang lebih rendah adalah memori pengguna yang dapat diakses oleh utas mode pengguna dan mode kernel; ruang ini unik untuk prosesnya. Memori yang dialokasikan oleh EngAllocUserMem dialokasikan dari memori pengguna 2 GB yang unik, dan dengan demikian hanya dapat diakses ketika driver grafis dipanggil dalam konteks utas tempat memori dialokasikan. Driver grafis selalu dijalankan dalam konteks pemanggil; artinya, driver grafis tidak dapat beralih konteks proses.

EngAllocUserMem sangat berguna untuk driver printer dengan bitmap besar yang hanya akan digunakan oleh proses saat ini. Alih-alih mengalokasikan dari kumpulan sistem, driver ini dapat mengalokasikan ruang dari ruang alamat proses saat ini. Driver perlu berolahraga dengan memori yang dialokasikan oleh EngAllocUserMem, karena aplikasi dapat mengubah memori ini. EngAllocUserMem hanya boleh digunakan untuk mengalokasikan gugus memori yang relatif besar, karena setiap alokasi membutuhkan setidaknya 64 KB ruang alamat virtual. Struktur data sensitif tidak boleh dialokasikan menggunakan fungsi ini. Selain itu, memori pengguna yang dialokasikan oleh fungsi ini tidak dapat diteruskan ke EngWritePrinter oleh pengandar pencetak.

Ketika memori tidak lagi diperlukan, memori dapat dibebaskan dengan panggilan ke fungsi EngFreeUserMem .

Untuk mengalokasikan memori pengguna dari ruang alamat proses yang berbeda, gunakan EngAllocPrivateUserMem.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Windows 2000 dan versi yang lebih baru dari sistem operasi Windows.
Target Platform Universal
Header winddi.h (termasuk Winddi.h)
Pustaka Win32k.lib
DLL Win32k.sys

Lihat juga

EngAllocPrivateUserMem

EngFreeUserMem