Pilih mode pengguna atau mode kernel
Penting
Platform cetak modern adalah sarana komunikasi pilihan Windows dengan printer. Kami menyarankan agar Anda menggunakan driver kelas kotak masuk IPP Microsoft, bersama dengan Print Support Apps (PSA), untuk menyesuaikan pengalaman cetak di Windows 10 dan 11 untuk pengembangan perangkat printer.
Untuk informasi selengkapnya, lihat Platform cetak modern dan panduan desain aplikasi dukungan Cetak.
Eksekusi mode pengguna DLL grafis printer memberikan keuntungan berikut daripada eksekusi mode kernel:
Ruang tumpukan tak terbatas.
Akses ke API Win32.
Lebih sedikit potensial untuk menyebabkan crash sistem.
Penelusuran kesalahan yang lebih mudah, dengan debugger mode pengguna.
Kemampuan floating-point yang lebih baik, karena penggunaan grafik fungsi titik mengambang DDI tidak diperlukan.
Kemampuan untuk memanggil DLL mode pengguna yang disesuaikan dan disediakan vendor yang bukan bagian dari arsitektur driver printer Microsoft Windows 2000 dan yang lebih baru yang dijelaskan
Di Windows Vista, tidak dimungkinkan untuk menginstal pengandar printer mode-kernel. Jika aplikasi mencoba melakukannya, fungsi AddPrinterDriver dan AddprinterDriverEx (dijelaskan dalam dokumentasi Windows SDK) akan gagal dengan kode kesalahan ERROR_KM_DRIVER_BLOCKED.
Tabel berikut menunjukkan mode eksekusi pengandar printer yang diizinkan:
Versi sistem operasi | Mode eksekusi DLL grafis printer yang diizinkan |
---|---|
Windows NT 4.0 | kernel |
Windows 2000 | pengguna atau kernel |
Windows XP dan Server 2003 | mode kernel tersedia untuk printer yang ada; mode pengguna diperlukan untuk penginstalan printer baru |
Windows Vista | pengguna |
Menggunakan DDI grafis dalam mode pengguna
DLL grafis printer mode pengguna tidak terbatas pada panggilan Layanan Dukungan GDI dan fungsi panggilan balik DDI grafis awalan Eng lainnya. Namun, ada beberapa aturan yang harus diikuti:
Seperti DLL grafis mode kernel, DLL grafis mode pengguna harus memanggil DDI grafis yang membuat atau memodifikasi permukaan gambar. Fungsi panggilan balik ini adalah Layanan Dukungan GDI, dan memanggil Win32 yang setara dengan fungsi gambar ini tidak diizinkan.
Untuk DLL mode pengguna, panggilan ke fungsi panggilan balik gambar ini disadap oleh klien GDI mode pengguna, yang kemudian meneruskan panggilan ke mesin penyajian grafis mode kernel (GRE) GDI.
Daftar fungsi DDI grafis awalan Eng berikut tidak dapat dipanggil oleh DLL mode pengguna:
DLL grafik printer mode pengguna dapat terus menggunakan fungsi DDI grafis untuk layanan floating-point GDI.
Mengonversi DLL grafis printer yang ada ke mode pengguna
Jika sebelumnya Anda telah mengembangkan DLL grafis printer yang dijalankan dalam mode kernel, Anda dapat mengonversi DLL ke eksekusi mode pengguna. Untuk mengonversi, tambahkan fungsi DrvQueryDriverInfo ke DLL, lalu ikuti aturan untuk membangun DLL grafis printer.
Membuat DLL grafis printer baru dalam mode pengguna
Untuk mengembangkan DLL grafis printer baru yang dijalankan dalam mode pengguna, Anda dapat terus menggunakan semua fungsi DDI grafis yang digunakan oleh DLL mode kernel. Namun, Anda juga memiliki opsi berikut:
Untuk fungsi awalan Eng yang memiliki setara Win32 yang tepat, disarankan agar Anda memanggil fungsi Win32. Tabel berikut mencantumkan fungsi awalan Eng ini, bersama dengan setara Win32 mereka.
Fungsi awalan Eng Setara Win32 EngAllocMem HeapAlloc EngAllocUserMem HeapAlloc EngEnumForms EnumForms EngFreeMem HeapFree EngFreeUserMem HeapFree EngFindImageProcAddress GetProcAddress EngGetForm GetForm EngGetLastError GetLastError EngGetPrinter GetPrinter EngGetPrinterData GetPrinterData EngGetPrinterDriver GetPrinterDriver EngLoadImage LoadLibrary EngMulDiv MulDiv EngSetLastError SetLastError EngSetPrinterData SetPrinterData EngUnloadImage FreeLibrary EngWritePrinter WritePrinter Untuk fungsi awalan Eng yang sesuai dengan fungsi Win32 dengan fungsi serupa, disarankan juga agar Anda memanggil fungsi Win32. Tabel berikut mencantumkan beberapa fungsi awalan Eng ini, bersama dengan rekan Win32 mereka.
Fungsi awalan Eng Setara Win32 EngAcquireSemaphore EnterCriticalSection EngCreateSemaphore Alokasikan objek CRITICAL_SECTION, dan inisialisasi menggunakan panggilan ke fungsi Win32 InitializeCriticalSection. EngDeleteSemaphore DeleteCriticalSection EngFindResource FindResource EngFreeModule FreeLibrary EngLoadModule LoadLibrary EngMultiByteToWideChar MultiByteToWideChar EngQueryLocalTime GetLocalTime EngReleaseSemaphore ReleaseSemaphore EngWideCharToMultiByte WideCharToMultiByte Untuk fungsi yang membuat atau memodifikasi layanan gambar, driver baru harus terus memanggil layanan dukungan GDI dan bukan setara Win32 mereka.
Alih-alih menggunakan fungsi DDI grafis untuk Layanan Floating-Point GDI, Anda dapat menggunakan jenis data FLOAT.