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;
}
Expand description
特定于 Windows 的 fs::OpenOptions
扩展。
Required Methods§
sourcefn access_mode(&mut self, access: u32) -> &mut Self
fn access_mode(&mut self, access: u32) -> &mut Self
将 dwDesiredAccess
参数覆盖为具有指定值的 CreateFile
。
这将覆盖 OpenOptions
结构体上的 read
,write
和 append
标志。
此方法提供对读取、写入和追加数据、属性 (如隐藏和系统) 和扩展属性的权限的细粒度控制。
Examples
use std::fs::OpenOptions;
use std::os::windows::prelude::*;
// 在没有读写权限的情况下打开,例如,如果您只需要在文件上调用 `stat`
let file = OpenOptions::new().access_mode(0).open("foo.txt");
Run将 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");
Runsourcefn custom_flags(&mut self, flags: u32) -> &mut Self
fn custom_flags(&mut self, flags: u32) -> &mut Self
将 dwFileFlags
参数的额外标志设置为 CreateFile2
的指定值 (或将其与 attributes
和 security_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");
Runsourcefn attributes(&mut self, val: u32) -> &mut Self
fn attributes(&mut self, val: u32) -> &mut Self
将 dwFileAttributes
参数设置为 CreateFile2
的指定值 (或将其与 custom_flags
和 security_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");
Runsourcefn security_qos_flags(&mut self, flags: u32) -> &mut Self
fn security_qos_flags(&mut self, flags: u32) -> &mut Self
将 dwSecurityQosFlags
参数设置为 CreateFile2
的指定值 (或将其与 custom_flags
和 attributes
组合以将 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