mirror of
https://github.com/MSxDOS/ntapi
synced 2026-06-08 11:37:18 +00:00
Use const fn wherever possible, update macros
This commit is contained in:
+16
-21
@@ -6,18 +6,18 @@
|
||||
#[macro_export]
|
||||
macro_rules! EXTERN {
|
||||
(extern $c:tt {$(
|
||||
fn $n:ident ($( $p:tt $(: $t:ty)*),* $(,)*) $(-> $r:ty)*;
|
||||
fn $n:ident ($( $p:tt $(: $t:ty)?),* $(,)?) $(-> $r:ty)?;
|
||||
)+}) => {
|
||||
#[cfg_attr(all(target_env = "msvc", feature = "user"), link(name = "ntdll"))]
|
||||
#[cfg_attr(all(target_env = "msvc", feature = "kernel"), link(name = "ntoskrnl"))]
|
||||
extern $c {$(
|
||||
pub fn $n(
|
||||
$($p $(: $t)*),*
|
||||
) $(-> $r)*;
|
||||
$($p $(: $t)?),*
|
||||
) $(-> $r)?;
|
||||
)+}
|
||||
$(
|
||||
#[cfg(feature = "func-types")]
|
||||
pub type $n = unsafe extern $c fn($($p $(: $t)*),*) $(-> $r)*;
|
||||
pub type $n = unsafe extern $c fn($($p $(: $t)?),*) $(-> $r)?;
|
||||
)+
|
||||
};
|
||||
(extern $c:tt {$(
|
||||
@@ -31,7 +31,7 @@ macro_rules! EXTERN {
|
||||
}
|
||||
#[macro_export]
|
||||
macro_rules! FIELD_OFFSET {
|
||||
($_type:ident, $field:ident$(.$cfields:ident)*) => {
|
||||
($_type:ty, $field:ident$(.$cfields:ident)*) => {
|
||||
unsafe {
|
||||
&(*$crate::_core::ptr::null::<$_type>()).$field$(.$cfields)* as *const _ as usize
|
||||
}
|
||||
@@ -43,15 +43,15 @@ macro_rules! BITFIELD {
|
||||
]) => {
|
||||
impl $base {$(
|
||||
#[inline]
|
||||
pub fn $thing(&self) -> $fieldtype {
|
||||
let size = $crate::_core::mem::size_of::<$fieldtype>() * 8;
|
||||
self.$field << (size - $r.end) >> (size - $r.end + $r.start)
|
||||
pub const fn $thing(&self) -> $fieldtype {
|
||||
const SIZE: usize = $crate::_core::mem::size_of::<$fieldtype>() * 8;
|
||||
self.$field << (SIZE - $r.end) >> (SIZE - $r.end + $r.start)
|
||||
}
|
||||
#[inline]
|
||||
pub fn $set_thing(&mut self, val: $fieldtype) {
|
||||
let mask = ((1 << ($r.end - $r.start)) - 1) << $r.start;
|
||||
self.$field &= !mask;
|
||||
self.$field |= (val << $r.start) & mask;
|
||||
const MASK: $fieldtype = ((1 << ($r.end - $r.start)) - 1) << $r.start;
|
||||
self.$field &= !MASK;
|
||||
self.$field |= (val << $r.start) & MASK;
|
||||
}
|
||||
)+}
|
||||
};
|
||||
@@ -61,23 +61,18 @@ macro_rules! BITFIELD {
|
||||
impl $base {$(
|
||||
#[inline]
|
||||
pub unsafe fn $thing(&self) -> $fieldtype {
|
||||
let size = $crate::_core::mem::size_of::<$fieldtype>() * 8;
|
||||
self.$field << (size - $r.end) >> (size - $r.end + $r.start)
|
||||
const SIZE: usize = $crate::_core::mem::size_of::<$fieldtype>() * 8;
|
||||
self.$field << (SIZE - $r.end) >> (SIZE - $r.end + $r.start)
|
||||
}
|
||||
#[inline]
|
||||
pub unsafe fn $set_thing(&mut self, val: $fieldtype) {
|
||||
let mask = ((1 << ($r.end - $r.start)) - 1) << $r.start;
|
||||
self.$field &= !mask;
|
||||
self.$field |= (val << $r.start) & mask;
|
||||
const MASK: $fieldtype = ((1 << ($r.end - $r.start)) - 1) << $r.start;
|
||||
self.$field &= !MASK;
|
||||
self.$field |= (val << $r.start) & MASK;
|
||||
}
|
||||
)+}
|
||||
};
|
||||
}
|
||||
macro_rules! CTL_CODE {
|
||||
($DeviceType:expr, $Function:expr, $Method:expr, $Access:expr) => {
|
||||
($DeviceType << 16) | ($Access << 14) | ($Function << 2) | $Method
|
||||
};
|
||||
}
|
||||
macro_rules! UNION {
|
||||
($(#[$attrs:meta])* union $name:ident {
|
||||
$($variant:ident: $ftype:ty,)+
|
||||
|
||||
+3
-3
@@ -11,15 +11,15 @@ pub type PRTL_ATOM = *mut RTL_ATOM;
|
||||
pub const NT_FACILITY_MASK: ULONG = 0xfff;
|
||||
pub const NT_FACILITY_SHIFT: ULONG = 16;
|
||||
#[inline]
|
||||
pub fn NT_FACILITY(Status: NTSTATUS) -> ULONG {
|
||||
pub const fn NT_FACILITY(Status: NTSTATUS) -> ULONG {
|
||||
(Status as u32) >> NT_FACILITY_SHIFT & NT_FACILITY_MASK
|
||||
}
|
||||
#[inline]
|
||||
pub fn NT_NTWIN32(Status: NTSTATUS) -> bool {
|
||||
pub const fn NT_NTWIN32(Status: NTSTATUS) -> bool {
|
||||
NT_FACILITY(Status) == FACILITY_NTWIN32 as u32
|
||||
}
|
||||
#[inline]
|
||||
pub fn WIN32_FROM_NTSTATUS(Status: NTSTATUS) -> ULONG {
|
||||
pub const fn WIN32_FROM_NTSTATUS(Status: NTSTATUS) -> ULONG {
|
||||
(Status as u32) & 0xffff
|
||||
}
|
||||
STRUCT!{struct CLIENT_ID {
|
||||
|
||||
+7
-7
@@ -21,23 +21,23 @@ pub const GDI_HANDLE_UNIQUE_SHIFT: ULONG = 24;
|
||||
pub const GDI_HANDLE_UNIQUE_BITS: ULONG = 8;
|
||||
pub const GDI_HANDLE_UNIQUE_MASK: ULONG = 0xff;
|
||||
#[inline]
|
||||
pub fn GDI_HANDLE_INDEX(Handle: ULONG) -> ULONG {
|
||||
pub const fn GDI_HANDLE_INDEX(Handle: ULONG) -> ULONG {
|
||||
Handle & GDI_HANDLE_INDEX_MASK
|
||||
}
|
||||
#[inline]
|
||||
pub fn GDI_HANDLE_TYPE(Handle: ULONG) -> ULONG {
|
||||
pub const fn GDI_HANDLE_TYPE(Handle: ULONG) -> ULONG {
|
||||
Handle >> GDI_HANDLE_TYPE_SHIFT & GDI_HANDLE_TYPE_MASK
|
||||
}
|
||||
#[inline]
|
||||
pub fn GDI_HANDLE_ALTTYPE(Handle: ULONG) -> ULONG {
|
||||
pub const fn GDI_HANDLE_ALTTYPE(Handle: ULONG) -> ULONG {
|
||||
Handle >> GDI_HANDLE_ALTTYPE_SHIFT & GDI_HANDLE_ALTTYPE_MASK
|
||||
}
|
||||
#[inline]
|
||||
pub fn GDI_HANDLE_STOCK(Handle: ULONG) -> ULONG {
|
||||
pub const fn GDI_HANDLE_STOCK(Handle: ULONG) -> ULONG {
|
||||
Handle >> GDI_HANDLE_STOCK_SHIFT & GDI_HANDLE_STOCK_MASK
|
||||
}
|
||||
#[inline]
|
||||
pub fn GDI_MAKE_HANDLE(Index: ULONG, Unique: ULONG) -> ULONG {
|
||||
pub const fn GDI_MAKE_HANDLE(Index: ULONG, Unique: ULONG) -> ULONG {
|
||||
Unique << GDI_HANDLE_INDEX_BITS | Index
|
||||
}
|
||||
pub const GDI_DEF_TYPE: ULONG = 0;
|
||||
@@ -72,12 +72,12 @@ pub const GDI_DRVOBJ_TYPE: ULONG = 28;
|
||||
pub const GDI_DCIOBJ_TYPE: ULONG = 29;
|
||||
pub const GDI_SPOOL_TYPE: ULONG = 30;
|
||||
#[inline]
|
||||
pub fn GDI_CLIENT_TYPE_FROM_HANDLE(Handle: ULONG) -> ULONG {
|
||||
pub const fn GDI_CLIENT_TYPE_FROM_HANDLE(Handle: ULONG) -> ULONG {
|
||||
Handle & (GDI_HANDLE_ALTTYPE_MASK << GDI_HANDLE_ALTTYPE_SHIFT | GDI_HANDLE_TYPE_MASK
|
||||
<< GDI_HANDLE_TYPE_SHIFT)
|
||||
}
|
||||
#[inline]
|
||||
pub fn GDI_CLIENT_TYPE_FROM_UNIQUE(Unique: ULONG) -> ULONG {
|
||||
pub const fn GDI_CLIENT_TYPE_FROM_UNIQUE(Unique: ULONG) -> ULONG {
|
||||
GDI_CLIENT_TYPE_FROM_HANDLE(Unique << 16)
|
||||
}
|
||||
pub const GDI_ALTTYPE_1: ULONG = 1 << GDI_HANDLE_ALTTYPE_SHIFT;
|
||||
|
||||
+43
-42
@@ -4,6 +4,7 @@
|
||||
// http://opensource.org/licenses/MIT>, at your option. This file may not be
|
||||
// copied, modified, or distributed except according to those terms.
|
||||
use crate::string::UTF16Const;
|
||||
use crate::winapi_local::um::winioctl::CTL_CODE;
|
||||
use winapi::shared::basetsd::ULONG_PTR;
|
||||
use winapi::shared::guiddef::GUID;
|
||||
use winapi::shared::minwindef::DWORD;
|
||||
@@ -1346,47 +1347,47 @@ pub const DEVICE_NAMED_PIPE: UTF16Const = UTF16Const(&[
|
||||
0x0064, 0x0050, 0x0069, 0x0070, 0x0065, 0x005C, 0u16,
|
||||
]);
|
||||
pub const FSCTL_PIPE_ASSIGN_EVENT: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_DISCONNECT: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_LISTEN: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_PEEK: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA);
|
||||
pub const FSCTL_PIPE_QUERY_EVENT: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_TRANSCEIVE: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA);
|
||||
pub const FSCTL_PIPE_WAIT: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_IMPERSONATE: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_SET_CLIENT_PROCESS: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_QUERY_CLIENT_PROCESS: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_GET_PIPE_ATTRIBUTE: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_SET_PIPE_ATTRIBUTE: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_GET_HANDLE_ATTRIBUTE: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_SET_HANDLE_ATTRIBUTE: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSCTL_PIPE_FLUSH: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA);
|
||||
pub const FSCTL_PIPE_INTERNAL_READ: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA);
|
||||
pub const FSCTL_PIPE_INTERNAL_WRITE: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA);
|
||||
pub const FSCTL_PIPE_INTERNAL_TRANSCEIVE: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA);
|
||||
pub const FSCTL_PIPE_INTERNAL_READ_OVFLOW: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA);
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_DISCONNECT: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_LISTEN: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_PEEK: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA);
|
||||
pub const FSTL_PIPE_QUERY_EVENT: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_TRANSCEIVE: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA);
|
||||
pub const FSTL_PIPE_WAIT: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_IMPERSONATE: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_SET_CLIENT_PROCESS: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_QUERY_CLIENT_PROCESS: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_GET_PIPE_ATTRIBUTE: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_SET_PIPE_ATTRIBUTE: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_GET_CONNECTION_ATTRIBUTE: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_SET_CONNECTION_ATTRIBUTE: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_GET_HANDLE_ATTRIBUTE: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_SET_HANDLE_ATTRIBUTE: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS);
|
||||
pub const FSTL_PIPE_FLUSH: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA);
|
||||
pub const FSTL_PIPE_INTERNAL_READ: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA);
|
||||
pub const FSTL_PIPE_INTERNAL_WRITE: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA);
|
||||
pub const FSTL_PIPE_INTERNAL_TRANSCEIVE: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA);
|
||||
pub const FSTL_PIPE_INTERNAL_READ_OVFLOW: u32 =
|
||||
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA);
|
||||
pub const FILE_PIPE_READ_DATA: u32 = 0x00000000;
|
||||
pub const FILE_PIPE_WRITE_SPACE: u32 = 0x00000001;
|
||||
STRUCT!{struct FILE_PIPE_ASSIGN_EVENT_BUFFER {
|
||||
@@ -1433,7 +1434,7 @@ pub type PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX = *mut FILE_PIPE_CLIENT_PROCESS_BUF
|
||||
pub const MAILSLOT_CLASS_FIRSTCLASS: u32 = 1;
|
||||
pub const MAILSLOT_CLASS_SECONDCLASS: u32 = 2;
|
||||
pub const FSCTL_MAILSLOT_PEEK: u32 =
|
||||
CTL_CODE!(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA);
|
||||
CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA);
|
||||
STRUCT!{struct FILE_MAILSLOT_PEEK_BUFFER {
|
||||
ReadDataAvailable: ULONG,
|
||||
NumberOfMessages: ULONG,
|
||||
|
||||
+4
-4
@@ -197,16 +197,16 @@ BITFIELD!{unsafe LDR_DATA_TABLE_ENTRY_u2 Flags: ULONG [
|
||||
]}
|
||||
pub type PLDR_DATA_TABLE_ENTRY = *mut LDR_DATA_TABLE_ENTRY;
|
||||
#[inline]
|
||||
pub fn LDR_IS_DATAFILE(DllHandle: ULONG_PTR) -> bool {
|
||||
pub const fn LDR_IS_DATAFILE(DllHandle: ULONG_PTR) -> bool {
|
||||
DllHandle & 1 != 0
|
||||
}
|
||||
#[inline]
|
||||
pub fn LDR_IS_IMAGEMAPPING(DllHandle: ULONG_PTR) -> bool {
|
||||
pub const fn LDR_IS_IMAGEMAPPING(DllHandle: ULONG_PTR) -> bool {
|
||||
DllHandle & 2 != 0
|
||||
}
|
||||
#[inline]
|
||||
pub fn LDR_IS_RESOURCE(DllHandle: ULONG_PTR) -> bool {
|
||||
LDR_IS_IMAGEMAPPING(DllHandle) || LDR_IS_DATAFILE(DllHandle)
|
||||
pub const fn LDR_IS_RESOURCE(DllHandle: ULONG_PTR) -> bool {
|
||||
(LDR_IS_IMAGEMAPPING(DllHandle) | LDR_IS_DATAFILE(DllHandle)) as u8 != 0 //fixme
|
||||
}
|
||||
EXTERN!{extern "system" {
|
||||
fn LdrLoadDll(
|
||||
|
||||
+5
-5
@@ -563,7 +563,7 @@ pub const PS_PROTECTED_SIGNER_MASK: UCHAR = 0xFF;
|
||||
pub const PS_PROTECTED_AUDIT_MASK: UCHAR = 0x08;
|
||||
pub const PS_PROTECTED_TYPE_MASK: UCHAR = 0x07;
|
||||
#[inline]
|
||||
pub fn PsProtectedValue(
|
||||
pub const fn PsProtectedValue(
|
||||
aSigner: PS_PROTECTED_SIGNER,
|
||||
aAudit: u8,
|
||||
aType: PS_PROTECTED_TYPE,
|
||||
@@ -1084,14 +1084,14 @@ ENUM!{enum PS_ATTRIBUTE_NUM {
|
||||
PsAttributeMax = 27,
|
||||
}}
|
||||
#[inline]
|
||||
pub fn PsAttributeValue(
|
||||
pub const fn PsAttributeValue(
|
||||
Number: PS_ATTRIBUTE_NUM,
|
||||
Thread: bool,
|
||||
Input: bool,
|
||||
Additive: bool,
|
||||
) -> ULONG_PTR {
|
||||
(Number & PS_ATTRIBUTE_NUMBER_MASK | if Thread { PS_ATTRIBUTE_THREAD } else { 0 }
|
||||
| if Input { PS_ATTRIBUTE_INPUT } else { 0 } | if Additive { PS_ATTRIBUTE_ADDITIVE } else { 0 }
|
||||
) -> ULONG_PTR { //fixme
|
||||
(Number & PS_ATTRIBUTE_NUMBER_MASK | [0, PS_ATTRIBUTE_THREAD][Thread as usize]
|
||||
| [0, PS_ATTRIBUTE_INPUT][Input as usize] | [0, PS_ATTRIBUTE_ADDITIVE][Additive as usize]
|
||||
) as usize
|
||||
}
|
||||
pub const PS_ATTRIBUTE_PARENT_PROCESS: ULONG_PTR = 0x00060000;
|
||||
|
||||
+15
-18
@@ -249,15 +249,15 @@ pub fn RtlInitializeSplayLinks(Links: &mut RTL_SPLAY_LINKS) {
|
||||
Links.RightChild = null_mut();
|
||||
}
|
||||
#[inline]
|
||||
pub fn RtlParent(Links: &RTL_SPLAY_LINKS) -> PRTL_SPLAY_LINKS {
|
||||
pub const fn RtlParent(Links: &RTL_SPLAY_LINKS) -> PRTL_SPLAY_LINKS {
|
||||
Links.Parent
|
||||
}
|
||||
#[inline]
|
||||
pub fn RtlLeftChild(Links: &RTL_SPLAY_LINKS) -> PRTL_SPLAY_LINKS {
|
||||
pub const fn RtlLeftChild(Links: &RTL_SPLAY_LINKS) -> PRTL_SPLAY_LINKS {
|
||||
Links.LeftChild
|
||||
}
|
||||
#[inline]
|
||||
pub fn RtlRightChild(Links: &RTL_SPLAY_LINKS) -> PRTL_SPLAY_LINKS {
|
||||
pub const fn RtlRightChild(Links: &RTL_SPLAY_LINKS) -> PRTL_SPLAY_LINKS {
|
||||
Links.RightChild
|
||||
}
|
||||
#[inline]
|
||||
@@ -417,7 +417,7 @@ STRUCT!{struct RTL_DYNAMIC_HASH_TABLE_ENTRY {
|
||||
}}
|
||||
pub type PRTL_DYNAMIC_HASH_TABLE_ENTRY = *mut RTL_DYNAMIC_HASH_TABLE_ENTRY;
|
||||
#[inline]
|
||||
pub fn HASH_ENTRY_KEY(x: &RTL_DYNAMIC_HASH_TABLE_ENTRY) -> ULONG_PTR {
|
||||
pub const fn HASH_ENTRY_KEY(x: &RTL_DYNAMIC_HASH_TABLE_ENTRY) -> ULONG_PTR {
|
||||
x.Signature
|
||||
}
|
||||
STRUCT!{struct RTL_DYNAMIC_HASH_TABLE_CONTEXT {
|
||||
@@ -459,23 +459,23 @@ pub fn RtlInitHashTableContextFromEnumerator(
|
||||
}
|
||||
// RtlReleaseHashTableContext
|
||||
#[inline]
|
||||
pub fn RtlTotalBucketsHashTable(HashTable: &RTL_DYNAMIC_HASH_TABLE) -> ULONG {
|
||||
pub const fn RtlTotalBucketsHashTable(HashTable: &RTL_DYNAMIC_HASH_TABLE) -> ULONG {
|
||||
HashTable.TableSize
|
||||
}
|
||||
#[inline]
|
||||
pub fn RtlNonEmptyBucketsHashTable(HashTable: &RTL_DYNAMIC_HASH_TABLE) -> ULONG {
|
||||
pub const fn RtlNonEmptyBucketsHashTable(HashTable: &RTL_DYNAMIC_HASH_TABLE) -> ULONG {
|
||||
HashTable.NonEmptyBuckets
|
||||
}
|
||||
#[inline]
|
||||
pub fn RtlEmptyBucketsHashTable(HashTable: &RTL_DYNAMIC_HASH_TABLE) -> ULONG {
|
||||
pub const fn RtlEmptyBucketsHashTable(HashTable: &RTL_DYNAMIC_HASH_TABLE) -> ULONG {
|
||||
HashTable.TableSize - HashTable.NonEmptyBuckets
|
||||
}
|
||||
#[inline]
|
||||
pub fn RtlTotalEntriesHashTable(HashTable: &RTL_DYNAMIC_HASH_TABLE) -> ULONG {
|
||||
pub const fn RtlTotalEntriesHashTable(HashTable: &RTL_DYNAMIC_HASH_TABLE) -> ULONG {
|
||||
HashTable.NumEntries
|
||||
}
|
||||
#[inline]
|
||||
pub fn RtlActiveEnumeratorsHashTable(HashTable: &RTL_DYNAMIC_HASH_TABLE) -> ULONG {
|
||||
pub const fn RtlActiveEnumeratorsHashTable(HashTable: &RTL_DYNAMIC_HASH_TABLE) -> ULONG {
|
||||
HashTable.NumEnumerators
|
||||
}
|
||||
EXTERN!{extern "system" {
|
||||
@@ -2490,22 +2490,19 @@ EXTERN!{extern "system" {
|
||||
) -> LOGICAL;
|
||||
}}
|
||||
#[inline]
|
||||
pub fn RtlIsEqualLuid(L1: &LUID, L2: &LUID) -> bool {
|
||||
L1.LowPart == L2.LowPart && L1.HighPart == L2.HighPart
|
||||
pub const fn RtlIsEqualLuid(L1: &LUID, L2: &LUID) -> bool {
|
||||
((L1.LowPart == L2.LowPart) & (L1.HighPart == L2.HighPart)) as u8 != 0 //fixme
|
||||
}
|
||||
#[inline]
|
||||
pub fn RtlIsZeroLuid(L1: &LUID) -> bool {
|
||||
pub const fn RtlIsZeroLuid(L1: &LUID) -> bool {
|
||||
(L1.LowPart | L1.HighPart as u32) == 0
|
||||
}
|
||||
#[inline]
|
||||
pub unsafe fn RtlConvertLongToLuid(Long: LONG) -> LUID {
|
||||
use core::mem::uninitialized;
|
||||
let mut tempLi: LARGE_INTEGER = uninitialized();
|
||||
*tempLi.QuadPart_mut() = Long as i64;
|
||||
LUID { LowPart: tempLi.s().LowPart, HighPart: tempLi.s().HighPart }
|
||||
pub const fn RtlConvertLongToLuid(Long: LONG) -> LUID {
|
||||
LUID { LowPart: Long as u32, HighPart: ((Long as i64) >> 32) as i32 }
|
||||
}
|
||||
#[inline]
|
||||
pub fn RtlConvertUlongToLuid(Ulong: ULONG) -> LUID {
|
||||
pub const fn RtlConvertUlongToLuid(Ulong: ULONG) -> LUID {
|
||||
LUID { LowPart: Ulong, HighPart: 0 }
|
||||
}
|
||||
EXTERN!{extern "system" {
|
||||
|
||||
@@ -3,4 +3,5 @@
|
||||
// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
|
||||
// http://opensource.org/licenses/MIT>, at your option. This file may not be
|
||||
// copied, modified, or distributed except according to those terms.
|
||||
pub(crate) mod winioctl;
|
||||
pub mod winnt;
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
#[inline]
|
||||
pub(crate) const fn CTL_CODE(DeviceType: u32, Function: u32, Method: u32, Access: u32) -> u32 {
|
||||
(DeviceType << 16) | (Access << 14) | (Function << 2) | Method
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
// http://opensource.org/licenses/MIT>, at your option. This file may not be
|
||||
// copied, modified, or distributed except according to those terms.
|
||||
#[inline]
|
||||
pub fn UInt32x32To64(a: u32, b: u32) -> u64 {
|
||||
pub const fn UInt32x32To64(a: u32, b: u32) -> u64 {
|
||||
a as u64 * b as u64
|
||||
}
|
||||
#[cfg(feature = "nightly")]
|
||||
|
||||
Reference in New Issue
Block a user