Trait std::os::windows::fs::OpenOptionsExt

1.10.0 · source ·
pub trait OpenOptionsExt {
    // Required methods
    fn access_mode(&mut self, access: u32) -> &mut Self;
    fn share_mode(&mut self, val: u32) -> &mut Self;
    fn custom_flags(&mut self, flags: u32) -> &mut Self;
    fn attributes(&mut self, val: u32) -> &mut Self;
    fn security_qos_flags(&mut self, flags: u32) -> &mut Self;
}
Available on Windows only.
Expand description

特定于 Windows 的 fs::OpenOptions 扩展。

Required Methods§

source

fn access_mode(&mut self, access: u32) -> &mut Self

dwDesiredAccess 参数覆盖为具有指定值的 CreateFile

这将覆盖 OpenOptions 结构体上的 readwriteappend 标志。 此方法提供对读取、写入和追加数据、属性 (如隐藏和系统) 和扩展属性的权限的细粒度控制。

Examples
use std::fs::OpenOptions;
use std::os::windows::prelude::*;

// 在没有读写权限的情况下打开,例如,如果您只需要在文件上调用 `stat`
let file = OpenOptions::new().access_mode(0).open("foo.txt");
Run
source

fn share_mode(&mut self, val: u32) -> &mut Self

dwShareMode 参数覆盖为具有指定值的 CreateFile

默认情况下,share_mode 设置为 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE。 这允许其他进程在打开文件时读取,写入和 delete/rename。 删除任何标志将阻止其他进程执行相应的操作,直到关闭文件句柄为止。

Examples
use std::fs::OpenOptions;
use std::os::windows::prelude::*;

// 当我们打开该文件以供写入时,请勿允许他人读取或修改此文件。
let file = OpenOptions::new()
    .write(true)
    .share_mode(0)
    .open("foo.txt");
Run
source

fn custom_flags(&mut self, flags: u32) -> &mut Self

dwFileFlags 参数的额外标志设置为 CreateFile2 的指定值 (或将其与 attributessecurity_qos_flags 组合以将 dwFlagsAndAttributes 设置为 CreateFile)。

自定义标志只能设置标志,而不能删除 Rust 选项设置的标志。 此选项将覆盖以前设置的所有自定义标志。

Examples
extern crate winapi;

use std::fs::OpenOptions;
use std::os::windows::prelude::*;

let file = OpenOptions::new()
    .create(true)
    .write(true)
    .custom_flags(winapi::FILE_FLAG_DELETE_ON_CLOSE)
    .open("foo.txt");
Run
source

fn attributes(&mut self, val: u32) -> &mut Self

dwFileAttributes 参数设置为 CreateFile2 的指定值 (或将其与 custom_flagssecurity_qos_flags 组合以将 dwFlagsAndAttributes 设置为 CreateFile)。

如果由于 new 文件尚不存在而创建了 new 文件,并且已指定 .create(true).create_new(true),则将为新文件提供 .attributes() 声明的属性。

如果使用 .create(true).truncate(true) 打开 existing 文件,则将保留其现有属性并将其与 .attributes() 声明的属性合并。

在所有其他情况下,属性将被忽略。

Examples
extern crate winapi;

use std::fs::OpenOptions;
use std::os::windows::prelude::*;

let file = OpenOptions::new()
    .write(true)
    .create(true)
    .attributes(winapi::FILE_ATTRIBUTE_HIDDEN)
    .open("foo.txt");
Run
source

fn security_qos_flags(&mut self, flags: u32) -> &mut Self

dwSecurityQosFlags 参数设置为 CreateFile2 的指定值 (或将其与 custom_flagsattributes 组合以将 dwFlagsAndAttributes 设置为 CreateFile)。

默认情况下,未设置 security_qos_flags。 在打开命名管道时应指定此名称,以控制服务器进程可以代表客户端进程执行的程度 (安全模拟级别)。

如果未设置 security_qos_flags,则恶意程序可以通过诱使程序打开命名管道来允许其打开用户指定的路径,从而获得权限 Rust 进程的提升的权限。

因此可以说在打开任意路径时也应设置 security_qos_flags。 但是,这些位可能会与其他标志 (特别是 FILE_FLAG_OPEN_NO_RECALL) 发生冲突。

有关可能的值的信息,请参见 Windows Dev Center 网站上的 Impersonation Levels。使用此方法时,SECURITY_SQOS_PRESENT 标志会自动设置。

Examples
extern crate winapi;
use std::fs::OpenOptions;
use std::os::windows::prelude::*;

let file = OpenOptions::new()
    .write(true)
    .create(true)

    // 将标志值设置为 `SecurityIdentification`。
    .security_qos_flags(winapi::SECURITY_IDENTIFICATION)

    .open(r"\\.\pipe\MyPipe");
Run

Implementors§