summaryrefslogtreecommitdiff
path: root/crates/user/io_controls
diff options
context:
space:
mode:
authorFuwn <[email protected]>2022-01-04 15:31:37 -0800
committerFuwn <[email protected]>2022-01-04 15:31:37 -0800
commit651d0f46df0acb38b9d157dad234ae2cada79a90 (patch)
treed2079f9f68f7ef89e7498d07eb306f17040422c8 /crates/user/io_controls
parentchore(crates): migrate to edition 2021 (diff)
downloaddriver-651d0f46df0acb38b9d157dad234ae2cada79a90.tar.xz
driver-651d0f46df0acb38b9d157dad234ae2cada79a90.zip
feat(crates): new userspace examples
Thanks, StephanvanSchaik.
Diffstat (limited to 'crates/user/io_controls')
-rw-r--r--crates/user/io_controls/Cargo.toml8
-rw-r--r--crates/user/io_controls/src/main.rs41
2 files changed, 49 insertions, 0 deletions
diff --git a/crates/user/io_controls/Cargo.toml b/crates/user/io_controls/Cargo.toml
new file mode 100644
index 0000000..5d49408
--- /dev/null
+++ b/crates/user/io_controls/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "io_controls"
+version = "0.1.0"
+edition = "2021"
+license = "MIT"
+
+[target.'cfg(windows)'.dependencies]
+winioctl = { path = "../../winioctl" }
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(())
+}