Bagikan melalui


Membaca dan Menulis ke Daftar Perangkat di Driver UMDF 1.x

Peringatan

UMDF 2 adalah versi terbaru UMDF dan pengganti UMDF 1. Semua driver UMDF baru harus ditulis menggunakan UMDF 2. Tidak ada fitur baru yang ditambahkan ke UMDF 1 dan ada dukungan terbatas untuk UMDF 1 pada versi Windows 10 yang lebih baru. Driver Universal Windows harus menggunakan UMDF 2.

Sampel UMDF 1 yang diarsipkan dapat ditemukan di Windows 11, versi 22H2 - Pembaruan Sampel Driver Mei 2022.

Untuk informasi selengkapnya, lihat Memulai UMDF.

Mulai dari UMDF versi 1.11, kerangka kerja menyediakan serangkaian rutinitas untuk mengakses register di ruang memori dan ruang port I/O. Rutinitas akses register/port UMDF sangat mirip dengan rutinitas HAL yang digunakan oleh driver mode kernel. Setelah driver memetakan register seperti yang dijelaskan dalam Menemukan dan Memetakan Sumber Daya Perangkat Keras di Driver UMDF, driver menggunakan rutinitas READ/WRITE_REGISTER_Xxx untuk membaca dan menulis ke register individu. Untuk port I/O, driver memanggil rutinitas READ/WRITE_PORT_Xxx.

Contoh ini menunjukkan cara menulis ke register yang dipetakan memori.

VOID
CMyQueue::WriteToDevice(
    __in IWDFDevice3* pWdfDevice,
    __in UCHAR Value
    )
{
    //
    // Write the UCHAR value at offset 2 from register base
    //
    WRITE_REGISTER_UCHAR(pWdfDevice, 
                      (m_MyDevice->m_RegBase)+2, 
                       Value);
}

Secara default, UMDF secara internal menggunakan panggilan sistem untuk mengakses register yang dipetakan baik di ruang memori atau di ruang port I/O. Register di ruang port I/O selalu diakses melalui panggilan sistem. Namun, saat mengakses register yang dipetakan memori, driver UMDF dapat menyebabkan kerangka kerja memetakan register yang dipetakan memori ke ruang alamat mode pengguna dengan mengatur direktif INF UmdfRegisterAccessMode ke RegisterAccessUsingUserModeMapping. Beberapa driver mungkin perlu melakukan ini karena alasan performa. Lihat Menentukan Arahan WDF dalam File INF untuk daftar lengkap arahan UMDF INF.

Driver harus menggunakan rutinitas READ/WRITE_REGISTER_Xxx meskipun telah memetakan register ke mode pengguna. Rutinitas ini memvalidasi input driver dan memastikan bahwa driver tidak meminta akses ke lokasi yang tidak valid. Jarang, driver mungkin perlu mengakses register yang dipetakan mode pengguna secara langsung, tanpa menggunakan rutinitas ini. Untuk melakukannya, driver mengambil alamat yang dipetakan mode pengguna dengan memanggil IWDFDevice3::GetHardwareRegisterMappedAddress pada alamat dasar yang dipetakan. Karena UMDF tidak memvalidasi akses baca dan tulis yang dilakukan dengan cara ini, teknik ini tidak disarankan untuk akses pendaftaran.