返回提交历史
Modified
.gitattributes
+9
-0
Modified
.gitignore
+11
-2
Modified
README.md
+9
-3
Modified
driver/SIGNING.md
+7
-1
Added
driver/payload/win-x64/XfeInput.cat
+0
-0
Added
driver/payload/win-x64/XfeInput.inf
+0
-0
Added
driver/payload/win-x64/XfeInputDriver.dll
+0
-0
Added
driver/payload/win-x64/XfeInputSetup.exe
+0
-0
Added
driver/payload/win-x64/payload.json
+14
-0
Added
driver/payload/win-x64/payload.props
+1
-0
Added
driver/payload/win-x64/publisher.cer
+0
-0
XFEstudio/XFEExtension.NetCore.InputSimulator
内置已签名驱动包及元数据,完善文档说明
将已签名驱动包及证书、元数据纳入 driver/payload/win-x64,并通过 .gitattributes 标记为二进制,防止签名损坏。调整 .gitignore 仅跟踪 7 个核心文件,确保驱动完整性。更新 README.md 和 SIGNING.md,说明用户无需本地签名,维护者需整体提交。payload.json 记录签名状态和哈希,payload.props 标记签名类型。文档补充版本独立性、签名流程和证书管理,强调私钥不分发,提升安全性与可维护性。
8c17b1b
代码差异
11 个文件
+51
-6
@@ -3,6 +3,15 @@
3
3
###############################################################################
4
4
* text=auto
5
5
6
# Signed payloads must retain exact bytes, including the catalog-covered INF.
7
driver/payload/win-x64/XfeInputDriver.dll binary
8
driver/payload/win-x64/XfeInput.inf binary
9
driver/payload/win-x64/XfeInput.cat binary
10
driver/payload/win-x64/XfeInputSetup.exe binary
11
driver/payload/win-x64/publisher.cer binary
12
driver/payload/win-x64/payload.json text eol=lf
13
driver/payload/win-x64/payload.props text eol=lf
14
6
15
###############################################################################
7
16
# Set default behavior for command prompt diff.
8
17
#
@@ -365,7 +365,16 @@ FodyWeavers.xsd
365
365
# XFEExtension.NetCore.XUnit reports
366
366
XfeTestArtifacts/
367
367
368
# Generated driver payload is embedded when building the managed DLL.
369
driver/payload/
368
# Track only the signed driver payload embedded in the managed DLL.
369
driver/payload/*
370
!driver/payload/win-x64/
371
driver/payload/win-x64/*
372
!driver/payload/win-x64/XfeInputDriver.dll
373
!driver/payload/win-x64/XfeInput.inf
374
!driver/payload/win-x64/XfeInput.cat
375
!driver/payload/win-x64/XfeInputSetup.exe
376
!driver/payload/win-x64/publisher.cer
377
!driver/payload/win-x64/payload.json
378
!driver/payload/win-x64/payload.props
370
379
# Machine-local certificate selection, never signing keys.
371
380
driver/signing.local.json
@@ -21,7 +21,7 @@ input.MouseWheelRoll(-120);
21
21
22
22
自签名包需要用户在首次安装时同意信任发布者的专用代码签名证书;它会加入本机 `Root` 和 `TrustedPublisher`,使系统信任该证书签名的代码。发布者私钥不会分发。设备安装策略仍然适用,系统也可能要求重启。安装器不更改 Secure Boot、内存完整性、测试模式或签名强制策略,不自动重启。
23
23
24
包有三种状态:默认源码构建是 `unsigned` / `-driver-dev`,禁止自动安装;自签名包是 `self-signed` / `-driver-local`,需要信任专用证书;公共代码签名发行包标记为 `trusted-publisher`。本地信任方案已经在 Windows 11、Secure Boot 开启的机器上安装成功,但不是微软 WHQL 认证。4.0.1 使用有效期至 **2036-09-23(UTC+8)**的专用 RSA 4096 位代码证书,并附加 RFC 3161 时间戳。证书持续复用于后续构建,期限和私钥备份详见 [签名与分发](driver/SIGNING.md)。
24
包有三种状态:`Build.ps1` 默认重新编译的驱动为 `unsigned` / `-driver-dev`,禁止自动安装;仓库内置的自签名包是 `self-signed` / `-driver-local`,需要信任专用证书;公共代码签名发行包标记为 `trusted-publisher`。本地信任方案已经在 Windows 11、Secure Boot 开启的机器上安装成功,但不是微软 WHQL 认证。4.0.1 驱动使用有效期至 **2036-09-23(UTC+8)**的专用 RSA 4096 位代码证书,并附加 RFC 3161 时间戳。证书持续复用于后续构建,期限和私钥备份详见 [签名与分发](driver/SIGNING.md)。
25
25
26
26
当前驱动支持 **Windows 11 x64**;C# 调用方可以是 x64 或 x86。调用方自己的 .NET 10 应用仍需运行时或采用自包含发布。
27
27
@@ -102,7 +102,13 @@ dotnet run --project .\XFEExtension.NetCore.InputSimulator.Console -c Release --
102
102
103
103
## 从源码构建
104
104
105
下面是**项目维护者**需要的构建环境,DLL/NuGet 使用者不需要配置:Windows x64、.NET 10 SDK、PowerShell 7、Visual Studio C++ 桌面开发工具。脚本从 NuGet 自动还原固定版本的微软 WDK/SDK,不安装系统级 WDK。
105
仓库已包含 `driver/payload/win-x64` 下的完整已签名驱动包。克隆后可直接使用 .NET 10 SDK 构建库和控制台,沿用内置驱动的签名,无需 WDK、C++ 工具或签名私钥:
106
107
```powershell
108
dotnet build .\XFEExtension.NetCore.InputSimulator.sln -c Release -p:GeneratePackageOnBuild=false -warnaserror
109
```
110
111
需要修改并重新编译原生驱动或安装器时,**项目维护者**还需 Windows x64、PowerShell 7、Visual Studio C++ 桌面开发工具。脚本从 NuGet 自动还原固定版本的微软 WDK/SDK,不安装系统级 WDK。
106
112
107
113
```powershell
108
114
# 编译 UMDF 驱动和静态链接运行库的安装器,验证报告、会话和 INF,内嵌未签名开发产物。
@@ -119,7 +125,7 @@ dotnet pack .\XFEExtension.NetCore.InputSimulator -c Release --no-build -o .\art
119
125
dotnet publish .\XFEExtension.NetCore.InputSimulator.Console -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:GeneratePackageOnBuild=false -o .\artifacts\input-console
120
126
```
121
127
122
`driver/Driver.c` 是 UMDF 驱动,`driver/Reports.c` 和 `driver/HidControl.c` 分别实现报告编码、队列和会话状态,`driver/Setup.c` 实现签名者信任及首次安装,`driver/Protocol.h` 与 C# 协议同步。输出在 `artifacts/driver-umdf`,待嵌入负载在忽略版本控制的 `driver/payload/win-x64`。
128
`driver/Driver.c` 是 UMDF 驱动,`driver/Reports.c` 和 `driver/HidControl.c` 分别实现报告编码、队列和会话状态,`driver/Setup.c` 实现签名者信任及首次安装,`driver/Protocol.h` 与 C# 协议同步。原生构建输出在忽略版本控制的 `artifacts/driver-umdf`;嵌入负载 `driver/payload/win-x64` 中的 7 个发行文件已纳入 Git,包含公开证书,不包含私钥。Git 属性保留签名文件(包括 INF)的原始字节,避免换行转换破坏 CAT 校验。`Build.ps1` 会覆盖嵌入负载;更新仓库驱动包时应完成签名后一起提交全部 7 个文件,不要提交未签名开发产物。
123
129
124
130
## 签名和分发
125
131
@@ -13,6 +13,12 @@
13
13
14
14
可在应用安装阶段主动调用 `DriverDeployment.InstallEmbeddedDriver()`。DLL 内嵌驱动 DLL、INF、CAT、原生安装器、**公开**证书及 SHA-256 清单;不包含私钥。不要求调用方安装 WDK、Visual Studio、C++ 运行库或第三方输入驱动。调用方自己的 .NET 10 应用仍需运行时或自包含发布。
15
15
16
## Git 中的驱动包
17
18
`driver/payload/win-x64` 中的 `XfeInputDriver.dll`、`XfeInput.inf`、`XfeInput.cat`、`XfeInputSetup.exe`、公开证书 `publisher.cer` 和两份元数据 `payload.json`、`payload.props` 均纳入 Git。克隆后直接执行 `dotnet build` 会嵌入这份已签名负载,不需要签名私钥或原生编译环境。驱动版本独立于托管库版本,当前内置驱动为 4.0.1.0。
19
20
`.gitattributes` 禁止对签名文件(包括受 CAT 覆盖的 INF)转换换行或自动文本合并。修改原生驱动、安装器或 INF 后,需要重新构建、签名并运行 `Prepare-Payload.ps1`,再将全部 7 个文件作为一组更新。默认 `Build.ps1` 会生成未签名开发负载,不应将其作为已签名驱动包提交。构建目录、`driver/signing.local.json` 和 PFX 私钥继续忽略。
21
16
22
## 本地签名构建
17
23
18
24
维护者使用专门的非 CA、仅代码签名用途证书,私钥保留在维护者电脑或签名服务。不要在 NuGet、Git 或用户安装包中分发 PFX/私钥。
@@ -41,7 +47,7 @@ pwsh -File .\driver\Prepare-Payload.ps1 -PackageDirectory .\artifacts\driver-loc
41
47
dotnet build .\XFEExtension.NetCore.InputSimulator.sln -c Release -p:GeneratePackageOnBuild=false -warnaserror
42
48
```
43
49
44
签名输出目录须为空,以免覆盖既有签名包。自签名包标记为 `self-signed`,当前 NuGet 版本为 `4.0.1-driver-local`。它可供明确同意信任的用户安装,属于本地信任分发,不是公共受信任发行版。`-AllowLocalDevelopment` 仍是 `-AllowSelfSigned` 的兼容别名。
50
签名输出目录须为空,以免覆盖既有签名包。自签名包标记为 `self-signed`,NuGet 版本在托管库版本后附加 `-driver-local`。它可供明确同意信任的用户安装,属于本地信任分发,不是公共受信任发行版。`-AllowLocalDevelopment` 仍是 `-AllowSelfSigned` 的兼容别名。
45
51
46
52
## 证书有效期与更新
47
53
二进制文件已变更,无法进行逐行预览。
二进制文件已变更,无法进行逐行预览。
二进制文件已变更,无法进行逐行预览。
二进制文件已变更,无法进行逐行预览。
@@ -0,0 +1,14 @@
1
{
2
"protocol": 1,
3
"signed": true,
4
"signingKind": "self-signed",
5
"timestamped": true,
6
"certificateExpires": "2036-09-22T19:19:42.0000000Z",
7
"files": {
8
"XfeInputDriver.dll": "2E38A2F25D542115397CE43D916E430B739B6D490BFCBDBA535B27336D92AE68",
9
"XfeInput.inf": "152A2B3DDEB9BB6CD1610B09E943D34CF9028441702D90AC26E2F747BE253DD8",
10
"XfeInput.cat": "FB404FA021DBFC485D6CBB579B6F6ECA94C68F2EA0E1181F13920CA11ACE115A",
11
"XfeInputSetup.exe": "88BB6A54713F6D71AB7B8D642F95D383C9017D596479CB11E4BA9980E04194AE",
12
"publisher.cer": "B9ACC9FC6FB187B50B9F600389D72FF00534EA5391BD2BE1972C7B2A93BD2A60"
13
}
14
}
@@ -0,0 +1 @@
1
<Project><PropertyGroup><DriverPayloadSigned>true</DriverPayloadSigned><DriverPayloadSigningKind>self-signed</DriverPayloadSigningKind></PropertyGroup></Project>
二进制文件已变更,无法进行逐行预览。