Struct HFILE

Source
pub struct HFILE(/* private fields */);
Available on crate feature kernel only.
Expand description

Handle to a file. Originally just a HANDLE.

Unless you need something specific, consider using the File high-level abstraction.

Implementations§

Source§

impl HFILE

Source

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.

Source

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.

Source

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.

Source

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 HFILE

Source

pub fn CreateFile( file_name: &str, desired_access: GENERIC, share_mode: Option<FILE_SHARE>, security_attributes: Option<&SECURITY_ATTRIBUTES<'_>>, creation_disposition: DISPOSITION, attributes: FILE_ATTRIBUTE, flags: Option<FILE_FLAG>, security: Option<FILE_SECURITY>, hfile_template: Option<&HFILE>, ) -> SysResult<(CloseHandleGuard<HFILE>, ERROR)>

CreateFile function.

The error code is also returned because it can carry information even if the file is successfully open.

Unless you need something specific, consider using the File high-level abstraction.

§Examples

Opening an existing file as read-only:

use winsafe::{self as w, prelude::*, co};

let (hfile, status) = 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,
)?;

Opening a file for read and write. If the file doesn’t exist, create it:

use winsafe::{self as w, prelude::*, co};

let (hfile, status) = w::HFILE::CreateFile(
    "C:\\Temp\\test.txt",
    co::GENERIC::READ | co::GENERIC::WRITE,
    None,
    None,
    co::DISPOSITION::OPEN_ALWAYS,
    co::FILE_ATTRIBUTE::NORMAL,
    None,
    None,
    None,
)?;
Source

pub fn CreateFileMapping( &self, mapping_attrs: Option<&SECURITY_ATTRIBUTES<'_>>, protect: PAGE, sec: Option<SEC>, max_size: Option<u64>, mapping_name: Option<&str>, ) -> SysResult<CloseHandleGuard<HFILEMAP>>

CreateFileMapping function.

Unless you need something specific, consider using the FileMapped high-level abstraction.

Source

pub fn GetFileInformationByHandle( &self, ) -> SysResult<BY_HANDLE_FILE_INFORMATION>

Source

pub fn GetFileSizeEx(&self) -> SysResult<u64>

GetFileSizeEx function.

Source

pub fn GetFileTime(&self) -> SysResult<(FILETIME, FILETIME, FILETIME)>

GetFileTime function.

Returns, respectively:

  1. creation time;
  2. last access time;
  3. last write time.
§Examples
use winsafe::{self as w, prelude::*, co};

let hfile: w::HFILE; // initialized somewhere

let (creation, last_access, last_write) = hfile.GetFileTime()?;
Source

pub fn GetFileType(&self) -> SysResult<FILE_TYPE>

GetFileType function.

Source

pub fn LockFile( &self, offset: u64, num_bytes_to_lock: u64, ) -> SysResult<UnlockFileGuard<'_>>

LockFile function.

In the original C implementation, you must call UnlockFile as a cleanup operation.

Here, the cleanup is performed automatically, because LockFile returns an UnlockFileGuard, which automatically calls UnlockFile when the guard goes out of scope. You must, however, keep the guard alive, otherwise the cleanup will be performed right away.

§Examples
use winsafe::{self as w, prelude::*};

let hfile: w::HFILE; // initialized somewhere

let total_size = hfile.GetFileSizeEx()?;

let _lock_guard = hfile.LockFile(0, total_size as _)?; // keep guard alive

// file read/write operations...

// UnlockFile() called automatically
Source

pub fn ReadFile(&self, buffer: &mut [u8]) -> SysResult<u32>

ReadFile function.

Reads at most buffer.len() bytes from the file, starting at the current file pointer offset. Returns how many bytes were actually read. The file pointer is then incremented by the number of bytes read.

Note that asynchronous reading – which use the OVERLAPPED struct – is not currently supported by this method, because the buffer must remain untouched until the async operation is complete, thus making the method unsound.

Source

pub fn SetEndOfFile(&self) -> SysResult<()>

SetEndOfFile function.

Source

pub fn SetFilePointerEx( &self, distance_to_move: i64, move_method: FILE_STARTING_POINT, ) -> SysResult<i64>

SetFilePointerEx function.

Source

pub fn SetFileTime( &self, creation_time: Option<&FILETIME>, last_access_time: Option<&FILETIME>, last_write_time: Option<&FILETIME>, ) -> SysResult<()>

SetFileTime function.

Source

pub fn WriteFile(&self, data: &[u8]) -> SysResult<u32>

WriteFile function.

Returns the number of bytes written.

Note that asynchronous writing – which use the OVERLAPPED struct – is not currently supported by this method, because the buffer must remain untouched until the async operation is complete, thus making the method unsound.

Trait Implementations§

Source§

impl Debug for HFILE

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for HFILE

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Handle for HFILE

Source§

const NULL: Self

The null, uninitialized handle; equals to 0.
Source§

const INVALID: Self

The invalid handle; equals to -1. Read more
Source§

unsafe fn from_ptr(p: *mut c_void) -> Self

Constructs a new handle object by wrapping a pointer. Read more
Source§

unsafe fn raw_copy(&self) -> Self

Returns a raw copy of the underlying handle pointer. Read more
Source§

unsafe fn as_mut(&mut self) -> &mut *mut c_void

Returns a mutable reference to the underlying raw pointer. Read more
Source§

fn ptr(&self) -> *mut c_void

Returns the underlying raw pointer. Read more
Source§

fn as_opt(&self) -> Option<&Self>

Returns None if the handle is null or invalid, otherwise returns Some(&self). Read more
Source§

impl Hash for HFILE

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl LowerHex for HFILE

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for HFILE

Source§

fn eq(&self, other: &HFILE) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl UpperHex for HFILE

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for HFILE

Source§

impl Send for HFILE

Source§

impl StructuralPartialEq for HFILE

Auto Trait Implementations§

§

impl Freeze for HFILE

§

impl RefUnwindSafe for HFILE

§

impl !Sync for HFILE

§

impl Unpin for HFILE

§

impl UnwindSafe for HFILE

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.