Windows `CreateFileW` 间歇性失败

问题描述 投票:0回答:1

我正在“C:\”上调用

CreateFileW
,但它间歇性失败并出现
NotFound
错误。

代码参考

例如

path_name = "C:\\".encode_utf16().collect::<Vec<_>>()

CreateFileW(
    path_name.as_ptr(),
    0,
    FILE_SHARE_READ,
    null(),
    OPEN_EXISTING,
    FILE_FLAG_BACKUP_SEMANTICS,
    null::<*mut c_void>() as HANDLE,
);

关于为什么会发生这种情况以及如何解决它有什么想法吗?

windows winapi rust
1个回答
0
投票

Rust 中的字符串不是以零结尾的。对于字符串文字也是如此。与 C 不同,

"C:\\"
末尾没有隐式 NUL 字符。当您将指针传递到 API 时,它将继续读取末尾,直到找到 NUL 字符。

请注意,这是一个绝对需要解决的内存安全错误。

值得庆幸的是,修复并不难。您只需要手动添加 NUL 终止符即可。以下将做:

use std::iter::once;

let path_name = "C:\\".encode_utf16().chain(once(0)).collect::<Vec<_>>();
© www.soinside.com 2019 - 2024. All rights reserved.