Module std::os::windows::io

1.0.0 · source ·
Available on Windows only.
Expand description

特定于 Windows 的通用 I/O 原语扩展。

就像裸指针一样,原始的 Windows 句柄和套接字指向具有动态生命周期的资源,如果它们比它们的资源生命周期更长,它们可以悬垂,如果它们是由无效值创建的,则它们可以被伪造。

该模块提供了三种类型来表示具有不同所有权属性的原始句柄和套接字:原始、借用和拥有,类似于用于表示指针的类型:

TypeAnalogous to
RawHandle*const _
RawSocket*const _
BorrowedHandle<'a>&'a _
BorrowedSocket<'a>&'a _
OwnedHandleBox<_>
OwnedSocketBox<_>

和裸指针一样,RawHandleRawSocket 值都是原始值。 并且在新代码中,他们应该被认为是不安全的 (类似于解引用他们)。Rust 并不总是提供这种指导,因此 Rust 生态系统中的现有代码通常不会将 RawHandleRawSocket 的使用标记为不安全。 一旦 io_safety 特性稳定,将鼓励库迁移,通过将 unsafe 添加到解引用 RawHandleRawSocket 值的 API,或通过使用 BorrowedHandleBorrowedSocketOwnedHandleOwnedSocket

与引用一样,BorrowedHandleBorrowedSocket 值与生命周期相关联,以确保它们的生命周期不会超过它们指向的资源。 这些可以安全使用。BorrowedHandleBorrowedSocket 值可用于提供对任何系统调用的安全访问的 API,但 CloseHandleclosesocket 或将结束资源的动态生命周期而不结束句柄或套接字的生命周期的任何其他调用。

BorrowedHandleBorrowedSocket 值可用于提供对 DuplicateHandleWSADuplicateSocketW 及相关函数的安全访问的 API,因此实现 AsHandleAsSocketFrom<OwnedHandle>From<OwnedSocket> 的类型不应假定它们始终具有对底层 object 的独占访问权。

与 boxes 一样,OwnedHandleOwnedSocket 值在概念上拥有它们指向的资源,并在它们被丢弃时释放 (close)。

Structs

  • 借来的句柄。
  • 借来的套接字。
  • 返回值或输出参数句柄的 FFI 类型,其中 INVALID_HANDLE_VALUE 用作哨兵值以指示错误,例如在 CreateFileW 的返回值中。 这使用 repr(transparent) 并具有主机句柄的表示,因此它可以用于此类 FFI 声明。
  • 返回值或输出参数句柄的 FFI 类型,其中 NULL 用作指示错误的哨兵值,例如在 CreateThread 的返回值中。 这使用 repr(transparent) 并具有主机句柄的表示,因此它可以用于此类 FFI 声明。
  • 这是 HandleOrInvalid 在尝试转换为句柄时使用的错误类型,以指示该值为 INVALID_HANDLE_VALUE
  • 这是 HandleOrNull 在尝试转换为句柄时使用的错误类型,以指示该值为空。
  • 拥有所有权的句柄。
  • 一个拥有所有权的套接字。

Traits

  • 从底层对象借用句柄的 trait。
  • 提取原始句柄。
  • 提取原始套接字。
  • 从底层对象借用套接字的 trait。
  • 从原始句柄构造 I/O 对象。
  • 从原始套接字创建 I/O 对象。
  • 一个 trait,表示消费一个对象并获得其原始 HANDLE 所有权的能力。
  • 一个 trait,表示消费一个对象并获得其原始 SOCKET 所有权的能力。

Type Definitions