summaryrefslogtreecommitdiff
path: root/crates/user
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
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')
-rw-r--r--crates/user/creating_devices/Cargo.toml5
-rw-r--r--crates/user/creating_devices/src/main.rs5
-rw-r--r--crates/user/io_controls/Cargo.toml8
-rw-r--r--crates/user/io_controls/src/main.rs41
-rw-r--r--crates/user/reading_and_writing/Cargo.toml5
-rw-r--r--crates/user/reading_and_writing/src/main.rs21
6 files changed, 85 insertions, 0 deletions
diff --git a/crates/user/creating_devices/Cargo.toml b/crates/user/creating_devices/Cargo.toml
new file mode 100644
index 0000000..b4770fd
--- /dev/null
+++ b/crates/user/creating_devices/Cargo.toml
@@ -0,0 +1,5 @@
+[package]
+name = "creating_devices"
+version = "0.1.0"
+edition = "2021"
+license = "MIT"
diff --git a/crates/user/creating_devices/src/main.rs b/crates/user/creating_devices/src/main.rs
new file mode 100644
index 0000000..ad1f136
--- /dev/null
+++ b/crates/user/creating_devices/src/main.rs
@@ -0,0 +1,5 @@
+fn main() -> Result<(), std::io::Error> {
+ let _file = std::fs::File::open("\\??\\Example")?;
+
+ Ok(())
+}
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(())
+}
diff --git a/crates/user/reading_and_writing/Cargo.toml b/crates/user/reading_and_writing/Cargo.toml
new file mode 100644
index 0000000..5f2895d
--- /dev/null
+++ b/crates/user/reading_and_writing/Cargo.toml
@@ -0,0 +1,5 @@
+[package]
+name = "reading_and_writing"
+version = "0.1.0"
+edition = "2021"
+license = "MIT"
diff --git a/crates/user/reading_and_writing/src/main.rs b/crates/user/reading_and_writing/src/main.rs
new file mode 100644
index 0000000..ff6d5d7
--- /dev/null
+++ b/crates/user/reading_and_writing/src/main.rs
@@ -0,0 +1,21 @@
+use std::io::{Read, Write};
+
+fn main() -> Result<(), std::io::Error> {
+ let mut file = std::fs::OpenOptions::new()
+ .read(true)
+ .write(true)
+ .create(false)
+ .open("\\??\\Example")?;
+
+ file.write_all("Hello, World!".as_bytes())?;
+
+ let mut data = vec![0u8; 4096];
+ let size = file.read(&mut data)?;
+
+ match std::str::from_utf8(&data[..size]) {
+ Ok(s) => println!("read {} bytes from \"{}\"", size, s),
+ _ => println!("read {} bytes: {:x?}", size, &data[..size]),
+ }
+
+ Ok(())
+}