2 poin oleh GN⁺ 2025-02-10 | Belum ada komentar. | Bagikan ke WhatsApp

Menulis driver sederhana dengan Rust

  • Ekosistem bahasa Rust terus berkembang setiap hari dan merupakan satu-satunya bahasa arus utama yang menyediakan keamanan memori dan konkurensi pada waktu kompilasi. Sistem build yang kuat dan kaya (cargo) serta jumlah paket (crates) yang terus bertambah juga menjadi kelebihannya.
  • Sebagai bahasa pemrograman sistem, Rust dapat digunakan di ranah yang sama dengan C/C++. Verbositas saat mengonversi tipe C ke Rust dapat dikurangi dengan wrapper dan macro yang sesuai.
  • Artikel ini menjelaskan cara mengubah prioritas thread dengan menulis versi Rust dari driver "Booster" yang diperkenalkan dalam buku Windows Kernel Programming.

Memulai

  • Untuk menyiapkan build driver, rujuk ke Windows Drivers-rs, dan diperlukan instalasi WDK serta LLVM.
  • Anda dapat membuat driver dengan membuat proyek library Rust baru: cargo new --lib booster
  • Anda perlu menambahkan file build.rs untuk mengatur agar CRT ditautkan secara statis.

Menulis kode

  • Karena tidak ada standard library di kernel, mulai dengan menggunakan #![no_std].
  • Crate wdk_sys menyediakan interoperabilitas dengan fungsi kernel tingkat rendah, dan crate wdk menyediakan wrapper tingkat tinggi.
  • Vec dan String didefinisikan di modul alloc, dan dapat digunakan dengan menyediakan global allocator.
  • DriverEntry adalah titik masuk semua driver kernel Windows, dan output debug dapat dilakukan dengan macro println! milik Rust.

Menangani permintaan

  • Permintaan IRP_MJ_CREATE, IRP_MJ_CLOSE, dan IRP_MJ_WRITE harus ditangani.
  • Fungsi boost_write adalah bagian yang benar-benar mengubah prioritas thread.
  • Struktur ThreadData digunakan untuk mengirim permintaan ke driver.

Instalasi dan pengujian driver

  • File driver dapat diinstal menggunakan alat sc.exe, dan dapat dimuat ke sistem dengan sc start.
  • Pengujian dapat dilakukan dengan menggunakan aplikasi C++ untuk berkomunikasi dengan driver dan mengirimkan struktur yang benar.

Kesimpulan

  • Menulis driver kernel dengan Rust memang memungkinkan, dan dukungannya diperkirakan akan meningkat dengan cepat.
  • Untuk memanfaatkan kelebihan Rust semaksimal mungkin, penting untuk membuat wrapper yang aman guna mengurangi verbositas kode dan menghindari blok unsafe.
  • Kode untuk artikel ini dapat dilihat di GitHub: https://github.com/zodiacon/Booster

Belum ada komentar.

Belum ada komentar.