Bagikan melalui


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:

    EngCreatePath

    EngGetType1FontList

    EngMapModule

    EngDebugBreak

  • 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.