pub struct HFILEMAPVIEW(/* private fields */);
kernel
only.Expand description
Address of a
mapped view.
Originally just an LPVOID
.
Unless you need something specific, consider using the
FileMapped
high-level abstraction.
Implementations§
Source§impl HFILEMAPVIEW
impl HFILEMAPVIEW
Sourcepub const unsafe fn from_ptr(p: *mut c_void) -> Self
pub const unsafe fn from_ptr(p: *mut c_void) -> Self
Constructs a new handle object by wrapping a pointer.
This method can be used as an escape hatch to interoperate with other libraries.
§Safety
Be sure the pointer has the correct type and isn’t owned by anyone else, otherwise you may cause memory access violations.
Sourcepub const unsafe fn raw_copy(&self) -> Self
pub const unsafe fn raw_copy(&self) -> Self
Returns a raw copy of the underlying handle pointer.
§Safety
As the name implies, raw_copy
returns a raw copy of the
handle, so closing one of the copies won’t close the others.
This means a handle can be used after it has been closed, what
can lead to errors and undefined behavior. Even worse: sometimes
Windows reuses handle values, so you can call a method on a
completely different handle type, what can be catastrophic.
However, in some cases the Windows API demands a copy of the
handle – raw_copy
is an escape hatch to fill this gap.
Sourcepub const unsafe fn as_mut(&mut self) -> &mut *mut c_void
pub const unsafe fn as_mut(&mut self) -> &mut *mut c_void
Returns a mutable reference to the underlying raw pointer.
This method can be used as an escape hatch to interoperate with other libraries.
§Safety
This method exposes the raw pointer used by raw Windows calls. It’s an opaque pointer to an internal Windows structure, and no dereferencings should be attempted.
Sourcepub const fn ptr(&self) -> *mut c_void
pub const fn ptr(&self) -> *mut c_void
Returns the underlying raw pointer.
This method exposes the raw pointer used by raw Windows calls. It’s an opaque pointer to an internal Windows structure, and no dereferencings should be attempted.
This method can be used as an escape hatch to interoperate with other libraries.
Source§impl HFILEMAPVIEW
impl HFILEMAPVIEW
Sourcepub fn as_mut_slice(&self, len: usize) -> &mut [u8] ⓘ
pub fn as_mut_slice(&self, len: usize) -> &mut [u8] ⓘ
Returns a slice representing the mapped memory. You can modify the contents. You should call this method only if the file has write access.
Note: If the file is resized to a smaller size, the slice will still
map the bytes beyond the file. This may cause serious errors. So, if the
file is resized, re-generate the slice by calling as_slice
again.
Sourcepub fn as_slice(&self, len: usize) -> &[u8] ⓘ
pub fn as_slice(&self, len: usize) -> &[u8] ⓘ
Returns a slice representing the mapped memory.
Note: If the file is resized to a smaller size, the slice will still
map the bytes beyond the file. This may cause serious errors. So, if the
file is resized, re-generate the slice by calling as_slice
again.
§Examples
Reading the contents of a file into a string:
use winsafe::{self as w, prelude::*, co};
let (hfile, _) = w::HFILE::CreateFile(
"C:\\Temp\\test.txt",
co::GENERIC::READ,
Some(co::FILE_SHARE::READ),
None,
co::DISPOSITION::OPEN_EXISTING,
co::FILE_ATTRIBUTE::NORMAL,
None,
None,
None,
)?;
let hmap = hfile.CreateFileMapping(
None,
co::PAGE::READONLY,
None,
None,
None,
)?;
let view = hmap.MapViewOfFile(co::FILE_MAP::READ, 0, None)?;
let slice = view.as_slice(hfile.GetFileSizeEx()? as _);
let text = std::str::from_utf8(slice)?;
println!("{}", text);
Sourcepub fn FlushViewOfFile(
&self,
start_at_byte: usize,
num_bytes: usize,
) -> SysResult<()>
pub fn FlushViewOfFile( &self, start_at_byte: usize, num_bytes: usize, ) -> SysResult<()>
FlushViewOfFile
function.