Driver Pembaca WDM
Rutinitas yang diperlukan
Rutinitas berikut diperlukan oleh driver pembaca WDM.
DriverEntry
Menginisialisasi objek driver dan tabel pengiriman.
TambahkanDevice
Membuat objek perangkat untuk pembaca kartu pintar. Selain itu, AddDevice dapat memanggil salah satu rutinitas pustaka driver berikut:
- SmartcardInitialize (WDM) untuk menyelesaikan inisialisasi driver. Memanggil rutinitas ini di AddDevice adalah wajib.
- SmartcardLogError (WDM) untuk mencatat kesalahan. Driver harus memanggil rutinitas ini di AddDevice jika SmartcardInitialize (WDM) gagal.
- SmartcardCreateLink (WDM) untuk membuat tautan simbolis untuk perangkat pembaca di registri.
Membongkar
Menghapus pengandar dari sistem.
DispatchCreate
-dan-
DispatchClose
Mendukung IRP_MJ_CREATE dan IRP_MJ_CLOSE<, masing-masing. Untuk membuat koneksi ke pembaca, manajer sumber daya mengirim IRP_MJ_CREATE ke driver pembaca. Untuk memutuskan koneksi, manajer sumber daya mengirim IRP_MJ_CLOSE.
DispatchCleanup
Mendukung IRP_MJ_CLEANUP, yang dikirim manajer sumber daya ke driver pembaca untuk membatalkan permintaan I/O yang tertunda.
DispatchPnP
Mendukung IRP_MJ_PNP
DispatchPower
Mendukung IRP_MJ_POWER.
DispatchDeviceControl
Mendukung IRP_MJ_DEVICE_CONTROL dan merupakan titik masuk utama untuk permintaan kartu pintar. Setelah menerima IRP_MJ_DEVICE_CONTROL, DispatchDeviceControl harus segera memanggil SmartcardDeviceControl (WDM), yang merupakan rutinitas pustaka driver kartu pintar yang menangani permintaan kontrol perangkat. Contoh kode berikut menunjukkan cara memanggil rutinitas pustaka ini dari driver WDM:
NTSTATUS
DriverDeviceControl(
PDEVICE_OBJECT DeviceObject,
PIRP Irp
)
{
PDEVICE_EXTENSION deviceExtension = DeviceObject -> DeviceExtension;
return SmartcardDeviceControl(
&(deviceExtension->SmartcardExtension),
Irp
);
Jika tidak dapat menangani IOCTL tertentu yang ditunjukkan dalam panggilan, SmartcardDeviceControl akan memanggil panggilan balik driver untuk permintaan IOCTL yang tidak diketahui.