Rust में एक सरल ड्राइवर लिखना
- Rust भाषा का ecosystem हर दिन बढ़ रहा है, और यह एकमात्र mainstream भाषा है जो compile time पर memory और concurrency safety प्रदान करती है। इसका शक्तिशाली और समृद्ध build system (
cargo) और बढ़ती package संख्या (crates) भी इसके फायदे हैं।
- Rust एक system programming भाषा के रूप में C/C++ जैसे क्षेत्रों में उपयोग की जा सकती है। C types को Rust में बदलते समय होने वाली verbosity को उपयुक्त wrapper और macro से कम किया जा सकता है।
- इस लेख में Windows Kernel Programming पुस्तक में परिचित कराए गए "Booster" ड्राइवर का Rust संस्करण लिखकर thread priority बदलने का तरीका समझाया गया है।
शुरुआत करना
- ड्राइवर build की तैयारी के लिए Windows Drivers-rs को देखें, और WDK installation तथा LLVM installation की आवश्यकता होती है।
- नया Rust library project बनाकर ड्राइवर लिखा जा सकता है:
cargo new --lib booster
- CRT को statically link करने के लिए
build.rs फ़ाइल जोड़कर सेटिंग करनी होती है।
कोड लिखना
- kernel में standard library नहीं होती, इसलिए
#![no_std] का उपयोग करके शुरुआत की जाती है।
wdk_sys crate low-level kernel functions के साथ interoperability प्रदान करता है, और wdk crate high-level wrappers प्रदान करता है।
Vec और String alloc module में परिभाषित हैं, और global allocator उपलब्ध कराकर उनका उपयोग किया जा सकता है।
DriverEntry सभी Windows kernel drivers का entry point है, और Rust के println! macro का उपयोग करके debug output किया जा सकता है।
अनुरोधों को प्रोसेस करना
IRP_MJ_CREATE, IRP_MJ_CLOSE, IRP_MJ_WRITE requests को handle करना होता है।
boost_write function वह हिस्सा है जो वास्तव में thread priority बदलता है।
ThreadData structure का उपयोग करके ड्राइवर तक request पहुँचाई जाती है।
ड्राइवर इंस्टॉल और टेस्ट करना
- ड्राइवर फ़ाइल को
sc.exe tool का उपयोग करके install किया जा सकता है, और sc start से system में load किया जा सकता है।
- C++ application का उपयोग करके ड्राइवर के साथ communicate किया जा सकता है और सही structure पास करके test किया जा सकता है।
निष्कर्ष
- Rust में kernel driver लिखना संभव है, और उम्मीद है कि support तेज़ी से बेहतर होगा।
- Rust के फायदों का अधिकतम उपयोग करने के लिए safe wrappers बनाकर code की verbosity कम करना और
unsafe blocks से बचना महत्वपूर्ण है।
- इस लेख का code GitHub पर देखा जा सकता है: https://github.com/zodiacon/Booster
अभी कोई टिप्पणी नहीं है.