summaryrefslogtreecommitdiff
path: root/crates
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
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')
-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
-rw-r--r--crates/windows-kernel-rs/examples/creating_devices/Cargo.toml2
-rw-r--r--crates/windows-kernel-rs/examples/io_controls/Cargo.toml2
-rw-r--r--crates/windows-kernel-rs/examples/reading_and_writing/Cargo.toml2
9 files changed, 88 insertions, 3 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(())
+}
diff --git a/crates/windows-kernel-rs/examples/creating_devices/Cargo.toml b/crates/windows-kernel-rs/examples/creating_devices/Cargo.toml
index 1a7fbc4..d5966c8 100644
--- a/crates/windows-kernel-rs/examples/creating_devices/Cargo.toml
+++ b/crates/windows-kernel-rs/examples/creating_devices/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "creating_devices"
+name = "creating_devices_example"
version = "0.1.0"
authors = ["Fuwn <[email protected]>"]
edition = "2021"
diff --git a/crates/windows-kernel-rs/examples/io_controls/Cargo.toml b/crates/windows-kernel-rs/examples/io_controls/Cargo.toml
index 1d8e6a5..cc7222b 100644
--- a/crates/windows-kernel-rs/examples/io_controls/Cargo.toml
+++ b/crates/windows-kernel-rs/examples/io_controls/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "io_controls"
+name = "io_controls_example"
version = "0.1.0"
authors = ["Fuwn <[email protected]>"]
edition = "2021"
diff --git a/crates/windows-kernel-rs/examples/reading_and_writing/Cargo.toml b/crates/windows-kernel-rs/examples/reading_and_writing/Cargo.toml
index 2e6dad0..463cb7a 100644
--- a/crates/windows-kernel-rs/examples/reading_and_writing/Cargo.toml
+++ b/crates/windows-kernel-rs/examples/reading_and_writing/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "reading_and_writing"
+name = "reading_and_writing_example"
version = "0.1.0"
authors = ["Fuwn <[email protected]>"]
edition = "2021"