summaryrefslogtreecommitdiff
path: root/crates/user/io_controls/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/user/io_controls/src/main.rs')
-rw-r--r--crates/user/io_controls/src/main.rs41
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(())
+}