10个版本 (破坏性更新)
0.9.1 | 2020年1月6日 |
---|---|
0.8.0 | 2020年1月5日 |
0.7.0 | 2019年12月31日 |
0.1.0 |
|
#100 in Windows API
每月32次下载
310KB
6K SLoC
hcs-rs
Host Compute Service API的Rust包装器
概述
该项目是一组Rust库,用于封装由Host Compute Service暴露的功能。
HCS(Host Compute Service的简称)API是Windows 10 SDK的一部分。
HCS的公共文档尚未发布。
要求
为了正确构建此包装器,构建机器需要满足以下要求
- Windows 10 SDK。
- 默认情况下,RS5(10.0.17763.0)API界面始终构建。
- 可选地,可以通过功能
19h1
包含19H1(10.0.18362.0)。
- amd64 架构。
封装的Windows 10 SDK API
注意:本节包含基于默认安装路径 c:\Program Files (x86)\Windows Kits\10
的Windows SDK头文件和lib文件路径。 注意:本节显示特定于Windows SDK版本10.0.18362.0的路径。
该项目封装的相关Windows 10 SDK文件包括
- C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\computecore.h
- C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\computedefs.h
- C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\computenetwork.h
- C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\computestorage.h
- C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\hypervdevicevirtualization.h
- C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\computecore.lib
- C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\computenetwork.lib
- C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\computestorage.lib
- C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\vmdevicehost.lib
- C:\Windows\System32\computecore.dll
- C:\Windows\System32\computenetwork.dll
- C:\Windows\System32\computestorage.dll
- C:\Windows\System32\vmdevicehost.dll
所有这些都通过Windows服务Host Compute Service
提供服务,从可执行文件C:\Windows\System32\vmcompute.exe。
本crate中的C绑定将保持私有,不对外部代码公开。只暴露Rust风格的封装器。
以下表格描述了该项目所封装的相关Windows 10 SDK文件以及它们与每个模块的关系
hcs-rs文件 | 概述 | HCS API C头文件 | SDK中的.h路径 | SDK中的.lib路径 |
---|---|---|---|---|
computedefs | 由HCS API使用的类型和定义。 | computedefs.h | C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\computedefs.h | C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\computedefs.lib |
computecore | 用于管理计算系统的HCS核心功能的API。 | computecore.h | C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\computecore.h | C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\computecore.lib |
computenetwork | 与HCN(主机计算网络)交互的类型定义和API。 | computenetwork.h | C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\computenetwork.h | C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\computenetwork.lib |
computestorage | HCS存储管理的API。 | computestorage.h | C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\computestorage.h | C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\computestorage.lib |
hypervdevicevirtualization | 设备仿真/虚拟化的类型定义和API。 | hypervdevicevirtualization.h | C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\hypervdevicevirtualization.h | C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\vmdevicehost.lib |
特性
特性 | 备注 |
---|---|
bindings |
默认情况下,对SDK API的原始C绑定是crate私有的。使用特性bindings 可以使它们对客户端代码公开 |
schema |
包含所有HCS/HCN schema JSON对象模型 |
19h1 |
默认情况下,项目与RS5兼容。使用特性19h1 可以向API添加19H1特定更新 |
utilities |
包含提供更多Rust抽象的实用代码,这些抽象位于C绑定的基本安全封装之上。默认情况下,此crate仅公开安全封装 |
Crates.io版本说明
注意:所有从0.2.1及以下版本都有意撤回。请直接使用git仓库以获取最新活动更改,或使用0.2.2作为最旧的“稳定”版本。
本节简要描述了从最新到最旧的已发布的crates.io 版本。
- 0.9.1 2020年1月6日
- 修复了readme的crates.io版本说明日期
- 修复了
HdvPciDevice
的文档
- 0.9.0 2020年1月5日
- 重大更改
HdvPciDeviceBase::hook_device_interface_callbacks
现在期望参数device
为不可变引用,而不是移动它。这样做是为了确保调用者不会错误地丢弃他们可能拥有的device
实例的唯一引用
- 添加了方便的
HdvHost::hook_device_interface_callbacks
- 重大更改
- 0.8.0 2020年1月4日
- 重大更改
set_callback
函数不再为unsafe
HdvPciDeviceBase::hook_device_interface_callbacks
现在期望参数device
为移动,而不是可变引用
- 重构了回调,使它们在使用对象被移动时也能安全使用(通过使用
Box
成员) - 更新代码以捕获C样式回调上的panic堆回溯,以使它们更安全
- 重大更改
- 0.7.0 2019年12月31日
- 重大更改
- 删除了
HdvPciDevice
回调trait函数的unsafe
属性。尽管它假设它不应该panic,但它导致整个函数被标记为unsafe
时产生了混淆 - 重新设计了computecore实用工具中的回调方式,使其更简单,不需要闭包的trait对象
- 删除了
- 重大更改
- 0.6.0 2019年12月17日
- 重大更改
- 标记
HdvPciDevice
回调特征函数作为unsafe
,因为它假设它们不应该崩溃
- 标记
- 重大更改
- 0.5.1 2019年12月16日
- 将
#[derive(Clone)]
添加到HdvPciDeviceBase
和HdvPciDeviceBaseWrapper
。
- 将
- 0.5.0 2019年12月12日
- 重大更改
- 将
unsafe
添加到期望回调或假设提供的引用超出内部细节的函数中。它曾经没有被标记为 unsafe,但鉴于由于错误的生存期(以及 Rust 编译器无法正确理解它)导致出现几个错误
- 将
- 修复了
vmbfs_root_path
的错误模式名称
- 重大更改
- 0.4.0 2019年12月12日
- 修复了工具文档
- 向 hypervdevicevirtualization 添加了一些额外的工具
- 重大更改
- 修复了工具回调,以期望一个闭包特征对象的引用
- 将
get_handle
重命名为handle
,将get_handle_policy
重命名为handle_policy
- 0.3.0 2019年12月11日
- 重大更改
- hypervdevicevirtualization 用于读取和写入虚拟机内存的安全包装现在使用切片而不是直接使用向量
- 特别是,读取曾经返回一个包含读取内存的新分配缓冲区。现在,它直接读取到提供的字节切片中
- 引入了
utilities
功能,以分离所有基于基本安全包装的更高抽象的 Rust 抽象 - 安全包装
enumerate_compute_systems
现在支持一个可选查询参数
- hypervdevicevirtualization 用于读取和写入虚拟机内存的安全包装现在使用切片而不是直接使用向量
- 添加了围绕
hypervdevicevirtualization
API 的工具
- 重大更改
- 0.2.2 2019年12月10日
- 删除了不必要的 ispresent 绑定
- 功能化模式 JSON 对象模型已最终确定
- 通过环境变量启用功能,以条件编译对不同 Windows 版本的支持(目前仅为 19h1)
- 在
schema
功能后面保护模式模型 - 启用功能
bindings
,它公开了 API 的原始绑定(默认情况下它们对 crate 是私有的) - 将依赖项更新到
winutils_rs
,以获取 WideString CoTaskMemFree/LocalFree 包装的修复 - 这是“最老”的版本,状态相对稳定,以及清理了不必要的物品
- 0.2.1 2019年12月10日
- 使用 extern "system" 而不是 extern "C"
- 确保函数指针在 Option 中包装,以允许空函数指针
- 模式没有完全测试/功能
- 已删除,不完整/实现错误;不建议使用
- 0.2.0 2019年12月9日
- 第二个版本,在 computecore 上添加了基本的安全包装
- HCS 模式模型实现
- 将 hypervdevicevirtualization 更新到包括最新的更改
- 模式没有完全测试/功能
- 已删除,不完整/实现错误;不建议使用
- 将对 Windows 10 SDK 版本 10.0.18362.0 的依赖项设置为硬编码
- 通过环境变量使严格的构建时查找导出库文件成为可选操作
- 0.1.0 2019年1月8日
- 第一个版本,功能非常有限
- 将 C API 的绑定公开为瘦安全包装
- 缺少许多安全抽象
- 将对 Windows 10 SDK 版本 10.0.17763.0 的依赖项设置为硬编码
- 已删除,不完整/实现错误;不建议使用
依赖项
~1–1.9MB
~31K SLoC