Bagikan melalui


Mendukung I/O 32-Bit di Driver 64-Bit Anda

Windows di Windows (WOW64) memungkinkan aplikasi mode pengguna Microsoft Win32 berjalan pada Windows 64-bit. Ini dilakukan dengan mencegat panggilan fungsi Win32 dan mengonversi parameter dari jenis pointer 32-bit ke jenis pointer 64-bit yang sesuai sebelum melakukan transisi ke kernel 64-bit. Konversi ini, yang disebut thunking, dilakukan secara otomatis untuk semua fungsi Win32, dengan satu pengecualian penting: buffer data yang diteruskan ke DeviceIoControl. Konten buffer ini, yang diarahkan oleh parameter InputBuffer dan OutputBuffer , tidak dipisahkan, karena strukturnya khusus untuk driver.

Catatan Meskipun konten buffer tidak dikocok, pointer buffer dikonversi menjadi pointer 64-bit.

Aplikasi mode pengguna memanggil DeviceIoControl untuk mengirim permintaan I/O langsung ke driver mode kernel tertentu. Permintaan ini berisi kode kontrol I/O (IOCTL) atau kode kontrol sistem file (FSCTL) dan pointer ke buffer data input dan output. Format buffer data ini khusus untuk IOCTL atau FSCTL, yang pada gilirannya didefinisikan oleh driver mode kernel. Karena format buffer bersifat arbitrer, dan karena diketahui oleh driver dan bukan WOW64, tugas untuk menonjolkan data diserahkan kepada driver.

Driver 64-bit Anda harus mendukung I/O 32-bit jika semua hal berikut ini benar:

  • Driver mengekspos IOCTL (atau FSCTL) ke aplikasi mode pengguna.

  • Setidaknya salah satu buffer I/O yang digunakan oleh IOCTL berisi jenis data presisi pointer.

  • Kode IOCTL Anda tidak dapat dengan mudah ditulis ulang untuk menghilangkan penggunaan jenis data buffer presisi pointer.