diff options
Diffstat (limited to 'crates/user/io_controls/src/main.rs')
| -rw-r--r-- | crates/user/io_controls/src/main.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/crates/user/io_controls/src/main.rs b/crates/user/io_controls/src/main.rs new file mode 100644 index 0000000..1c5e73c --- /dev/null +++ b/crates/user/io_controls/src/main.rs @@ -0,0 +1,41 @@ +use std::os::windows::io::AsRawHandle; + +use winioctl::{ioctl_none, ioctl_read, ioctl_write, DeviceType, Error}; + +const IOCTL_PRINT_VALUE: u32 = 0x800; +const IOCTL_READ_VALUE: u32 = 0x801; +const IOCTL_WRITE_VALUE: u32 = 0x802; + +ioctl_none!(ioctl_print_value, DeviceType::Unknown, IOCTL_PRINT_VALUE); +ioctl_read!(ioctl_read_value, DeviceType::Unknown, IOCTL_READ_VALUE, i32); +ioctl_write!( + ioctl_write_value, + DeviceType::Unknown, + IOCTL_WRITE_VALUE, + i32 +); + +fn main() -> Result<(), Error> { + let file = std::fs::OpenOptions::new() + .read(true) + .write(true) + .create(false) + .open("\\??\\Example")?; + let mut value = 0; + + unsafe { + ioctl_read_value(file.as_raw_handle(), &mut value)?; + } + + value += 1; + + unsafe { + ioctl_write_value(file.as_raw_handle(), &value)?; + } + + unsafe { + ioctl_print_value(file.as_raw_handle())?; + } + + Ok(()) +} |