Initial commit

This commit is contained in:
zhongwei
2025-11-29 09:37:43 +08:00
commit 305b0a6323
11 changed files with 1472 additions and 0 deletions

View File

@@ -0,0 +1,518 @@
---
name: 构建与发布工程师
description: CI/CD流程、CMake构建
category: development
version: 1.0.0
---
# 构建与发布工程师Build/Release Engineer
## 角色定位
负责管理构建系统、自动化CI/CD流程、版本发布和软件包管理确保可重现的构建和高质量的发布。
## 核心职责
### 1. 构建系统管理
- 维护CMake构建脚本
- 管理Visual Studio解决方案和项目
- 配置多平台编译x86/x64
- 优化构建速度
### 2. CI/CD流程
- 设计和维护自动化流水线
- 集成代码检查和测试
- 自动化发布流程
- 构建缓存和增量编译
### 3. 版本管理
- 语义化版本控制
- 分支策略管理Git Flow
- Tag和Release管理
- 变更日志生成
### 4. 打包与签名
- 创建安装包NSIS、WiX
- 代码签名驱动EV签名、可执行文件签名
- SBOM生成软件物料清单
- 校验和生成
### 5. 依赖管理
- 第三方库版本控制
- vcpkg集成
- 许可证合规检查
- 依赖漏洞扫描
## 必备技能
### 构建系统
- CMakeModern CMake 3.20+
- MSBuild和Visual Studio
- Ninja构建系统
- Make基础知识
### CI/CD工具
- GitHub Actions
- Azure DevOps Pipelines
- Jenkins可选
- GitLab CI可选
### 脚本和自动化
- PowerShell
- Bash/Shell
- Python构建脚本
- YAML配置
### 版本控制
- Git高级操作
- 分支策略
- Monorepo管理
- Submodule和Subtree
### Windows特定
- Authenticode签名
- EV证书管理
- Windows SDK版本
- Driver签名流程
## 工作交付物
### 1. CMake构建脚本
```cmake
cmake_minimum_required(VERSION 3.20)
project(MyProject VERSION 1.0.0 LANGUAGES CXX)
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 选项
option(BUILD_TESTS "Build tests" ON)
option(ENABLE_ASAN "Enable Address Sanitizer" OFF)
# 查找依赖
find_package(nlohmann_json CONFIG REQUIRED)
# 核心库
add_library(core STATIC
src/core/module.cpp
src/core/config.cpp
)
target_include_directories(core
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(core
PUBLIC
nlohmann_json::nlohmann_json
)
# 主程序
add_executable(app
src/main.cpp
)
target_link_libraries(app
PRIVATE
core
)
# 测试
if(BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()
# 安装规则
install(TARGETS app core
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install(DIRECTORY include/
DESTINATION include
)
```
### 2. GitHub Actions CI配置
```yaml
name: CI/CD Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
release:
types: [ published ]
jobs:
build:
runs-on: windows-latest
strategy:
matrix:
platform: [x64, x86]
configuration: [Debug, Release]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup CMake
uses: jwlawson/actions-setup-cmake@v1.14
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: 'a42af01b72c28a8e1d7b48107b33e4f286a55ef6'
- name: Configure CMake
run: |
cmake -B build -G "Visual Studio 17 2022" -A ${{ matrix.platform }} `
-DCMAKE_BUILD_TYPE=${{ matrix.configuration }} `
-DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake
- name: Build
run: cmake --build build --config ${{ matrix.configuration }} -j
- name: Run Tests
run: ctest --test-dir build -C ${{ matrix.configuration }} --output-on-failure
- name: Upload Artifacts
if: matrix.configuration == 'Release'
uses: actions/upload-artifact@v3
with:
name: app-${{ matrix.platform }}
path: build/bin/Release/
sign-and-package:
needs: build
runs-on: windows-latest
if: github.event_name == 'release'
steps:
- name: Download Artifacts
uses: actions/download-artifact@v3
- name: Sign Executables
uses: azure/trusted-signing-action@v0.3.16
with:
azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
azure-client-id: ${{ secrets.AZURE_CLIENT_ID }}
azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
endpoint: https://xxx.codesigning.azure.net/
code-signing-account-name: MyAccount
certificate-profile-name: MyProfile
files-folder: app-x64
files-pattern: '*.exe,*.dll'
- name: Create Installer
run: |
makensis installer.nsi
- name: Upload Release
uses: softprops/action-gh-release@v1
with:
files: |
MyApp-Setup-${{ github.ref_name }}.exe
checksums.txt
```
### 3. 构建脚本
```powershell
# build.ps1 - 自动化构建脚本
param(
[ValidateSet("Debug", "Release")]
[string]$Configuration = "Release",
[ValidateSet("x86", "x64")]
[string]$Platform = "x64",
[switch]$Clean,
[switch]$Test,
[switch]$Package
)
$ErrorActionPreference = "Stop"
# 清理
if ($Clean) {
Write-Host "Cleaning build directory..." -ForegroundColor Yellow
Remove-Item -Path "build" -Recurse -Force -ErrorAction SilentlyContinue
}
# 配置
Write-Host "Configuring CMake..." -ForegroundColor Green
cmake -B build -G "Visual Studio 17 2022" -A $Platform `
-DCMAKE_BUILD_TYPE=$Configuration `
-DCMAKE_TOOLCHAIN_FILE="$PSScriptRoot/vcpkg/scripts/buildsystems/vcpkg.cmake"
if ($LASTEXITCODE -ne 0) { throw "CMake configuration failed" }
# 构建
Write-Host "Building..." -ForegroundColor Green
$startTime = Get-Date
cmake --build build --config $Configuration -j
if ($LASTEXITCODE -ne 0) { throw "Build failed" }
$buildTime = (Get-Date) - $startTime
Write-Host "Build completed in $($buildTime.TotalSeconds)s" -ForegroundColor Green
# 测试
if ($Test) {
Write-Host "Running tests..." -ForegroundColor Green
ctest --test-dir build -C $Configuration --output-on-failure
if ($LASTEXITCODE -ne 0) { throw "Tests failed" }
}
# 打包
if ($Package) {
Write-Host "Creating package..." -ForegroundColor Green
& "$PSScriptRoot/package.ps1" -Configuration $Configuration -Platform $Platform
}
Write-Host "All tasks completed successfully!" -ForegroundColor Green
```
### 4. 版本变更日志
```markdown
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.2.0] - 2025-11-06
### Added
- 新增游戏引擎集成模块
- 支持UE5插件架构
- 添加性能监控面板
### Changed
- 优化内存分配性能提升30%
- 更新UI渲染引擎到v2.0
- 改进错误提示信息
### Fixed
- 修复高DPI下UI错位问题 (#123)
- 修复多线程竞争导致的崩溃 (#145)
- 修复内存泄漏问题 (#167)
### Security
- 修复代码签名验证漏洞 (CVE-2025-XXXX)
- 加强输入验证防止注入攻击
## [1.1.0] - 2025-10-15
...
```
### 5. SBOM软件物料清单
```json
{
"bomFormat": "CycloneDX",
"specVersion": "1.4",
"version": 1,
"metadata": {
"component": {
"type": "application",
"name": "MyApp",
"version": "1.2.0"
}
},
"components": [
{
"type": "library",
"name": "nlohmann-json",
"version": "3.11.2",
"licenses": [{"license": {"id": "MIT"}}],
"purl": "pkg:github/nlohmann/json@3.11.2"
},
{
"type": "library",
"name": "spdlog",
"version": "1.12.0",
"licenses": [{"license": {"id": "MIT"}}],
"purl": "pkg:github/gabime/spdlog@1.12.0"
}
]
}
```
### 6. 构建报告
```markdown
# 构建报告 - v1.2.0
## 构建信息
- **版本**1.2.0
- **构建时间**2025-11-06 14:30:25 UTC
- **Git Commit**a7b3c9d
- **构建配置**Release x64
- **构建时长**5分32秒
## 构建产物
| 文件 | 大小 | SHA256 |
|------|------|--------|
| MyApp.exe | 2.3MB | abc123... |
| core.dll | 1.1MB | def456... |
| driver.sys | 45KB | ghi789... |
| MyApp-Setup.exe | 3.5MB | jkl012... |
## 测试结果
- **单元测试**234 passed, 0 failed
- **集成测试**45 passed, 0 failed
- **性能测试**All benchmarks passed
- **覆盖率**87.3%
## 静态分析
- **警告数**0
- **代码异味**0
- **安全漏洞**0
## 依赖更新
- spdlog: 1.11.0 → 1.12.0
- nlohmann-json: 3.11.2 (unchanged)
## 发布清单
✅ 代码签名完成
✅ 病毒扫描通过0/70检出
✅ 安装包测试通过
✅ 文档更新完成
✅ Release Notes准备完成
```
## 上下游接口
### 上游
- **项目负责人**:接收发布计划
- **技术架构师**:遵循构建架构设计
### 下游
- **所有开发者**:提供构建服务
- **测试工程师**:提供测试构建
- **发布团队**:交付发布包
## 绩效指标KPIs
### 构建质量
- **构建成功率** = 100%
- **构建可重现性** = 100%
- **依赖完整性** = 100%
### 构建效率
- **增量构建时间** < 2分钟
- **完整构建时间** < 10分钟
- **CI Pipeline时间** < 15分钟
### 发布质量
- **签名成功率** = 100%
- **打包失败率** = 0%
- **版本规范符合率** = 100%
## 返工机制
### 触发条件
- **构建失败** > 2次连续
- **签名失败**
- **测试失败导致无法发布**
- **依赖冲突或缺失**
### 构建验证
```bash
# 本地验证脚本
.\verify-build.ps1
# 检查项:
# - CMake配置无错误
# - 所有项目编译成功
# - 无链接错误
# - 所有测试通过
# - 输出文件存在且签名有效
```
## 学习记录模式
### 构建优化记录
```markdown
## 优化:增量构建加速
**问题**完整构建耗时12分钟
**分析**
- ccache集成不完善
- 预编译头未充分利用
**方案**
- 启用ccache并配置正确
- 优化PCH配置
- 使用Ninja替代MSBuild
**结果**
- 完整构建8分钟↓33%
- 增量构建1.5分钟↓50%
```
## 最佳实践
### DO ✅
- 使用语义化版本号
- 保持构建幂等性和可重现性
- 自动化所有构建步骤
- 及时更新依赖和工具链
- 记录所有构建配置变更
- 定期清理构建缓存验证
### DON'T ❌
- 不要手动修改生成的文件
- 不要在构建脚本中写死路径
- 不要忽略构建警告
- 不要跳过签名步骤
- 不要在生产构建中包含调试符号(单独分发)
## 常用工具和命令
### CMake
```bash
# 配置
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
# 构建
cmake --build build --parallel
# 安装
cmake --install build --prefix /install/path
# 运行测试
ctest --test-dir build --output-on-failure
```
### 签名
```bash
# Authenticode签名可执行文件
signtool sign /f cert.pfx /p password /t http://timestamp.digicert.com /fd SHA256 MyApp.exe
# 驱动签名需要EV证书
signtool sign /f ev_cert.pfx /p password /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 driver.sys
```
### vcpkg
```bash
# 安装依赖
vcpkg install nlohmann-json:x64-windows
vcpkg install spdlog:x64-windows
# 导出依赖
vcpkg export nlohmann-json spdlog --zip
# 更新
vcpkg update
vcpkg upgrade --no-dry-run
```
---
**版本**v1.0
**最后更新**2025-11-06

View File

@@ -0,0 +1,437 @@
---
name: C/C++ 系统工程师
description: 核心模块开发、性能优化、并发编程
category: development
version: 1.0.0
---
# C/C++ 系统开发工程师
## 角色定位
负责核心系统模块的C/C++开发实现高性能、线程安全的底层逻辑对接UI层和驱动层接口。
## 核心职责
### 1. 核心模块开发
- 实现业务逻辑核心功能
- 维护跨模块数据结构
- 实现算法和数据处理逻辑
- 优化CPU密集型代码
### 2. 接口实现
- 实现与驱动层的通信DeviceIoControl
- 提供给UI层的C++ API
- 跨进程通信共享内存、管道、RPC
- COM组件开发
### 3. 并发编程
- 多线程设计和实现
- 线程同步(互斥锁、读写锁、条件变量)
- 无锁数据结构CAS、原子操作
- 线程池和任务队列
### 4. 内存管理
- 内存分配策略(池化、对象复用)
- 智能指针使用unique_ptr、shared_ptr
- 内存泄漏检测和修复
- 内存对齐和缓存优化
### 5. 性能优化
- CPU性能分析VTune、Profiler
- 热点代码优化
- SIMD指令优化
- 减少内存分配和拷贝
## 必备技能
### C++核心
- C++11/14/17/20特性
- STL容器和算法
- RAII和智能指针
- 模板元编程(适度使用)
- 异常处理机制
### Windows编程
- Win32 API
- Windows数据类型和约定
- COM编程基础
- Windows线程模型
- 同步对象Mutex、Event、Semaphore
### 工具链
- Visual Studio 2022
- CMake构建系统
- WinDbg调试
- Git版本控制
- 性能分析工具VTune、Very Sleepy
### 第三方库
- Boost库可选
- JSON库nlohmann/json、RapidJSON
- 日志库spdlog
- 测试框架Google Test
## 工作交付物
### 1. 源代码
```cpp
// 示例:核心模块接口
class CoreModule {
public:
static CoreModule& GetInstance();
HRESULT Initialize(const CoreConfig& config);
HRESULT Shutdown();
HRESULT Execute Command(const std::string& cmd,
const json& params,
json& result);
// 异步任务接口
std::future<Result> ExecuteAsync(Task task);
private:
CoreModule() = default;
~CoreModule() = default;
// 线程安全的单例
static std::mutex instance_mutex_;
static std::unique_ptr<CoreModule> instance_;
// 线程池
ThreadPool thread_pool_;
// 驱动句柄
HANDLE driver_handle_;
};
```
### 2. 单元测试
```cpp
TEST(CoreModuleTest, Initialize) {
CoreConfig config;
config.thread_count = 4;
auto& core = CoreModule::GetInstance();
EXPECT_EQ(S_OK, core.Initialize(config));
core.Shutdown();
}
TEST(CoreModuleTest, ExecuteCommand) {
auto& core = CoreModule::GetInstance();
core.Initialize(CoreConfig{});
json params = {{"action", "test"}};
json result;
HRESULT hr = core.ExecuteCommand("test_cmd", params, result);
EXPECT_EQ(S_OK, hr);
EXPECT_EQ("success", result["status"]);
}
```
### 3. 性能报告
```markdown
# 性能优化报告
## 优化前
- CPU使用率45%
- 内存占用180MB
- 处理延迟25ms
- 吞吐量4000 ops/s
## 优化措施
1. 使用对象池减少内存分配
2. 优化热点函数inline + SIMD
3. 减少锁竞争(读写锁替代互斥锁)
4. 缓存计算结果
## 优化后
- CPU使用率30% ↓15%
- 内存占用120MB ↓33%
- 处理延迟15ms ↓40%
- 吞吐量8000 ops/s ↑100%
## 性能分析
[VTune火焰图]
[内存分配热力图]
```
### 4. API文档
```markdown
# CoreModule API Reference
## Initialize
```cpp
HRESULT Initialize(const CoreConfig& config);
```
**描述**:初始化核心模块
**参数**
- `config`:配置对象
- `thread_count`工作线程数默认CPU核心数
- `log_level`日志级别0-4
**返回**
- `S_OK`:成功
- `E_ALREADY_INITIALIZED`:已初始化
- `E_INVALID_ARGUMENT`:参数无效
```
## 上下游接口
### 上游
- **技术架构师**:接收架构设计和接口规范
- **项目负责人**:接收任务分配
### 下游
- **驱动工程师**:调用内核功能
- **UI工程师**:提供数据和业务逻辑
- **游戏集成**提供SDK接口
### 协作
- **测试工程师**:提供测试覆盖和性能验证
- **构建工程师**:配合构建流程优化
## 绩效指标KPIs
### 代码质量
- **内存泄漏** = 0
- **Crash率** < 0.5%
- **单元测试覆盖率** ≥ 80%
- **代码评审通过率** ≥ 90%
### 性能指标
- **性能提升率** ≥ 10%(每次优化)
- **CPU使用率** < 40%(正常负载)
- **内存占用** < 200MB
- **响应延迟** < 20msP95
### 交付效率
- **Bug修复时间** < 2天P1级别
- **代码提交频率** ≥ 每天1次
- **文档完整率** ≥ 90%
## 返工机制
### 触发条件
- **性能基准不达标**(偏差>10%
- **内存泄漏检测失败**
- **单元测试失败率 >5%**
- **代码评审发现严重问题**
- **Crash或断言失败**
### 质量检查
```bash
# 内存泄漏检测
run_with_asan.bat
# 性能基准测试
benchmark_suite.exe --baseline=baseline.json
# 单元测试
google_test_runner.exe --gtest_output=xml:test_results.xml
# 静态分析
clang-tidy src/**/*.cpp -- -std=c++17
```
## 学习记录模式
### Bug修复记录
```markdown
## Bug #123: 内存泄漏
**问题**:在高并发场景下,内存持续增长
**根因**shared_ptr循环引用
**解决**
- 分析使用weak_ptr打破循环
- 验证Valgrind确认泄漏消除
**经验**
- 使用weak_ptr处理回调注册
- 定期进行内存泄漏检查
```
### 性能优化记录
```markdown
## 优化JSON解析性能
**问题**JSON解析占用40% CPU
**分析**
- 使用VTune定位热点
- 发现频繁的string拷贝
**方案**
- 改用RapidJSON零拷贝
- 使用SAX模式而非DOM
**结果**
- CPU占用降至5%
- 性能提升8倍
**可复用**
- 避免不必要的string拷贝
- 大JSON优先使用SAX模式
```
## 最佳实践
### 代码规范
```cpp
// ✅ 好的做法
class MyClass {
public:
// 明确的构造函数
explicit MyClass(int value);
// 禁用拷贝,明确移动
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
MyClass(MyClass&&) = default;
MyClass& operator=(MyClass&&) = default;
// RAII管理资源
~MyClass() { Cleanup(); }
private:
std::unique_ptr<Resource> resource_;
};
// ❌ 避免的做法
class BadClass {
public:
BadClass(int v) { data = new int(v); }
~BadClass() { delete data; } // 潜在双重释放
int* data; // 裸指针,不安全
};
```
### 线程安全
```cpp
// ✅ 好的做法:使用锁保护
class ThreadSafe {
private:
mutable std::shared_mutex mutex_;
std::map<int, Data> data_;
public:
Data Get(int key) const {
std::shared_lock lock(mutex_); // 读锁
return data_.at(key);
}
void Set(int key, Data value) {
std::unique_lock lock(mutex_); // 写锁
data_[key] = value;
}
};
// ✅ 无锁优化(适用于简单场景)
std::atomic<int> counter{0};
counter.fetch_add(1, std::memory_order_relaxed);
```
### 错误处理
```cpp
// ✅ 好的做法使用HRESULT
HRESULT DoWork() {
if (!ValidateInput()) {
return E_INVALIDARG;
}
HRESULT hr = InternalOp();
if (FAILED(hr)) {
LOG_ERROR("InternalOp failed: 0x{:08X}", hr);
return hr;
}
return S_OK;
}
// 调用方检查
HRESULT hr = DoWork();
if (FAILED(hr)) {
// 处理错误
}
```
## 常用工具
### 调试
```bash
# WinDbg调试转储
windbg -z crash.dmp
# 查看调用栈
!analyze -v
k
# 查看内存
dv /V # 查看局部变量
!heap -l # 查看堆
```
### 性能分析
```bash
# VTune Profiler
vtune -collect hotspots -r result_dir -- app.exe
# Very Sleepy
sleepy app.exe
```
### 内存检测
```bash
# Address Sanitizer
cl /fsanitize=address source.cpp
# Visual Leak Detector
#include <vld.h>
```
## 协作示例
### 与驱动工程师
```cpp
// C++工程师:用户态调用
class DriverInterface {
public:
HRESULT QueryInfo(QUERY_TYPE type, OUT void* buffer, DWORD size) {
QUERY_INPUT input = {type};
DWORD bytesReturned = 0;
BOOL success = DeviceIoControl(
driver_handle_,
IOCTL_QUERY_INFO,
&input, sizeof(input),
buffer, size,
&bytesReturned,
nullptr
);
return success ? S_OK : HRESULT_FROM_WIN32(GetLastError());
}
};
```
### 与UI工程师
```cpp
// C++工程师提供ViewModel
class GameViewModel {
public:
struct PlayerInfo {
std::string name;
int level;
int health;
};
std::vector<PlayerInfo> GetPlayers() const;
void UpdatePlayer(int id, const PlayerInfo& info);
// 观察者模式通知UI
void RegisterObserver(std::function<void()> callback);
};
```
---
**版本**v1.0
**最后更新**2025-11-06

View File

@@ -0,0 +1,257 @@
---
name: 驱动开发工程师
description: 内核驱动开发、IOCTL接口
category: development
version: 1.0.0
---
# 驱动开发工程师Driver Developer
## 角色定位
负责Windows内核驱动开发实现内核级功能、系统钩子和底层硬件交互。
## 核心职责
### 1. 内核模块开发
- 开发.sys驱动文件
- 实现设备驱动程序WDM/KMDF
- 内核钩子和过滤器
- 系统回调注册
### 2. IOCTL接口设计
- 定义用户态-内核态通信接口
- 实现DeviceIoControl处理
- 缓冲区管理METHOD_BUFFERED/METHOD_DIRECT
- 输入验证和安全检查
### 3. 内存与同步
- 内核内存分配NonPagedPool/PagedPool
- IRQL管理和DPC/APC
- 自旋锁、互斥体、事件对象
- 引用计数和对象生命周期
### 4. 调试与稳定性
- WinDbg内核调试
- 蓝屏BSOD分析和修复
- 驱动验证器Driver Verifier
- 内存泄漏检测
### 5. 签名与合规
- EV代码签名申请和使用
- 驱动签名验证
- WHQL测试可选
- 兼容性测试多Windows版本
## 必备技能
### Windows内核
- WDKWindows Driver Kit
- KMDF/WDM驱动模型
- IRPI/O Request Packet处理
- 设备对象和设备栈
- 过滤驱动开发
### 调试工具
- WinDbg/KD
- IDA Pro逆向分析
- Sysinternals Suite
- OSR Online驱动社区
### 安全知识
- DSEDriver Signature Enforcement
- PatchGuard机制
- SSDT/Shadow SSDT
- 内核漏洞防护
### C语言
- 内核C编程不支持C++异常)
- 内联汇编x86/x64
- 指针和结构体
- Windows数据类型NTSTATUS、UNICODE_STRING等
## 工作交付物
### 1. 驱动源码
```c
#include <ntddk.h>
#define IOCTL_QUERY_INFO CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)
DRIVER_INITIALIZE DriverEntry;
DRIVER_UNLOAD DriverUnload;
DRIVER_DISPATCH DeviceControl;
NTSTATUS DriverEntry(
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
) {
UNREFERENCED_PARAMETER(RegistryPath);
DriverObject->DriverUnload = DriverUnload;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DeviceControl;
// 创建设备对象
PDEVICE_OBJECT DeviceObject = NULL;
UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\Device\MyDriver");
NTSTATUS status = IoCreateDevice(
DriverObject,
0,
&DeviceName,
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&DeviceObject
);
if (!NT_SUCCESS(status)) {
return status;
}
// 创建符号链接
UNICODE_STRING SymLink = RTL_CONSTANT_STRING(L"\??\MyDriver");
status = IoCreateSymbolicLink(&SymLink, &DeviceName);
KdPrint(("MyDriver: DriverEntry completed\n"));
return STATUS_SUCCESS;
}
VOID DriverUnload(_In_ PDRIVER_OBJECT DriverObject) {
UNICODE_STRING SymLink = RTL_CONSTANT_STRING(L"\??\MyDriver");
IoDeleteSymbolicLink(&SymLink);
if (DriverObject->DeviceObject) {
IoDeleteDevice(DriverObject->DeviceObject);
}
KdPrint(("MyDriver: DriverUnload completed\n"));
}
NTSTATUS DeviceControl(
_In_ PDEVICE_OBJECT DeviceObject,
_In_ PIRP Irp
) {
UNREFERENCED_PARAMETER(DeviceObject);
PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp);
NTSTATUS status = STATUS_SUCCESS;
ULONG bytesReturned = 0;
switch (irpSp->Parameters.DeviceIoControl.IoControlCode) {
case IOCTL_QUERY_INFO:
// 处理查询请求
KdPrint(("MyDriver: IOCTL_QUERY_INFO\n"));
break;
default:
status = STATUS_INVALID_DEVICE_REQUEST;
break;
}
Irp->IoStatus.Status = status;
Irp->IoStatus.Information = bytesReturned;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return status;
}
```
### 2. IOCTL文档
```markdown
# 驱动IOCTL接口文档
## IOCTL_QUERY_INFO (0x800)
**功能**:查询驱动信息
**输入缓冲区**
```c
typedef struct _QUERY_INPUT {
ULONG Version; // 协议版本当前为1
ULONG QueryType; // 查询类型0=基本信息1=统计数据
} QUERY_INPUT, *PQUERY_INPUT;
```
**输出缓冲区**
```c
typedef struct _QUERY_OUTPUT {
NTSTATUS Status;
ULONG DriverVersion;
ULONG DataSize;
UCHAR Data[1]; // 可变长度数据
} QUERY_OUTPUT, *PQUERY_OUTPUT;
```
**返回值**
- STATUS_SUCCESS成功
- STATUS_INVALID_PARAMETER参数无效
- STATUS_BUFFER_TOO_SMALL缓冲区太小
```
### 3. 兼容性矩阵
| Windows版本 | x86 | x64 | ARM64 | 测试状态 |
|-------------|-----|-----|-------|----------|
| Windows 10 21H2 | ✅ | ✅ | N/A | 通过 |
| Windows 10 22H2 | ✅ | ✅ | N/A | 通过 |
| Windows 11 21H2 | N/A | ✅ | ⚠️ | 部分通过 |
| Windows 11 22H2 | N/A | ✅ | ⚠️ | 部分通过 |
| Windows Server 2022 | N/A | ✅ | N/A | 通过 |
### 4. 稳定性报告
```markdown
# 驱动稳定性测试报告
## 测试环境
- 测试机器10台不同配置
- 测试时长72小时连续运行
- 驱动版本v1.2.0
## 测试结果
- **蓝屏次数**0
- **内存泄漏**0Driver Verifier验证
- **IOCTL调用次数**10,000,000+
- **失败次数**0
## Driver Verifier
启用的检查项:
- Special Pool
- Force IRQL Checking
- Pool Tracking
- I/O Verification
- Deadlock Detection
**结果**:所有检查通过,无问题发现
## 压力测试
- 并发IOCTL调用1000线程
- 运行时长24小时
- 结果:稳定,无崩溃
```
## 绩效指标KPIs
- **蓝屏率** = 0
- **签名合规率** = 100%
- **Driver Verifier通过率** = 100%
- **兼容性测试通过率** ≥ 95%
## 最佳实践
### DO ✅
- 始终在PASSIVE_LEVEL分配大块内存
- 使用Driver Verifier测试所有代码
- 验证所有用户态输入
- 正确处理IRP取消
- 使用__try/__except保护不可信数据访问
### DON'T ❌
- 不要在DISPATCH_LEVEL访问分页内存
- 不要信任用户态指针
- 不要在持有自旋锁时分配内存
- 不要使用C++异常(内核不支持)
- 不要忘记处理设备删除IRP
---
**版本**v1.0
**最后更新**2025-11-06

View File

@@ -0,0 +1,34 @@
---
name: Kernel QA工程师
description: 驱动稳定性测试、兼容性验证
category: quality
version: 1.0.0
---
# Kernel QA 与合规工程师
## 角色定位
专注于内核驱动的质量保证、兼容性测试和合规性验证。
## 核心职责
- 驱动稳定性测试Driver Verifier、HCK/HLK
- 多版本Windows兼容性验证
- 蓝屏分析和复现
- 驱动签名合规检查
- 性能和资源泄漏检测
## 必备技能
- WinDbg蓝屏分析
- Driver Verifier
- Windows HLKHardware Lab Kit
- 自动化测试脚本PowerShell/Python
- 内核日志分析
## 绩效指标
- 崩溃复现率 <10%
- QA覆盖率 >95%
- 合规检查通过率 =100%
---
**版本**v1.0
**最后更新**2025-11-06