1 // Copyright 2022 The ChromiumOS Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 use std::ops::Deref; 6 7 use winapi::um::winnt::LARGE_INTEGER; 8 9 pub struct LargeInteger { 10 large_integer: LARGE_INTEGER, 11 } 12 13 impl LargeInteger { new(value: i64) -> LargeInteger14 pub fn new(value: i64) -> LargeInteger { 15 // SAFETY: We are zero-initializing a struct with only primitive member fields. 16 let mut large_integer_val: LARGE_INTEGER = unsafe { std::mem::zeroed() }; 17 // SAFETY: We uniquely own this variable 18 let large_integer_val_mut: &mut i64 = unsafe { large_integer_val.QuadPart_mut() }; 19 *large_integer_val_mut = value; 20 21 LargeInteger { 22 large_integer: large_integer_val, 23 } 24 } 25 } 26 27 impl Deref for LargeInteger { 28 type Target = LARGE_INTEGER; 29 deref(&self) -> &Self::Target30 fn deref(&self) -> &Self::Target { 31 &self.large_integer 32 } 33 } 34