Use const fn wherever possible, update macros

This commit is contained in:
MSxDOS
2019-01-07 17:40:57 +03:00
parent 9bb9924b14
commit 663fe9d1e3
10 changed files with 99 additions and 101 deletions
+16 -21
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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" {
+1
View File
@@ -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;
+4
View File
@@ -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
}
+1 -1
View File
@@ -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")]