#![no_std]
pub const DEVICE_INTERFACE_GUID: [u8; 16] = [
0x78, 0x56, 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x12, 0x34, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, ];
pub const FILE_DEVICE_LEVIATHAN: u32 = 0x8000;
pub mod ioctl {
use super::FILE_DEVICE_LEVIATHAN;
const fn ctl_code(device_type: u32, function: u32, method: u32, access: u32) -> u32 {
(device_type << 16) | (access << 14) | (function << 2) | method
}
pub const METHOD_BUFFERED: u32 = 0;
pub const METHOD_IN_DIRECT: u32 = 1;
pub const METHOD_OUT_DIRECT: u32 = 2;
pub const METHOD_NEITHER: u32 = 3;
pub const FILE_ANY_ACCESS: u32 = 0;
pub const FILE_READ_ACCESS: u32 = 1;
pub const FILE_WRITE_ACCESS: u32 = 2;
pub const IOCTL_GET_VERSION: u32 =
ctl_code(FILE_DEVICE_LEVIATHAN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS);
pub const IOCTL_ECHO: u32 =
ctl_code(FILE_DEVICE_LEVIATHAN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS);
pub const IOCTL_GET_STATS: u32 =
ctl_code(FILE_DEVICE_LEVIATHAN, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS);
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Default)]
pub struct DriverStats {
pub read_count: u64,
pub write_count: u64,
pub ioctl_count: u64,
pub bytes_read: u64,
pub bytes_written: u64,
}
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct VersionInfo {
pub major: u16,
pub minor: u16,
pub patch: u16,
pub build: u16,
}
impl VersionInfo {
pub const fn new(major: u16, minor: u16, patch: u16, build: u16) -> Self {
Self { major, minor, patch, build }
}
}