Compare commits

..

No commits in common. "afb327b0364feb7386b14d15c1b1699e5483c950" and "f25b9df8069acfc50dd88230ed51597be2c403d1" have entirely different histories.

8622 changed files with 115 additions and 1727403 deletions

View File

@ -1,190 +0,0 @@
# 403权限问题修复说明
## 问题原因
用户登录后跳转到403无权限页面主要原因有
1. **缺少 home 路由权限**:所有角色的 menus 字段都没有包含 `home`,导致登录后无法访问首页
2. **路由名称格式不一致**
- R_USER 角色配置的是 `my_device`(下划线)
- 但实际路由名称是 `my-device`(连字符)
- 导致权限匹配失败
3. **前端路由守卫检查 roles**
- 后端返回的路由 meta 中包含 roles 字段
- 前端路由守卫会检查用户是否有对应的 roles
- 但在动态路由模式下,后端已经根据用户角色过滤了路由
- 前端不应该再次检查 roles否则会导致403错误
## 路由命名规则
- **父路由**使用连字符kebab-case`user-manage``my-device``my-application`
- **子路由**:使用下划线,如 `user-manage_list``my-device_status``my-application_apply`
## 修复步骤
### 1. 运行数据库修复脚本
```bash
fix_403_complete.bat
```
或者手动执行SQL
```bash
mysql -u root -proot < fix_403_complete.sql
```
这个脚本会:
- 为所有角色添加 `home` 路由权限
- 修正路由名称格式(父路由用连字符,子路由用下划线)
- 确保角色的 menus 字段与数据库中的路由名称一致
### 2. 重启后端服务
修复数据库后,**必须重启** Spring Boot后端服务
```bash
cd backend
mvn spring-boot:run
```
或者在IDE中重启应用。
**重要**:后端代码已经修改,会自动移除路由 meta 中的 roles 字段,避免前端重复检查权限。
### 3. 清除浏览器缓存并重新登录
- 按 Ctrl+Shift+Delete 清除浏览器缓存
- 或者使用无痕模式/隐私模式
- 退出登录
- 重新登录测试
## 修复后的角色权限配置
### R_SUPER超级管理员
拥有所有菜单权限:
- home首页
- device设备管理及所有子菜单
- screen屏幕监控及所有子菜单
- user-manage用户管理及所有子菜单
- application使用申请及所有子菜单
- system系统设置及所有子菜单
- my-device我的设备及所有子菜单
- my-application设备申请及所有子菜单
### R_ADMIN管理员
除系统设置外的所有管理功能:
- home首页
- device设备管理及所有子菜单
- screen屏幕监控及所有子菜单
- user-manage用户管理列表和角色管理不包括权限管理
- application使用申请及所有子菜单
### R_USER普通用户
只能访问自己的设备和申请:
- home首页
- my-device我的设备及所有子菜单
- my-application设备申请及所有子菜单
### R_STU学生
只能访问首页:
- home首页
## 验证修复
### 1. 检查数据库
```sql
-- 查看角色配置
SELECT role_code, role_name, menus FROM sys_role;
-- 查看路由配置
SELECT name, path, component FROM sys_route WHERE status = 1 ORDER BY order_num;
```
### 2. 测试登录
使用不同角色的账号登录测试:
- **admin/admin123**R_SUPER + R_ADMIN应该能看到所有菜单
- **user/user123**R_USER应该只能看到首页、我的设备、设备申请
### 3. 查看后端日志
登录后查看后端控制台输出,应该能看到类似以下的调试信息:
```
=== 用户路由权限调试 ===
用户ID: 1
用户角色: R_SUPER,R_ADMIN
查询到的角色数量: 2
角色: R_SUPER - 超级管理员
配置的菜单: home,device,device_list,...
允许访问的菜单: [home, device, device_list, ...]
```
## 常见问题
### Q1: 修复后还是403
A: 请确保:
1. 已重启后端服务
2. 已清除浏览器缓存
3. 已重新登录
4. 检查后端日志确认菜单配置已更新
### Q2: 某些菜单看不到?
A: 检查:
1. 该菜单是否在角色的 menus 字段中
2. 路由名称是否正确(父路由用连字符,子路由用下划线)
3. 路由表中是否存在该路由且 status=1
### Q3: 如何添加新菜单权限?
A:
1. 在 sys_route 表中添加新路由
2. 在 sys_role 表的 menus 字段中添加对应的路由名称
3. 重启后端服务
## 技术细节
### 后端权限过滤逻辑
`RouteService.getUserRoutes()` 方法:
1. 根据用户ID查询用户信息
2. 获取用户的角色列表roles字段
3. 查询这些角色的菜单配置menus字段
4. 合并所有角色的菜单权限
5. 自动添加父菜单(如果配置了子菜单)
6. 从路由表中过滤出用户有权限的路由
7. **移除路由 meta 中的 roles 字段**(避免前端重复检查)
8. 构建路由树并返回
### 前端路由处理
前端使用动态路由模式(`VITE_AUTH_ROUTE_MODE=dynamic`
1. 登录成功后调用 `/route/getUserRoutes` 获取用户路由
2. 前端根据返回的路由动态生成菜单
3. **前端路由守卫检查逻辑**
- 检查路由的 `meta.roles` 字段
- 如果路由有 roles 且用户没有对应角色跳转403
- **在动态路由模式下后端已过滤路由meta 中不应包含 roles**
4. 如果访问未授权的路由会跳转到403页面
### 修复的关键点
**后端修改**`RouteService.java`
```java
// 移除 roles 字段,因为后端已经根据角色过滤了路由
// 前端不需要再次检查 roles
meta.remove("roles");
```
这样前端路由守卫就不会检查 roles避免403错误。
## 相关文件
- `backend/src/main/java/com/soybean/admin/service/RouteService.java` - 路由权限过滤逻辑
- `backend/src/main/java/com/soybean/admin/entity/Role.java` - 角色实体
- `backend/src/main/resources/sql/init.sql` - 数据库初始化脚本
- `fix_403_complete.sql` - 权限修复脚本

View File

@ -1,171 +0,0 @@
# AMT 批量管理凭证功能
## 功能概述
在"系统设置 > AMT设置"页面添加了 AMT 批量管理凭证功能,用于管理 Intel AMT 设备的登录凭证。
## 主要功能
### 1. 凭证管理
- ✅ 添加凭证:创建新的 AMT 登录凭证
- ✅ 编辑凭证:修改现有凭证信息
- ✅ 删除凭证:删除不需要的凭证(默认凭证不可删除)
- ✅ 设为默认:将凭证设置为默认凭证(优先用于新设备)
### 2. 凭证测试
- ✅ 单个测试:测试单个凭证的连接状态
- ✅ 批量测试:批量测试多个凭证的连接状态
### 3. 凭证信息
- 凭证名称:便于识别的名称
- 用户名AMT 登录用户名
- 密码AMT 登录密码(加密存储)
- 描述:凭证的详细说明
- 默认标记:是否为默认凭证
- 状态:启用/禁用
## 技术实现
### 后端
#### 数据库表
- `amt_credential` - AMT 凭证管理表
- 字段credential_id, credential_name, username, password, description, is_default, status, created_by, created_time, updated_time
#### Java 类
- `AmtCredential.java` - 实体类
- `AmtCredentialMapper.java` - MyBatis Mapper
- `AmtCredentialDTO.java` - 数据传输对象
- `AmtCredentialService.java` - 业务逻辑层
- `AmtCredentialController.java` - 控制器层
#### API 接口
- `GET /api/amt/credential/list` - 分页查询凭证列表
- `GET /api/amt/credential/all` - 获取所有启用的凭证
- `GET /api/amt/credential/{id}` - 根据ID获取凭证
- `POST /api/amt/credential` - 创建凭证
- `PUT /api/amt/credential/{id}` - 更新凭证
- `DELETE /api/amt/credential/{id}` - 删除凭证
- `PUT /api/amt/credential/{id}/default` - 设置默认凭证
- `POST /api/amt/credential/{id}/test` - 测试凭证连接
- `POST /api/amt/credential/batch-test` - 批量测试凭证
### 前端
#### 文件
- `src/views/system/amt/index.vue` - AMT 设置页面
- `src/service/api/amt.ts` - AMT API 接口
#### 功能特性
- 数据表格展示凭证列表
- 分页、搜索、筛选
- 添加/编辑凭证弹窗
- 批量选择和批量测试
- 实时状态显示
## 安装步骤
### 1. 初始化数据库表
运行批处理脚本:
```bash
init_amt_credential_table.bat
```
或手动执行 SQL
```bash
mysql -uroot -proot -hlocalhost -P3306 < backend/src/main/resources/sql/create_amt_credential_table.sql
```
### 2. 重启后端服务
```bash
cd backend
mvn spring-boot:run
```
或使用批处理脚本:
```bash
restart_backend_and_test.bat
```
### 3. 访问页面
登录系统后,访问:系统设置 > AMT设置
## 使用说明
### 添加凭证
1. 点击"添加凭证"按钮
2. 填写凭证信息:
- 凭证名称(必填)
- 用户名(必填)
- 密码(必填)
- 描述(可选)
- 是否设为默认
- 状态(启用/禁用)
3. 点击"确定"保存
### 测试凭证
1. 单个测试:点击凭证行的"测试"按钮
2. 批量测试:
- 勾选要测试的凭证
- 点击"批量测试"按钮
- 查看测试结果
### 设置默认凭证
1. 点击凭证行的"设为默认"按钮
2. 系统会自动取消其他凭证的默认状态
3. 默认凭证将优先用于新设备
### 编辑凭证
1. 点击凭证行的"编辑"按钮
2. 修改凭证信息
3. 点击"确定"保存
### 删除凭证
1. 点击凭证行的"删除"按钮
2. 确认删除操作
3. 注意:默认凭证不能删除
## 注意事项
1. **密码安全**:密码在数据库中应该加密存储(当前为明文,建议后续加密)
2. **默认凭证**:系统只能有一个默认凭证
3. **凭证测试**:当前为模拟测试,实际使用时需要集成 AMT SDK
4. **权限控制**:建议只有管理员角色可以访问此功能
## 后续优化建议
1. **密码加密**:使用 AES 或 RSA 加密存储密码
2. **AMT SDK 集成**:集成真实的 AMT SDK 进行连接测试
3. **凭证应用**:将凭证应用到具体设备
4. **操作日志**:记录凭证的创建、修改、删除操作
5. **批量导入**:支持从 CSV/Excel 批量导入凭证
6. **凭证分组**:支持凭证分组管理
## 文件清单
### 后端文件
- `backend/src/main/resources/sql/create_amt_credential_table.sql`
- `backend/src/main/java/com/soybean/admin/entity/AmtCredential.java`
- `backend/src/main/java/com/soybean/admin/mapper/AmtCredentialMapper.java`
- `backend/src/main/java/com/soybean/admin/dto/AmtCredentialDTO.java`
- `backend/src/main/java/com/soybean/admin/service/AmtCredentialService.java`
- `backend/src/main/java/com/soybean/admin/controller/AmtCredentialController.java`
### 前端文件
- `src/views/system/amt/index.vue`
- `src/service/api/amt.ts`
- `src/service/api/index.ts` (更新)
### 脚本文件
- `init_amt_credential_table.bat`
## 测试建议
1. 测试添加凭证功能
2. 测试编辑凭证功能
3. 测试删除凭证功能
4. 测试设置默认凭证功能
5. 测试单个凭证连接
6. 测试批量凭证连接
7. 测试分页和搜索功能
8. 测试表单验证

View File

@ -1,245 +0,0 @@
# AMT 设备添加功能说明
## 功能概述
在设备管理的设备列表页面,增强了"新增设备"功能,支持通过 Intel AMTActive Management Technology协议自动发现和添加设备。
## 功能特性
### 1. 两种添加方式
#### 手动添加
- 传统的手动输入设备信息方式
- 需要手动填写设备名称、UUID、IP地址、MAC地址等信息
#### AMT 自动添加
- 通过 AMT 协议自动发现设备
- 只需输入 IP 地址和认证信息
- 自动获取设备名称、MAC 地址等信息
- 自动生成 UUID
### 2. 认证方式
#### 直接输入
- 手动输入 AMT 用户名和密码
- 适合临时测试或一次性添加
#### 使用已保存凭证
- 从"AMT 设置"页面选择已保存的凭证
- 支持默认凭证快速选择
- 提高安全性和便捷性
### 3. 连接测试
- 提供"测试连接"按钮
- 验证 AMT 连接是否可用
- 测试成功后自动获取设备信息
- 显示连接状态反馈
## 技术实现
### 后端实现
#### 1. AmtDigestService.java
- 使用 WS-Management 协议与 AMT 设备通信
- 支持 Digest 认证HTTP Digest Auth
- 实现设备信息获取和连接测试
#### 2. 主要接口
**测试 AMT 连接**
```
POST /device/amt/test
{
"ipAddress": "192.168.1.100",
"username": "admin",
"password": "password"
}
{
"ipAddress": "192.168.1.100",
"credentialId": 1
}
```
**获取 AMT 设备信息**
```
POST /device/amt/getInfo
{
"ipAddress": "192.168.1.100",
"username": "admin",
"password": "password"
}
```
#### 3. WS-Management 协议
使用标准的 SOAP over HTTP 协议:
- 端口HTTP 16992, HTTPS 16993
- 认证HTTP Digest Authentication
- 协议WS-Management (WSMAN)
### 前端实现
#### 1. 设备列表页面增强
- 添加方式选择(单选按钮)
- AMT 设备发现表单
- 认证方式切换(开关)
- 凭证选择下拉框
- 测试连接按钮和状态显示
#### 2. 用户交互流程
1. 点击"新增设备"按钮
2. 选择"AMT 自动添加"方式
3. 输入 IP 地址
4. 选择认证方式:
- 手动输入:填写用户名和密码
- 使用凭证:从下拉框选择已保存的凭证
5. 点击"测试连接"
6. 连接成功后,自动填充设备信息
7. 确认并保存设备
## 使用说明
### 前置条件
1. AMT 设备已启用并配置
2. AMT 设备网络可达
3. 已知 AMT 管理员账号密码
4. (可选)在"AMT 设置"中预先保存凭证
### 操作步骤
1. **进入设备列表页面**
- 导航到:设备管理 > 设备列表
2. **点击新增设备**
- 点击页面右上角的"新增设备"按钮
3. **选择 AMT 自动添加**
- 在弹出的对话框中选择"AMT 自动添加"单选按钮
4. **输入 AMT 设备信息**
- IP 地址:输入 AMT 设备的 IP 地址
- 认证方式:
- 方式一:切换到"手动输入",填写用户名和密码
- 方式二:切换到"使用已保存凭证",从下拉框选择凭证
5. **测试连接**
- 点击"测试连接"按钮
- 等待测试结果
- 成功后会显示绿色的"连接成功"标签
6. **确认设备信息**
- 系统自动填充设备名称、UUID、IP地址、MAC地址
- 可以修改设备名称和备注
- 选择设备状态
7. **保存设备**
- 点击"确定"按钮保存设备
### 注意事项
1. **网络连接**
- 确保服务器能够访问 AMT 设备的 16992 端口
- 检查防火墙设置
2. **AMT 配置**
- AMT 设备必须已启用并配置
- 确认 AMT 管理员账号可用
3. **安全性**
- 建议使用已保存的凭证而不是每次手动输入
- 定期更新 AMT 密码
4. **错误处理**
- 连接失败时会显示具体错误信息
- 常见错误:
- 网络不可达
- 认证失败
- AMT 未启用
## 文件清单
### 后端文件
- `backend/src/main/java/com/soybean/admin/service/AmtDigestService.java` - AMT Digest 认证服务
- `backend/src/main/java/com/soybean/admin/dto/AmtTestRequest.java` - 测试请求 DTO
- `backend/src/main/java/com/soybean/admin/dto/AmtDeviceInfo.java` - 设备信息 DTO
- `backend/src/main/java/com/soybean/admin/controller/DeviceController.java` - 设备控制器(已更新)
### 前端文件
- `src/views/device/list/index.vue` - 设备列表页面(已更新)
- `src/service/api/device.ts` - 设备 API已更新
- `src/typings/api/device.d.ts` - 设备类型定义(已更新)
### 工具文件
- `rebuild_and_test_amt.bat` - 重新编译和测试脚本
- `AMT_DEVICE_ADD_FEATURE.md` - 本说明文档
## 测试建议
1. **单元测试**
- 测试 AMT 连接功能
- 测试设备信息获取
- 测试凭证集成
2. **集成测试**
- 使用真实 AMT 设备测试
- 测试不同的认证方式
- 测试错误处理
3. **用户测试**
- 测试完整的添加流程
- 验证用户体验
- 收集反馈
## 未来改进
1. **批量发现**
- 支持 IP 段扫描
- 批量添加多个设备
2. **更多设备信息**
- 获取 CPU、内存等硬件信息
- 获取 AMT 版本信息
- 获取设备序列号
3. **高级功能**
- 支持 TLS 加密连接
- 支持证书认证
- 支持 Kerberos 认证
4. **监控集成**
- 定期检查设备状态
- AMT 事件日志收集
- 设备健康度监控
## 故障排除
### 问题:连接超时
**原因**:网络不可达或防火墙阻止
**解决**
- 检查网络连接
- 确认防火墙规则
- 验证 AMT 端口 16992 是否开放
### 问题:认证失败
**原因**:用户名或密码错误
**解决**
- 确认 AMT 管理员账号
- 重置 AMT 密码
- 检查凭证配置
### 问题:无法获取设备信息
**原因**AMT 未完全配置或版本不兼容
**解决**
- 检查 AMT 配置状态
- 确认 AMT 版本
- 查看 AMT 日志
## 参考资料
- [Intel AMT SDK Documentation](https://software.intel.com/sites/manageability/)
- [WS-Management Protocol](https://www.dmtf.org/standards/ws-man)
- [Intel vPro Technology](https://www.intel.com/content/www/us/en/architecture-and-technology/vpro/vpro-technology-general.html)

View File

@ -1,221 +0,0 @@
# AMT 功能无日志问题修复指南
## 问题描述
点击"测试连接"后,后端没有任何日志输出,直接显示超时错误。
## 可能原因
1. **代码未编译**:新添加的代码没有被编译
2. **后端未重启**:修改后没有重启后端服务
3. **请求未到达后端**:前端请求没有正确发送到后端
4. **端口问题**:后端端口被占用或配置错误
## 解决步骤
### 步骤 1停止当前后端服务
如果后端正在运行,先停止它:
- 在运行后端的命令行窗口按 `Ctrl+C`
- 或者关闭运行后端的窗口
### 步骤 2重新编译并启动后端
运行以下脚本:
```batch
rebuild_backend_with_logs.bat
```
这个脚本会:
1. 清理旧的编译文件
2. 重新编译所有代码
3. 启动后端服务并显示详细日志
### 步骤 3验证后端是否正常运行
在新的命令行窗口运行:
```batch
test_amt_api.bat
```
这个脚本会测试:
1. 后端是否运行
2. AMT API 是否可访问
3. 模拟模式状态
### 步骤 4查看日志输出
启动后端后,你应该能看到类似的日志:
```
2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [main] c.s.a.Application : Starting Application
2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [main] c.s.a.Application : Started Application in x.xxx seconds
```
当你点击"测试连接"时,应该看到:
```
2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : 收到 AMT 测试连接请求IP: 192.168.1.100, 模拟模式: false
2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : 使用真实 AMT 服务测试连接
2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.s.AmtService : 开始测试 AMT 连接IP: 192.168.1.100
2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.s.AmtService : 使用手动输入的凭证,用户名: admin
2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.s.AmtService : 准备发送 WS-Management 请求到: 192.168.1.100
```
### 步骤 5如果仍然没有日志
#### 5.1 检查后端是否真的在运行
```batch
netstat -ano | findstr 8080
```
应该看到端口 8080 被占用。
#### 5.2 检查前端请求是否发送
打开浏览器开发者工具F12切换到 Network 标签,点击"测试连接",查看是否有请求发送到 `/device/amt/test`
#### 5.3 检查请求 URL
确认前端请求的 URL 是:
```
POST http://localhost:8080/device/amt/test
```
#### 5.4 检查 CORS 问题
如果看到 CORS 错误,需要在后端添加 CORS 配置。
### 步骤 6使用模拟模式测试
如果真实 AMT 连接有问题,先用模拟模式测试功能:
#### 方法 1修改代码
编辑 `backend/src/main/java/com/soybean/admin/controller/DeviceController.java`
```java
// 将这一行
private boolean useMockMode = false;
// 改为
private boolean useMockMode = true;
```
然后重新编译并启动。
#### 方法 2使用 API 切换
发送 POST 请求:
```batch
curl -X POST http://localhost:8080/device/amt/toggleMock
```
或者在浏览器中访问:
```
http://localhost:8080/device/amt/toggleMock
```
### 步骤 7测试模拟模式
启用模拟模式后:
1. IP 地址:任意(如 192.168.1.100
2. 用户名:`admin`
3. 密码:`admin`
4. 点击"测试连接"
应该会成功并显示日志:
```
2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : 收到 AMT 测试连接请求IP: 192.168.1.100, 模拟模式: true
2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : 使用模拟模式测试连接
2024-xx-xx xx:xx:xx.xxx INFO xxxxx --- [http-nio-8080-exec-1] c.s.a.c.DeviceController : AMT 测试连接结果: true
```
## 常见问题
### Q1: 编译失败
**错误**`mvn clean compile` 失败
**解决**
1. 检查 Java 版本:`java -version`(需要 Java 8 或更高)
2. 检查 Maven 版本:`mvn -version`
3. 查看错误信息,可能缺少依赖
### Q2: 端口被占用
**错误**`Port 8080 was already in use`
**解决**
1. 找到占用端口的进程:
```batch
netstat -ano | findstr 8080
```
2. 结束进程:
```batch
taskkill /PID <进程ID> /F
```
3. 或者修改端口(在 `application.properties` 中)
### Q3: 前端请求超时
**错误**:前端显示 `timeout of 10000ms exceeded`
**原因**
- 后端未运行
- 后端处理请求时间过长
- 网络问题
**解决**
1. 确认后端正在运行
2. 查看后端日志是否有错误
3. 使用模拟模式测试
### Q4: 看不到详细日志
**解决**
1. 确认使用 `rebuild_backend_with_logs.bat` 启动
2. 或者在 `application.properties` 中添加:
```properties
logging.level.com.soybean.admin=DEBUG
```
## 验证清单
- [ ] 后端已停止旧的进程
- [ ] 运行了 `rebuild_backend_with_logs.bat`
- [ ] 看到后端启动成功的日志
- [ ] 端口 8080 正常监听
- [ ] 运行了 `test_amt_api.bat` 验证 API
- [ ] 前端可以访问
- [ ] 点击"测试连接"时后端有日志输出
## 下一步
如果完成以上步骤后:
1. **有日志但连接失败**
- 查看 `AMT_TROUBLESHOOTING.md`
- 使用 `quick_amt_test.bat` 诊断网络
2. **模拟模式正常**
- 说明代码和流程没问题
- 专注于解决真实 AMT 连接问题
3. **仍然没有日志**
- 检查防火墙设置
- 检查前端配置
- 查看浏览器控制台错误
## 获取帮助
如果问题仍未解决:
1. 复制完整的错误信息
2. 复制后端日志
3. 复制浏览器控制台错误
4. 说明已尝试的步骤

View File

@ -1,242 +0,0 @@
# AMT 设备添加功能 - 快速开始
## 问题诊断
### 超时错误timeout of 10000ms exceeded
这个错误表示无法连接到 AMT 设备。请按以下步骤排查:
## 步骤 1运行快速测试
运行 `quick_amt_test.bat` 进行基本连接测试:
```batch
quick_amt_test.bat
```
输入 AMT 设备的 IP 地址,查看测试结果。
### 测试结果分析
#### 情况 1Ping 失败
**问题**:网络不可达
**解决**
- 检查 IP 地址是否正确
- 检查网络连接
- 确认设备已开机
#### 情况 2Ping 成功,但端口关闭
**问题**AMT 未启用或服务未运行
**解决**
1. 在 AMT 设备上启用 AMT
2. 检查 AMT 服务状态
3. 检查防火墙设置
#### 情况 3端口开放但连接超时
**问题**AMT 配置问题或认证失败
**解决**
1. 检查 AMT 用户名和密码
2. 尝试重启 AMT 服务
3. 查看 AMT 配置
## 步骤 2使用模拟模式测试功能
如果暂时没有真实的 AMT 设备,可以使用模拟模式测试功能:
### 启用模拟模式
1. **方法 1修改代码**
编辑 `backend/src/main/java/com/soybean/admin/controller/DeviceController.java`
```java
// 将这一行
private boolean useMockMode = false;
// 改为
private boolean useMockMode = true;
```
2. **方法 2使用 API 切换**
发送 POST 请求到:
```
POST http://localhost:8080/device/amt/toggleMock
```
### 使用模拟模式
启用模拟模式后:
1. 在设备列表点击"新增设备"
2. 选择"AMT 自动添加"
3. 输入任意 IP 地址(如 192.168.1.100
4. 用户名:`admin`
5. 密码:`admin`
6. 点击"测试连接"
7. 应该会成功并自动填充设备信息
### 模拟模式说明
- 模拟模式仅用于测试界面和流程
- 不会真正连接到 AMT 设备
- 测试账号admin/admin
- 会生成模拟的设备信息
## 步骤 3配置真实 AMT 设备
### 3.1 启用 AMT
1. **进入 BIOS/UEFI**
- 重启设备
- 按 F2 或 Del 进入 BIOS
2. **进入 Intel ME 配置**
- 在 BIOS 中找到 Intel ME 或 AMT 选项
- 或者在开机时按 Ctrl+P 直接进入 MEBx
3. **启用 AMT**
- Intel(R) ME Configuration
- Intel(R) AMT Configuration
- Manageability Feature Selection
- 选择 "Intel AMT"
4. **配置网络**
- Network Setup
- TCP/IP Settings
- 选择 DHCP 或配置静态 IP
5. **设置管理员密码**
- MEBx Password
- 设置强密码(至少 8 位,包含大小写字母、数字和特殊字符)
- 记住这个密码!
6. **激活 AMT**
- Activate Network Access
- 选择激活方式(通常选择 "Host Based"
7. **保存并退出**
- 保存设置
- 退出并重启
### 3.2 验证 AMT 配置
在 Windows 上验证 AMT 是否正常运行:
```batch
# 检查 LMS 服务状态
sc query LMS
# 如果服务未运行,启动它
net start LMS
# 检查端口是否监听
netstat -ano | findstr 16992
```
### 3.3 测试 AMT 连接
使用 PowerShell 测试:
```powershell
# 替换为你的 AMT 设备 IP
$amtIP = "192.168.1.100"
# 测试端口
Test-NetConnection -ComputerName $amtIP -Port 16992
# 如果端口开放,尝试连接
$username = "admin"
$password = "your_amt_password"
$base64 = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("${username}:${password}"))
$headers = @{
"Authorization" = "Basic $base64"
"Content-Type" = "application/soap+xml;charset=UTF-8"
}
$body = @"
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsmid="http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd">
<s:Header/>
<s:Body>
<wsmid:Identify/>
</s:Body>
</s:Envelope>
"@
try {
$response = Invoke-WebRequest -Uri "http://${amtIP}:16992/wsman" -Method POST -Headers $headers -Body $body
Write-Host "连接成功!" -ForegroundColor Green
Write-Host $response.Content
} catch {
Write-Host "连接失败:$($_.Exception.Message)" -ForegroundColor Red
}
```
## 步骤 4在系统中使用
### 4.1 保存 AMT 凭证(推荐)
1. 进入"系统设置" > "AMT 设置"
2. 点击"新增凭证"
3. 输入凭证名称、用户名和密码
4. 保存
### 4.2 添加 AMT 设备
1. 进入"设备管理" > "设备列表"
2. 点击"新增设备"
3. 选择"AMT 自动添加"
4. 输入 IP 地址
5. 选择认证方式:
- 使用已保存凭证:从下拉框选择
- 手动输入:填写用户名和密码
6. 点击"测试连接"
7. 连接成功后,确认设备信息
8. 点击"确定"保存
## 常见问题
### Q1: 超时错误怎么办?
**A**: 运行 `quick_amt_test.bat` 诊断网络连接问题。
### Q2: 401 认证失败怎么办?
**A**: 检查用户名和密码是否正确,确认 AMT 已正确配置。
### Q3: 没有真实 AMT 设备怎么测试?
**A**: 启用模拟模式,使用 admin/admin 测试。
### Q4: 如何知道 AMT 是否已启用?
**A**:
- 检查 LMS 服务是否运行
- 测试端口 16992 是否开放
- 尝试访问 http://AMT_IP:16992/wsman
### Q5: 支持哪些 AMT 版本?
**A**: 支持 AMT 6.0 及以上版本。
## 下一步
- 查看 `AMT_TROUBLESHOOTING.md` 了解详细的故障排除
- 查看 `AMT_DEVICE_ADD_FEATURE.md` 了解完整功能说明
- 配置更多 AMT 设备
- 探索远程控制功能
## 获取帮助
如果遇到问题:
1. 查看错误信息
2. 运行诊断工具
3. 查阅故障排除文档
4. 检查 AMT 设备配置
5. 查看系统日志
## 重要提示
⚠️ **安全警告**
- 使用强密码
- 限制网络访问
- 定期更新固件
- 不要在生产环境使用模拟模式

View File

@ -1,269 +0,0 @@
# AMT 连接故障排除指南
## 常见错误及解决方案
### 错误 1: HTTP 401 - 认证失败
**错误信息**`AMT 连接测试失败: HTTP 错误: 401`
**可能原因**
1. 用户名或密码错误
2. AMT 未正确配置
3. 需要使用 Digest 认证而不是 Basic 认证
4. 需要使用 HTTPS 而不是 HTTP
**解决方案**
#### 方案 1检查 AMT 凭证
1. 确认 AMT 管理员用户名(通常是 `admin`
2. 确认 AMT 管理员密码
3. 尝试使用 AMT 配置工具重置密码
#### 方案 2检查 AMT 配置状态
在 AMT 设备上:
1. 重启进入 BIOS/UEFI
2. 按 Ctrl+P 进入 Intel ME 配置
3. 检查 AMT 是否已启用
4. 检查网络配置是否正确
#### 方案 3使用测试工具诊断
运行 `test_amt_connection.bat` 进行详细诊断:
```batch
test_amt_connection.bat
```
输入 IP 地址和用户名,查看详细的连接测试结果。
#### 方案 4手动测试 AMT 连接
使用 PowerShell 测试:
```powershell
# 测试端口
Test-NetConnection -ComputerName 192.168.1.100 -Port 16992
# 测试 HTTP 连接
$username = "admin"
$password = "your_password"
$base64 = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("${username}:${password}"))
$headers = @{
"Authorization" = "Basic $base64"
"Content-Type" = "application/soap+xml;charset=UTF-8"
}
$body = @"
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:wsmid="http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd">
<s:Header/>
<s:Body>
<wsmid:Identify/>
</s:Body>
</s:Envelope>
"@
Invoke-WebRequest -Uri "http://192.168.1.100:16992/wsman" -Method POST -Headers $headers -Body $body
```
#### 方案 5尝试 HTTPS 连接
某些 AMT 配置要求使用 HTTPS
- HTTP 端口16992
- HTTPS 端口16993
修改代码已支持自动尝试 HTTPS重新编译后端即可。
### 错误 2: 连接超时
**错误信息**`AMT 连接超时`
**可能原因**
1. IP 地址错误
2. 网络不可达
3. 防火墙阻止
4. AMT 未启用
**解决方案**
1. **检查网络连接**
```batch
ping 192.168.1.100
```
2. **检查端口是否开放**
```batch
telnet 192.168.1.100 16992
```
或使用 PowerShell
```powershell
Test-NetConnection -ComputerName 192.168.1.100 -Port 16992
```
3. **检查防火墙规则**
- Windows 防火墙
- 网络防火墙
- AMT 设备防火墙
4. **确认 AMT 已启用**
- 进入 BIOS/UEFI
- 检查 Intel ME 配置
- 确认 AMT 服务正在运行
### 错误 3: 连接被拒绝
**错误信息**`Connection refused`
**可能原因**
1. AMT 服务未运行
2. 端口被占用
3. AMT 未正确配置
**解决方案**
1. **检查 AMT 服务状态**
在 AMT 设备上运行:
```batch
sc query LMS
```
2. **重启 AMT 服务**
```batch
net stop LMS
net start LMS
```
3. **检查端口占用**
```batch
netstat -ano | findstr 16992
```
## AMT 配置检查清单
### 基本配置
- [ ] AMT 已在 BIOS/UEFI 中启用
- [ ] 设置了 AMT 管理员密码
- [ ] 配置了网络设置IP、子网掩码、网关
- [ ] AMT 服务正在运行
### 网络配置
- [ ] AMT 设备网络可达
- [ ] 防火墙允许端口 16992 (HTTP) 和 16993 (HTTPS)
- [ ] 没有网络隔离或 VLAN 限制
### 认证配置
- [ ] 知道正确的管理员用户名
- [ ] 知道正确的管理员密码
- [ ] 密码符合复杂度要求
## 使用 Intel AMT 配置工具
### Intel ME Configuration Tool (MEBx)
1. **进入 MEBx**
- 开机时按 Ctrl+P
- 默认密码admin
2. **启用 AMT**
- Intel(R) ME Configuration
- Intel(R) AMT Configuration
- Manageability Feature Selection
- 选择 "Intel AMT"
3. **配置网络**
- Network Setup
- TCP/IP Settings
- 配置 IP 地址DHCP 或静态)
4. **设置密码**
- MEBx Password
- 设置强密码(至少 8 位,包含大小写字母和数字)
5. **激活 AMT**
- Activate Network Access
- 选择激活方式
### Intel Setup and Configuration Service (SCS)
使用 Intel SCS 进行批量配置:
1. 下载 Intel SCS
2. 创建配置文件
3. 批量部署到设备
## 常用 AMT 命令
### 使用 PowerShell 模块
```powershell
# 安装 Intel vPro 模块
Install-Module -Name IntelVPro
# 连接到 AMT 设备
$cred = Get-Credential
Connect-AMT -ComputerName 192.168.1.100 -Credential $cred
# 获取设备信息
Get-AMTSystemInfo
# 获取电源状态
Get-AMTPowerState
# 远程开机
Invoke-AMTPowerAction -Action PowerOn
```
### 使用 WSMAN 命令行
```batch
# 测试连接
wsman identify -r:http://192.168.1.100:16992/wsman -auth:basic -u:admin -p:password
# 获取系统信息
wsman get http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ComputerSystem -r:http://192.168.1.100:16992/wsman -auth:basic -u:admin -p:password
```
## 推荐的 AMT 设置
### 安全设置
- 使用强密码(至少 12 位)
- 启用 TLS/SSL
- 限制访问 IP 范围
- 定期更新固件
### 网络设置
- 使用静态 IP便于管理
- 配置正确的 DNS
- 确保网络稳定
### 功能设置
- 启用远程控制
- 启用 KVM键盘视频鼠标
- 启用 IDE-RIDE 重定向)
- 启用 SOL串行控制台
## 参考资料
- [Intel AMT 官方文档](https://software.intel.com/sites/manageability/)
- [Intel vPro 技术指南](https://www.intel.com/content/www/us/en/architecture-and-technology/vpro/vpro-technology-general.html)
- [WS-Management 协议规范](https://www.dmtf.org/standards/ws-man)
## 获取帮助
如果以上方法都无法解决问题:
1. 检查 AMT 设备日志
2. 查看系统事件日志
3. 联系设备制造商支持
4. 查阅 Intel AMT 社区论坛
## 调试模式
在开发环境中启用详细日志:
1. 修改 `application.properties`
```properties
logging.level.com.soybean.admin.service.AmtService=DEBUG
```
2. 查看详细的请求和响应日志
3. 使用网络抓包工具(如 Wireshark分析流量

View File

@ -1,83 +0,0 @@
# AMT 凭证功能部署说明
## 问题修复
修复了 404 错误,主要问题:
1. ✅ 控制器返回格式不统一 - 已改用 `Result`
2. ✅ 返回代码不匹配 - 已改为 `"0000"`
3. ✅ API 路径前缀问题 - 已移除 `/api` 前缀
## 部署步骤
### 1. 初始化数据库表
```bash
init_amt_credential_table.bat
```
### 2. 重启后端服务
停止当前后端服务,然后重新启动:
```bash
cd backend
mvn spring-boot:run
```
或使用批处理脚本:
```bash
start_backend.bat
```
### 3. 清除浏览器缓存
`Ctrl + Shift + Delete` 清除浏览器缓存
### 4. 访问页面
登录系统后,访问:**系统设置 > AMT设置**
## API 端点
所有 API 端点(无需 `/api` 前缀):
- `GET /amt/credential/list` - 分页查询凭证列表
- `GET /amt/credential/all` - 获取所有启用的凭证
- `GET /amt/credential/{id}` - 根据ID获取凭证
- `POST /amt/credential` - 创建凭证
- `PUT /amt/credential/{id}` - 更新凭证
- `DELETE /amt/credential/{id}` - 删除凭证
- `PUT /amt/credential/{id}/default` - 设置默认凭证
- `POST /amt/credential/{id}/test` - 测试凭证连接
- `POST /amt/credential/batch-test` - 批量测试凭证
## 测试 API
运行测试脚本:
```bash
test_amt_api.bat
```
或手动测试:
```bash
curl -X GET "http://localhost:8080/amt/credential/list?page=1&size=10"
```
## 常见问题
### Q: 仍然显示 404 错误
A: 确保后端服务已重启,并且数据库表已创建
### Q: 返回数据格式错误
A: 检查后端是否使用了最新的代码(使用 Result 类)
### Q: 无法创建凭证
A: 检查数据库连接和表结构是否正确
## 验证清单
- [ ] 数据库表 `amt_credential` 已创建
- [ ] 后端服务已重启
- [ ] 浏览器缓存已清除
- [ ] 可以访问 AMT 设置页面
- [ ] 可以查看凭证列表
- [ ] 可以添加新凭证
- [ ] 可以编辑凭证
- [ ] 可以删除凭证
- [ ] 可以测试凭证连接
- [ ] 可以批量测试凭证

View File

@ -1,99 +0,0 @@
# 设备字段显示更新
## 修改内容
根据需求,对设备相关页面的字段显示进行了以下调整:
### 字段变更
1. **设备编号****UUID**字段名称更改宽度增加到280px以适应UUID长度
2. **移除字段**
- 设备类型type
- 所在位置location
- 负责人manager
### 修改的页面
#### 1. 设备列表页面 (`src/views/device/list/index.vue`)
- ✅ 表格列设备编号改为UUID移除设备类型、所在位置、负责人
- ✅ 搜索栏:移除设备类型筛选
- ✅ 表单UUID字段移除设备类型、所在位置、负责人输入框
- ✅ 详情弹窗显示UUID移除设备类型、所在位置、负责人信息
- ✅ 搜索参数移除type字段
- ✅ 表单数据移除type、location、manager字段
- ✅ 表单验证更新为UUID验证
#### 2. 电源控制页面 (`src/views/device/power/index.vue`)
- ✅ 表格列设备编号改为UUID280px宽度移除设备类型、所在位置、负责人
- ✅ 添加MAC地址列显示
#### 3. 在线设备页面 (`src/views/device/online/index.vue`)
- ✅ 卡片视图移除设备类型、所在位置、负责人显示保留UUID、IP、MAC
- ✅ 列表视图表格UUID列280px宽度移除设备类型、所在位置、负责人
- ✅ 详情弹窗显示UUID移除设备类型、所在位置、负责人
#### 4. 设备监控页面 (`src/views/device/monitor/index.vue`)
- ✅ 监控卡片位置信息改为显示IP地址
- ✅ 详情弹窗系统信息显示UUID移除设备类型、所在位置、负责人
## 保留的字段
所有页面保留以下字段:
- 设备名称deviceName
- UUIDdeviceCode
- 设备状态status
- IP地址ipAddress
- MAC地址macAddress
- 创建时间createTime
- 更新时间updateTime
- 备注remark
## 技术细节
### 表格列宽度调整
- UUID列280px带省略号提示
- 其他列:保持原有宽度
### 表单布局
- 使用 `n-grid` 2列布局
- UUID字段在编辑时禁用disabled
- 移除了设备类型、所在位置、负责人的表单项
### 数据模型
后端数据模型保持不变,只是前端不再显示和编辑这些字段。如果需要完全移除这些字段,需要同步修改:
1. 后端实体类Device.java
2. 数据库表结构
3. DTO类
4. API接口
## 测试建议
1. 测试设备列表页面的显示和操作
2. 测试电源控制页面的设备列表
3. 测试在线设备页面的卡片和列表视图
4. 测试设备监控页面的监控卡片和详情
5. 测试设备的新增、编辑、删除功能
6. 验证UUID字段的显示和省略号提示
7. 确认所有移除的字段不再显示
## 注意事项
1. **UUID长度**UUID通常为36个字符设置280px宽度并启用省略号提示
2. **后端兼容**后端仍然可以接收和存储type、location、manager字段只是前端不显示
3. **数据迁移**:如果需要完全移除这些字段,建议先备份数据
4. **API兼容性**现有API接口保持不变只是前端不使用这些字段
## 文件清单
修改的文件:
- `src/views/device/list/index.vue`
- `src/views/device/power/index.vue`
- `src/views/device/online/index.vue`
- `src/views/device/monitor/index.vue`
## 后续优化建议
如果确定不再需要这些字段,可以考虑:
1. 从后端实体类中移除
2. 从数据库表中删除列
3. 更新API文档
4. 清理相关的类型定义

View File

@ -1,46 +0,0 @@
@echo off
chcp 65001 >nul
echo ========================================
echo 添加缺失的路由到数据库
echo ========================================
echo.
echo 正在执行 SQL 脚本...
mysql -u root -proot < add_missing_routes.sql
if %errorlevel% equ 0 (
echo.
echo ========================================
echo 路由添加成功!
echo ========================================
echo.
echo 下一步操作:
echo 1. 重启后端服务(必须!)
echo - 停止当前后端Ctrl+C
echo - cd backend
echo - mvn spring-boot:run
echo.
echo 2. 清除浏览器缓存
echo - 按 Ctrl+Shift+Delete
echo - 选择"全部时间"
echo - 清除缓存
echo.
echo 3. 重新登录测试
echo - 点击"我的设备"菜单
echo - 点击"设备申请"菜单
echo - 应该正常显示在布局中,不再跳转到独立页面
echo.
) else (
echo.
echo ========================================
echo 执行失败!
echo ========================================
echo.
echo 请检查:
echo 1. MySQL 服务是否运行
echo 2. 数据库连接信息是否正确
echo 3. 数据库 soybean_admin 是否存在
echo.
)
pause

View File

@ -1,61 +0,0 @@
-- 添加缺失的"我的设备"和"设备申请"路由到数据库
USE soybean_admin;
-- 1. 删除可能存在的旧数据
DELETE FROM sys_route WHERE name LIKE 'my-device%' OR name LIKE 'my-application%';
-- 2. 添加"我的设备"父路由
INSERT INTO sys_route (route_id, name, path, component, meta, status, order_num) VALUES
('my-device', 'my-device', '/my-device', 'layout.base',
'{"title":"我的设备","i18nKey":"route.my_device","icon":"mdi:laptop","order":7}',
1, 70);
-- 3. 添加"我的设备"子路由
INSERT INTO sys_route (route_id, name, path, component, meta, status, order_num) VALUES
('my-device_status', 'my-device_status', '/my-device/status', 'view.my-device_status',
'{"title":"设备状态","i18nKey":"route.my_device_status","icon":"mdi:information","order":1}',
1, 71),
('my-device_remote-control', 'my-device_remote-control', '/my-device/remote-control', 'view.my-device_remote-control',
'{"title":"远程控制","i18nKey":"route.my_device_remote","icon":"mdi:remote-desktop","order":3}',
1, 72),
('my-device_power-control', 'my-device_power-control', '/my-device/power-control', 'view.my-device_power-control',
'{"title":"电源控制","i18nKey":"route.my_device_power","icon":"mdi:power-settings","order":2}',
1, 73);
-- 4. 添加"设备申请"父路由
INSERT INTO sys_route (route_id, name, path, component, meta, status, order_num) VALUES
('my-application', 'my-application', '/my-application', 'layout.base',
'{"title":"设备申请","i18nKey":"route.my_application","icon":"mdi:file-document","order":8}',
1, 80);
-- 5. 添加"设备申请"子路由
INSERT INTO sys_route (route_id, name, path, component, meta, status, order_num) VALUES
('my-application_apply', 'my-application_apply', '/my-application/apply', 'view.my-application_apply',
'{"title":"申请使用","i18nKey":"route.my_application_apply","icon":"mdi:file-plus","order":1}',
1, 81),
('my-application_my-list', 'my-application_my-list', '/my-application/my-list', 'view.my-application_my-list',
'{"title":"我的申请","i18nKey":"route.my_application_list","icon":"mdi:format-list-checks","order":2}',
1, 82);
-- 6. 验证添加结果
SELECT '=== 我的设备路由 ===' AS info;
SELECT route_id, name, path, component FROM sys_route WHERE name LIKE 'my-device%' ORDER BY order_num;
SELECT '=== 设备申请路由 ===' AS info;
SELECT route_id, name, path, component FROM sys_route WHERE name LIKE 'my-application%' ORDER BY order_num;
-- 7. 更新角色权限(确保角色有这些菜单的访问权限)
SELECT '=== 更新角色权限 ===' AS info;
-- 超级管理员添加这些菜单
UPDATE sys_role
SET menus = CONCAT(menus, ',my-device,my-device_status,my-device_remote-control,my-device_power-control,my-application,my-application_apply,my-application_my-list')
WHERE role_code = 'R_SUPER' AND menus NOT LIKE '%my-device%';
-- 普通用户添加这些菜单
UPDATE sys_role
SET menus = CONCAT(menus, ',my-device,my-device_status,my-device_remote-control,my-device_power-control,my-application,my-application_apply,my-application_my-list')
WHERE role_code = 'R_USER' AND menus NOT LIKE '%my-device%';
SELECT '=== 完成 ===' AS info;
SELECT '路由已添加到数据库,请重启后端服务!' AS message;

View File

@ -1,42 +0,0 @@
@echo off
chcp 65001 >nul
echo ========================================
echo 添加"我的设备""设备申请"路由配置
echo ========================================
echo.
echo 正在执行 SQL 脚本...
mysql -u root -proot < add_my_device_and_application_routes.sql
if %errorlevel% equ 0 (
echo.
echo ========================================
echo 路由配置添加成功!
echo ========================================
echo.
echo 下一步操作:
echo 1. 重启后端服务(必须!)
echo 2. 清除浏览器缓存Ctrl+Shift+Delete
echo 3. 重新登录测试
echo.
echo 预期结果:
echo - "我的设备""设备申请"菜单正常显示
echo - 点击菜单不会全屏,而是在布局中正常显示
echo - 子菜单可以正常访问
echo.
) else (
echo.
echo ========================================
echo 执行失败!
echo ========================================
echo.
echo 可能的原因:
echo 1. MySQL 未启动
echo 2. 数据库连接信息不正确
echo 3. 数据库 soybean_admin 不存在
echo.
echo 请检查后重试
echo.
)
pause

View File

@ -1,49 +0,0 @@
-- 添加"我的设备"和"设备申请"路由配置
USE soybean_admin;
-- 1. 先删除可能存在的旧数据(如果有)
DELETE FROM sys_route WHERE name LIKE 'my-device%' OR name LIKE 'my-application%';
-- 2. 添加"我的设备"父路由
INSERT INTO sys_route (route_id, name, path, component, meta, status, order_num) VALUES
('my-device', 'my-device', '/my-device', 'layout.base',
'{"title":"我的设备","i18nKey":"route.my-device","icon":"mdi:laptop","order":7}',
1, 70);
-- 3. 添加"我的设备"子路由
INSERT INTO sys_route (route_id, name, path, component, meta, status, order_num) VALUES
('my-device_status', 'my-device_status', '/my-device/status', 'view.my-device_status',
'{"title":"设备状态","i18nKey":"route.my-device_status","icon":"mdi:information","order":1}',
1, 71),
('my-device_remote-control', 'my-device_remote-control', '/my-device/remote-control', 'view.my-device_remote-control',
'{"title":"远程控制","i18nKey":"route.my-device_remote-control","icon":"mdi:remote-desktop","order":2}',
1, 72),
('my-device_power-control', 'my-device_power-control', '/my-device/power-control', 'view.my-device_power-control',
'{"title":"电源控制","i18nKey":"route.my-device_power-control","icon":"mdi:power","order":3}',
1, 73);
-- 4. 添加"设备申请"父路由
INSERT INTO sys_route (route_id, name, path, component, meta, status, order_num) VALUES
('my-application', 'my-application', '/my-application', 'layout.base',
'{"title":"设备申请","i18nKey":"route.my-application","icon":"mdi:file-document","order":8}',
1, 80);
-- 5. 添加"设备申请"子路由
INSERT INTO sys_route (route_id, name, path, component, meta, status, order_num) VALUES
('my-application_apply', 'my-application_apply', '/my-application/apply', 'view.my-application_apply',
'{"title":"申请设备","i18nKey":"route.my-application_apply","icon":"mdi:file-plus","order":1}',
1, 81),
('my-application_my-list', 'my-application_my-list', '/my-application/my-list', 'view.my-application_my-list',
'{"title":"我的申请","i18nKey":"route.my-application_my-list","icon":"mdi:format-list-bulleted","order":2}',
1, 82);
-- 6. 验证添加结果
SELECT '=== 我的设备路由 ===' AS info;
SELECT route_id, name, path, component, meta FROM sys_route WHERE name LIKE 'my-device%' ORDER BY order_num;
SELECT '=== 设备申请路由 ===' AS info;
SELECT route_id, name, path, component, meta FROM sys_route WHERE name LIKE 'my-application%' ORDER BY order_num;
-- 7. 提示
SELECT '=== 重要提示 ===' AS info;
SELECT '请重启后端服务使配置生效!' AS message;

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!-- There are three options for setting the location where the temp files can be created.
The three options are shown below with the first two commented out. Uncomment the desired option.
The default option is ApplicationStartUpPath.
If there is more than 1 un-commented option the HLAPI library will use the last definition-->
<!-- a path predefined by the user as the location where the temp files will be created
<add key="TEMP_FILE_DIRECTORY" value="c:\myFolder"></add>-->
<!-- The path for the user application data.
If a path does not exist, one is created in the following format:
Home Directory\CompanyName\ProductName\ProductVersion
<add key="TEMP_FILE_DIRECTORY" value="UserAppDataPath"></add>-->
<!--The path for the executable file that started the application-->
<add key="TEMP_FILE_DIRECTORY" value="ApplicationStartUpPath"></add>
</appSettings>
</configuration>

View File

@ -1,8 +0,0 @@
[COMMON]
Storage_Enabled = 1
Debug_Level = 0
IP_Version_Priority = 4
; library heartbeat interval - will be set by rx_timeout / HB_Factor . default 0 ==> 3
HB_Factor = 0
; library receive timeout - will be set by hb_interval X Timeout_Factor . default ==> 3
Timeout_Factor = 0

View File

@ -1,11 +0,0 @@
ECHO.
ECHO ****************************************************
ECHO Register IWSManClient.dll
ECHO ****************************************************
call "C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm" "IWSManClient.dll" /codebase /tlb
ECHO.
ECHO ****************************************************
ECHO Register HLAPI.dll
ECHO ****************************************************
call "C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm" "HLAPI.dll" /codebase /tlb

View File

@ -1,435 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2010 All Rights Reserved.
//
// Contents: Demonstrate the AlarmClock COM interface.
//
//----------------------------------------------------------------------------
var info = new ActiveXObject("Intel.Manageability.ConnectionInfo");
if (typeof (info) != undefined)
{
info.Host = "10.0.0.15";
info.UserName = "admin";
info.Password = "Admin!98";
var amt = new ActiveXObject("Intel.Manageability.COM.AMTInstance");
if (typeof (amt) != undefined)
{
try {
amt.Create(info);
// =============================================================
// Summary: Set single alarm.
// As JScript dateTime (Date()) does not match .Net DateTime
// object, the SetSingleAlarm gets the next time as a string.
// JavaScript Date object supports 3 string formats, but the only
// format that .Net also supports is: Date.toLocaleString()
// e.g: Sunday, October 10, 2010 12:00:00 AM
// note: check that the validation of time has to be on the script side
// ==============================================================
var nextTime = new Date("10/10/2010");
amt.AlarmClock.SetSingleAlarm(nextTime.toLocaleString());
// =============================================================
// Summary: Set recurring alarm.
// About nextTime object - see the comment of SetSingleAlarm call
// interval - should provide the interval as string.
// It is in the format: PnYnMnDTnHnMnS
// where:
// 'P' - desgnates the start of a date string
// nY - represents the number of years
// nM - the number of months
// nD - the number of days
// 'T' - is the date/time separator (start of a time string)
// nH - the number of hours
// nM - the number of minutes
// nS - the number of seconds. The number of seconds can include decimal digits to an arbitrary precision.
// Example:
// P1Y2M3DT10H30M - defines a duration of 1 year, 2 months, 3 days, 10 hours, and 30 minutes
// Note: That the ONLY parameters that can be set in the interval are: Days, Hours, Minutes
// - Other parameters MUST be 0.
// ==============================================================
nextTime.setFullYear(2012);
var interval = "P0Y0M1DT5H8M0S";
amt.AlarmClock.SetRecurringAlarm(nextTime.toLocaleString(), interval);
// Get alarm clock settings
var settings = amt.AlarmClock.GetAlarmClockSettings();
var nextAlarmTime = settings.NextAlarmTime;
var intervalTime = settings.AlarmInterval.toString();
// Disable the alarm clock settings
amt.AlarmClock.DisableAll();
}
catch (Error)
{
alert(Error.Message);
}
}
else
{
alert("Failed to perform AlarmClock call");
}
}
else
{
alert("Failed to initialize ConnectionInfo object");
}
// SIG // Begin signature block
// SIG // MIItiQYJKoZIhvcNAQcCoIItejCCLXYCAQExDzANBglg
// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
// SIG // vRQ/gVqbLeXuvjJ0BNeL7YsLnaheMrRnDtHS6xjPcpCg
// SIG // ghF+MIIFbzCCBFegAwIBAgIQSPyTtGBVlI02p8mKidaU
// SIG // FjANBgkqhkiG9w0BAQwFADB7MQswCQYDVQQGEwJHQjEb
// SIG // MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD
// SIG // VQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
// SIG // TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRl
// SIG // IFNlcnZpY2VzMB4XDTIxMDUyNTAwMDAwMFoXDTI4MTIz
// SIG // MTIzNTk1OVowVjELMAkGA1UEBhMCR0IxGDAWBgNVBAoT
// SIG // D1NlY3RpZ28gTGltaXRlZDEtMCsGA1UEAxMkU2VjdGln
// SIG // byBQdWJsaWMgQ29kZSBTaWduaW5nIFJvb3QgUjQ2MIIC
// SIG // IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjeeU
// SIG // EiIEJHQu/xYjApKKtq42haxH1CORKz7cfeIxoFFvrISR
// SIG // 41KKteKW3tCHYySJiv/vEpM7fbu2ir29BX8nm2tl06UM
// SIG // abG8STma8W1uquSggyfamg0rUOlLW7O4ZDakfko9qXGr
// SIG // YbNzszwLDO/bM1flvjQ345cbXf0fEj2CA3bm+z9m0pQx
// SIG // afptszSswXp43JJQ8mTHqi0Eq8Nq6uAvp6fcbtfo/9oh
// SIG // q0C/ue4NnsbZnpnvxt4fqQx2sycgoda6/YDnAdLv64Ip
// SIG // lXCN/7sVz/7RDzaiLk8ykHRGa0c1E3cFM09jLrgt4b9l
// SIG // pwRrGNhx+swI8m2JmRCxrds+LOSqGLDGBwF1Z95t6WNj
// SIG // HjZ/aYm+qkU+blpfj6Fby50whjDoA7NAxg0POM1nqFOI
// SIG // +rgwZfpvx+cdsYN0aT6sxGg7seZnM5q2COCABUhA7vaC
// SIG // ZEao9XOwBpXybGWfv1VbHJxXGsd4RnxwqpQbghesh+m2
// SIG // yQ6BHEDWFhcp/FycGCvqRfXvvdVnTyheBe6QTHrnxvTQ
// SIG // /PrNPjJGEyA2igTqt6oHRpwNkzoJZplYXCmjuQymMDg8
// SIG // 0EY2NXycuu7D1fkKdvp+BRtAypI16dV60bV/AK6pkKrF
// SIG // fwGcELEW/MxuGNxvYv6mUKe4e7idFT/+IAx1yCJaE5UZ
// SIG // kADpGtXChvHjjuxf9OUCAwEAAaOCARIwggEOMB8GA1Ud
// SIG // IwQYMBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1Ud
// SIG // DgQWBBQy65Ka/zWWSC8oQEJwIDaRXBeF5jAOBgNVHQ8B
// SIG // Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUE
// SIG // DDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAw
// SIG // CAYGZ4EMAQQBMEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6
// SIG // Ly9jcmwuY29tb2RvY2EuY29tL0FBQUNlcnRpZmljYXRl
// SIG // U2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggr
// SIG // BgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29t
// SIG // MA0GCSqGSIb3DQEBDAUAA4IBAQASv6Hvi3SamES4aUa1
// SIG // qyQKDKSKZ7g6gb9Fin1SB6iNH04hhTmja14tIIa/ELiu
// SIG // eTtTzbT72ES+BtlcY2fUQBaHRIZyKtYyFfUSg8L54V0R
// SIG // QGf2QidyxSPiAjgaTCDi2wH3zUZPJqJ8ZsBRNraJAlTH
// SIG // /Fj7bADu/pimLpWhDFMpH2/YGaZPnvesCepdgsaLr4Cn
// SIG // vYFIUoQx2jLsFeSmTD1sOXPUC4U5IOCFGmjhp0g4qdE2
// SIG // JXfBjRkWxYhMZn0vY86Y6GnfrDyoXZ3JHFuu2PMvdM+4
// SIG // fvbXg50RlmKarkUT2n/cR/vfw1Kf5gZV6Z2M8jpiUbzs
// SIG // JA8p1FiAhORFe1rYMIIF6TCCBFGgAwIBAgIRAP5c1JUB
// SIG // imUXpNBO+HtrkzowDQYJKoZIhvcNAQEMBQAwVDELMAkG
// SIG // A1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRl
// SIG // ZDErMCkGA1UEAxMiU2VjdGlnbyBQdWJsaWMgQ29kZSBT
// SIG // aWduaW5nIENBIFIzNjAeFw0yNDAzMTMwMDAwMDBaFw0y
// SIG // NTAzMTMyMzU5NTlaMFoxCzAJBgNVBAYTAlVTMRMwEQYD
// SIG // VQQIDApDYWxpZm9ybmlhMRowGAYDVQQKDBFJbnRlbCBD
// SIG // b3Jwb3JhdGlvbjEaMBgGA1UEAwwRSW50ZWwgQ29ycG9y
// SIG // YXRpb24wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGK
// SIG // AoIBgQCOvQs9ebKrmAXTOWV54xQTZ76syOFlIGkPz4wS
// SIG // qINrfyJEgclyvtytZuAsELU4KqTAg9fdxNwP8Qx5llRL
// SIG // 6QilAfsXPHP/BROk8pqyCgP9FB+41XrC4AqNAMXzNHZH
// SIG // Kq7yyr53IbHnpHWjNm/hONTUowIYVoBqdS6E2cqwDiTa
// SIG // RrDyH4AP9PiekQhAofQQEW1wkVwJ807j7Vg13ypTsEmu
// SIG // PqNrSTO0zzQC0yUix6GW731DqYDoftJVsePYYpqFupXw
// SIG // 7eXGQzzk/MDcKXeQ1sAfDIcy3zRKW70f/ObPEj/3Vkaw
// SIG // FZEkcUtcKiGWvTrMQ/q4wQSHvCQ0dWPYYxgVCsmzAGN9
// SIG // D6fKw6RXh9WGtQPIDXmnvCkUpWnK6MqMYUb4i/Z/JwmS
// SIG // IYqi+kNELvXCRsJWIi/ZgDEclTyNwR39LOq+gUarfMgW
// SIG // D/9nbIHOM/WFfQxiVGis9pI8LndTiWbqRQ2YqPrIc2zv
// SIG // 4e/IiUkIjFR4DFRRFTmRRERN3VUhBbFnTwMCAwEAAaOC
// SIG // Aa4wggGqMB8GA1UdIwQYMBaAFA8qyyCHKLjsb0iuK1Sm
// SIG // KaoXpM0MMB0GA1UdDgQWBBQo7T1qfzp1FOdWlwIgcHEP
// SIG // 4L2HxjAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIw
// SIG // ADATBgNVHSUEDDAKBggrBgEFBQcDAzBKBgNVHSAEQzBB
// SIG // MDUGDCsGAQQBsjEBAgEDAjAlMCMGCCsGAQUFBwIBFhdo
// SIG // dHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZngQwBBAEw
// SIG // SQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5zZWN0
// SIG // aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25pbmdD
// SIG // QVIzNi5jcmwweQYIKwYBBQUHAQEEbTBrMEQGCCsGAQUF
// SIG // BzAChjhodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3Rp
// SIG // Z29QdWJsaWNDb2RlU2lnbmluZ0NBUjM2LmNydDAjBggr
// SIG // BgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20w
// SIG // IwYDVR0RBBwwGoEYcGtpZW5naW5lZXJpbmdAaW50ZWwu
// SIG // Y29tMA0GCSqGSIb3DQEBDAUAA4IBgQAdNVhldXFo7Uwk
// SIG // BpDbQ0aZktPDblIrNRdvtHMCK5NnWPLVyomeUbLqZASl
// SIG // n6YzUh3Vu/Q71QqLQW8kWFHQ0nhZEPI0T5vr5c8hYUVr
// SIG // luKkmHCJceqomqRmRBbL5hBFzJ8BvcxBHirGJZzP2UiN
// SIG // t7i2Ql8oScd+Rtj6Qa97TMpuoCL7WuQ5peEv1xCSSP2b
// SIG // yCoTzuUFHpgktO0vUDe0jinhJJNS3VdXHAgTbUaQM5hl
// SIG // a+ImEuKW1a/MorIWHtuU0gD3lhMvT2BDJ42W0EEvJQ/F
// SIG // xQeoH4kySxQgsyCrB8zCJPhbiZcFZauHnP1q8dPn6VXq
// SIG // NkjyWSP4hPNoLQ+aMsKLaawuOzHb1ZXL23j2Jx6Caqkb
// SIG // Z4V/hOo5RkbZ4VAj1fgbEUnKeL/AyFCRnVeQM0ua2Lt2
// SIG // ISRgyYE4DxrwbZr2j3ibcXCs11JzKT7Wp7iYFt6NbnEq
// SIG // PUim/XTahXC3DlFQ9pQ44fOWdGpyaJvduMYVZuHBjVkh
// SIG // e2s/HFQOsx/0XOgwggYaMIIEAqADAgECAhBiHW0MUgGe
// SIG // O5B5FSCJIRwKMA0GCSqGSIb3DQEBDAUAMFYxCzAJBgNV
// SIG // BAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQx
// SIG // LTArBgNVBAMTJFNlY3RpZ28gUHVibGljIENvZGUgU2ln
// SIG // bmluZyBSb290IFI0NjAeFw0yMTAzMjIwMDAwMDBaFw0z
// SIG // NjAzMjEyMzU5NTlaMFQxCzAJBgNVBAYTAkdCMRgwFgYD
// SIG // VQQKEw9TZWN0aWdvIExpbWl0ZWQxKzApBgNVBAMTIlNl
// SIG // Y3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYw
// SIG // ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCb
// SIG // K51T+jU/jmAGQ2rAz/V/9shTUxjIztNsfvxYB5UXeWUz
// SIG // CxEeAEZGbEN4QMgCsJLZUKhWThj/yPqy0iSZhXkZ6Pg2
// SIG // A2NVDgFigOMYzB2OKhdqfWGVoYW3haT29PSTahYkwmMv
// SIG // 0b/83nbeECbiMXhSOtbam+/36F09fy1tsB8je/RV0mIk
// SIG // 8XL/tfCK6cPuYHE215wzrK0h1SWHTxPbPuYkRdkP05Zw
// SIG // mRmTnAO5/arnY83jeNzhP06ShdnRqtZlV59+8yv+KIhE
// SIG // 5ILMqgOZYAENHNX9SJDm+qxp4VqpB3MV/h53yl41aHU5
// SIG // pledi9lCBbH9JeIkNFICiVHNkRmq4TpxtwfvjsUedyz8
// SIG // rNyfQJy/aOs5b4s+ac7IH60B+Ja7TVM+EKv1WuTGwcLm
// SIG // oU3FpOFMbmPj8pz44MPZ1f9+YEQIQty/NQd/2yGgW+uf
// SIG // flcZ/ZE9o1M7a5Jnqf2i2/uMSWymR8r2oQBMdlyh2n5H
// SIG // irY4jKnFH/9gRvd+QOfdRrJZb1sCAwEAAaOCAWQwggFg
// SIG // MB8GA1UdIwQYMBaAFDLrkpr/NZZILyhAQnAgNpFcF4Xm
// SIG // MB0GA1UdDgQWBBQPKssghyi47G9IritUpimqF6TNDDAO
// SIG // BgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIB
// SIG // ADATBgNVHSUEDDAKBggrBgEFBQcDAzAbBgNVHSAEFDAS
// SIG // MAYGBFUdIAAwCAYGZ4EMAQQBMEsGA1UdHwREMEIwQKA+
// SIG // oDyGOmh0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGln
// SIG // b1B1YmxpY0NvZGVTaWduaW5nUm9vdFI0Ni5jcmwwewYI
// SIG // KwYBBQUHAQEEbzBtMEYGCCsGAQUFBzAChjpodHRwOi8v
// SIG // Y3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2Rl
// SIG // U2lnbmluZ1Jvb3RSNDYucDdjMCMGCCsGAQUFBzABhhdo
// SIG // dHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0B
// SIG // AQwFAAOCAgEABv+C4XdjNm57oRUgmxP/BP6YdURhw1aV
// SIG // cdGRP4Wh60BAscjW4HL9hcpkOTz5jUug2oeunbYAowbF
// SIG // C2AKK+cMcXIBD0ZdOaWTsyNyBBsMLHqafvIhrCymlaS9
// SIG // 8+QpoBCyKppP0OcxYEdU0hpsaqBBIZOtBajjcw5+w/Ke
// SIG // FvPYfLF/ldYpmlG+vd0xqlqd099iChnyIMvY5HexjO2A
// SIG // mtsbpVn0OhNcWbWDRF/3sBp6fWXhz7DcML4iTAWS+MVX
// SIG // eNLj1lJziVKEoroGs9Mlizg0bUMbOalOhOfCipnx8CaL
// SIG // ZeVme5yELg09Jlo8BMe80jO37PU8ejfkP9/uPak7VLwE
// SIG // LKxAMcJszkyeiaerlphwoKx1uHRzNyE6bxuSKcutisqm
// SIG // KL5OTunAvtONEoteSiabkPVSZ2z76mKnzAfZxCl/3dq3
// SIG // dUNw4rg3sTCggkHSRqTqlLMS7gjrhTqBmzu1L90Y1KWN
// SIG // /Y5JKdGvspbOrTfOXyXvmPL6E52z1NZJ6ctuMFBQZH3p
// SIG // wWvqURR8AgQdULUvrxjUYbHHj95Ejza63zdrEcxWLDX6
// SIG // xWls/GDnVNueKjWUH3fTv1Y8Wdho698YADR7TNx8X8z2
// SIG // Bev6SivBBOHY+uqiirZtg0y9ShQoPzmCcn63Syatatvx
// SIG // 157YK9hlcPmVoa1oDE5/L9Uo2bC5a4CH2RwxghtjMIIb
// SIG // XwIBATBpMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9T
// SIG // ZWN0aWdvIExpbWl0ZWQxKzApBgNVBAMTIlNlY3RpZ28g
// SIG // UHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYCEQD+XNSV
// SIG // AYplF6TQTvh7a5M6MA0GCWCGSAFlAwQCAQUAoHwwEAYK
// SIG // KwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisG
// SIG // AQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQB
// SIG // gjcCARUwLwYJKoZIhvcNAQkEMSIEIEwmH4pxFoVDcm+d
// SIG // /tskz8IZwXlWCUVQy62gq4Oecz2pMA0GCSqGSIb3DQEB
// SIG // AQUABIIBgFEF8J27+diyj56b2Csaterx2GB/d9dTDZ1j
// SIG // ES+lwzX+xFlaH/c2cg/dzxDq/XjZLSjCeIFh4ergkxjj
// SIG // xiWXnfkSPy+hyIipLp72T8yC0kHvcsMveJjvPk3C4EH4
// SIG // fni6lr+qHydl+Y72aUEfkwIveuj4B4HXNZ291jzIv7Em
// SIG // fsn9Raby7uVyjQcRsL9nOb0ttEfPp6Qzk89tW7vZ1sGX
// SIG // MS4fimqy5MX8saG5gHz83SugR3ol6cE0fe1eAoTPTY82
// SIG // QBj1g0ID7By2WuO86j2X78WHtSe/opfKqDCLLEW1lQ0U
// SIG // DrvdJAIRQu7zcokfxxqKH1MgAZsyI5ZkvXcO3sbmIRls
// SIG // GL6ObLnhzLY+2Atex4gpIlhvMSM8+8ExGOh/dB5qRKD5
// SIG // ktNHf9FmjOfzCVADOu6bVvqrlz7291qs/EOrXRnx/7+N
// SIG // hC6Tq1FbT3AW/W2u+fdX7a1F8Ild8zS+4PgpqTDupFli
// SIG // M5RPbUX4SDqvjUY11nZB/04tU4g78ybRBnX4EaGCGM0w
// SIG // ghjJBgorBgEEAYI3AwMBMYIYuTCCGLUGCSqGSIb3DQEH
// SIG // AqCCGKYwghiiAgEDMQ8wDQYJYIZIAWUDBAICBQAwgfMG
// SIG // CyqGSIb3DQEJEAEEoIHjBIHgMIHdAgEBBgorBgEEAbIx
// SIG // AgEBMDEwDQYJYIZIAWUDBAIBBQAEIO5jxp4mJmcyBA8f
// SIG // 7Y3oz9cc1j87O36s1vKV75S/F8vfAhRGLKcXGcDJxj3h
// SIG // NlV+62xnRew89xgPMjAyNTAxMjcxOTAxNTBaoHKkcDBu
// SIG // MQswCQYDVQQGEwJHQjETMBEGA1UECBMKTWFuY2hlc3Rl
// SIG // cjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTAwLgYD
// SIG // VQQDEydTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5n
// SIG // IFNpZ25lciBSMzWgghL/MIIGXTCCBMWgAwIBAgIQOlJq
// SIG // LITOVeYdZfzMEtjpiTANBgkqhkiG9w0BAQwFADBVMQsw
// SIG // CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1p
// SIG // dGVkMSwwKgYDVQQDEyNTZWN0aWdvIFB1YmxpYyBUaW1l
// SIG // IFN0YW1waW5nIENBIFIzNjAeFw0yNDAxMTUwMDAwMDBa
// SIG // Fw0zNTA0MTQyMzU5NTlaMG4xCzAJBgNVBAYTAkdCMRMw
// SIG // EQYDVQQIEwpNYW5jaGVzdGVyMRgwFgYDVQQKEw9TZWN0
// SIG // aWdvIExpbWl0ZWQxMDAuBgNVBAMTJ1NlY3RpZ28gUHVi
// SIG // bGljIFRpbWUgU3RhbXBpbmcgU2lnbmVyIFIzNTCCAiIw
// SIG // DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAI3RZ/TB
// SIG // SJu9/ThJOk1hgZvD2NxFpWEENo0GnuOYloD11BlbmKCG
// SIG // tcY0xiMrsN7LlEgcyoshtP3P2J/vneZhuiMmspY7hk/Q
// SIG // 3l0FPZPBllo9vwT6GpoNnxXLZz7HU2ITBsTNOs9fhbdA
// SIG // Wr/Mm8MNtYov32osvjYYlDNfefnBajrQqSV8Wf5ZvbaY
// SIG // 5lZhKqQJUaXxpi4TXZKohLgxU7g9RrFd477j7jxilCU2
// SIG // ptz+d1OCzNFAsXgyPEM+NEMPUz2q+ktNlxMZXPF9WLIh
// SIG // OhE3E8/oNSJkNTqhcBGsbDI/1qCU9fBhuSojZ0u5/1+I
// SIG // jMG6AINyI6XLxM8OAGQmaMB8gs2IZxUTOD7jTFR2HE1x
// SIG // oL7qvSO4+JHtvNceHu//dGeVm5Pdkay3Et+YTt9EwAXB
// SIG // sd0PPmC0cuqNJNcOI0XnwjE+2+Zk8bauVz5ir7YHz7ml
// SIG // j5Bmf7W8SJ8jQwO2IDoHHFC46ePg+eoNors0QrC0PWnO
// SIG // gDeMkW6gmLBtq3CEOSDU8iNicwNsNb7ABz0W1E3qlSw7
// SIG // jTmNoGCKCgVkLD2FaMs2qAVVOjuUxvmtWMn1pIFVUvZ1
// SIG // yrPIVbYt1aTld2nrmh544Auh3tgggy/WluoLXlHtAJgv
// SIG // FwrVsKXj8ekFt0TmaPL0lHvQEe5jHbufhc05lvCtdwbf
// SIG // Bl/2ARSTuy1s8CgFAgMBAAGjggGOMIIBijAfBgNVHSME
// SIG // GDAWgBRfWO1MMXqiYUKNUoC6s2GXGaIymzAdBgNVHQ4E
// SIG // FgQUaO+kMklptlI4HepDOSz0FGqeDIUwDgYDVR0PAQH/
// SIG // BAQDAgbAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAww
// SIG // CgYIKwYBBQUHAwgwSgYDVR0gBEMwQTA1BgwrBgEEAbIx
// SIG // AQIBAwgwJTAjBggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0
// SIG // aWdvLmNvbS9DUFMwCAYGZ4EMAQQCMEoGA1UdHwRDMEEw
// SIG // P6A9oDuGOWh0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2Vj
// SIG // dGlnb1B1YmxpY1RpbWVTdGFtcGluZ0NBUjM2LmNybDB6
// SIG // BggrBgEFBQcBAQRuMGwwRQYIKwYBBQUHMAKGOWh0dHA6
// SIG // Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1B1YmxpY1Rp
// SIG // bWVTdGFtcGluZ0NBUjM2LmNydDAjBggrBgEFBQcwAYYX
// SIG // aHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcN
// SIG // AQEMBQADggGBALDcLsn6TzZMii/2yU/V7xhPH58Oxr/+
// SIG // EnrZjpIyvYTz2u/zbL+fzB7lbrPml8ERajOVbudan6x0
// SIG // 8J1RMXD9hByq+yEfpv1G+z2pmnln5XucfA9MfzLMrCAr
// SIG // NNMbUjVcRcsAr18eeZeloN5V4jwrovDeLOdZl0tB7fOX
// SIG // 5F6N2rmXaNTuJR8yS2F+EWaL5VVg+RH8FelXtRvVDLJZ
// SIG // 5uqSNIckdGa/eUFhtDKTTz9LtOUh46v2JD5Q3nt8mDhA
// SIG // jTKp2fo/KJ6FLWdKAvApGzjpPwDqFeJKf+kJdoBKd2zQ
// SIG // uwzk5Wgph9uA46VYK8p/BTJJahKCuGdyKFIFfEfakC4N
// SIG // Xa+vwY4IRp49lzQPLo7WticqMaaqb8hE2QmCFIyLOvWI
// SIG // g4837bd+60FcCGbHwmL/g1ObIf0rRS9ceK4DY9rfBnHF
// SIG // H2v1d4hRVvZXyCVlrL7ZQuVzjjkLMK9VJlXTVkHpuC8K
// SIG // 5S4HHTv2AJx6mOdkMJwS4gLlJ7gXrIVpnxG+aIniGDCC
// SIG // BhQwggP8oAMCAQICEHojrtpTaZYPkcg+XPTH4z8wDQYJ
// SIG // KoZIhvcNAQEMBQAwVzELMAkGA1UEBhMCR0IxGDAWBgNV
// SIG // BAoTD1NlY3RpZ28gTGltaXRlZDEuMCwGA1UEAxMlU2Vj
// SIG // dGlnbyBQdWJsaWMgVGltZSBTdGFtcGluZyBSb290IFI0
// SIG // NjAeFw0yMTAzMjIwMDAwMDBaFw0zNjAzMjEyMzU5NTla
// SIG // MFUxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdv
// SIG // IExpbWl0ZWQxLDAqBgNVBAMTI1NlY3RpZ28gUHVibGlj
// SIG // IFRpbWUgU3RhbXBpbmcgQ0EgUjM2MIIBojANBgkqhkiG
// SIG // 9w0BAQEFAAOCAY8AMIIBigKCAYEAzZjYQ0GrboIr7PYz
// SIG // fiY05ImM0+8iEoBUPu8mr4wOgYPjoiIz5vzf7d5wu8GF
// SIG // K1JWN5hciN9rdqOhbdxLcSVwnOTJmUGfAMQm4eXOls3i
// SIG // QwfapEFWuOsYmBKXPNSpwZAFoLGl5y1EaGGc5LByM8wj
// SIG // cbSF52/Z42YaJRsPXY545E3QAPN2mxDh0OLozhiGgYT1
// SIG // xtjXVfEzYBVmfQaI5QL35cTTAjsJAp85R+KAsOfuL9Z7
// SIG // LFnjdcuPkZWjssMETFIueH69rxbFOUD64G+rUo7xFIdR
// SIG // AuDNvWBsv0iGDPGaR2nZlY24tz5fISYk1sPY4gir99aX
// SIG // AGnoo0vX3Okew4MsiyBn5ZnUDMKzUcQrpVavGacrIkmD
// SIG // Yu/bcOUR1mVBIZ0X7P4bKf38JF7Mp7tY3LFF/h7hvBS2
// SIG // tgTYXlD7TnIMPrxyXCfB5yQq3FFoXRXM3/DvqQ4shoVW
// SIG // F/mwwz9xoRku05iphp22fTfjKRIVpm4gFT24JKspEpM8
// SIG // mFa9eTgKWWCvAgMBAAGjggFcMIIBWDAfBgNVHSMEGDAW
// SIG // gBT2d2rdP/0BE/8WoWyCAi/QCj0UJTAdBgNVHQ4EFgQU
// SIG // X1jtTDF6omFCjVKAurNhlxmiMpswDgYDVR0PAQH/BAQD
// SIG // AgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAww
// SIG // CgYIKwYBBQUHAwgwEQYDVR0gBAowCDAGBgRVHSAAMEwG
// SIG // A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9jcmwuc2VjdGln
// SIG // by5jb20vU2VjdGlnb1B1YmxpY1RpbWVTdGFtcGluZ1Jv
// SIG // b3RSNDYuY3JsMHwGCCsGAQUFBwEBBHAwbjBHBggrBgEF
// SIG // BQcwAoY7aHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0
// SIG // aWdvUHVibGljVGltZVN0YW1waW5nUm9vdFI0Ni5wN2Mw
// SIG // IwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLnNlY3RpZ28u
// SIG // Y29tMA0GCSqGSIb3DQEBDAUAA4ICAQAS13sgrQ41WAye
// SIG // gR0lWP1MLWd0r8diJiH2VVRpxqFGhnZbaF+IQ7JATGce
// SIG // TWOS+kgnMAzGYRzpm8jIcjlSQ8JtcqymKhgx1s6cFZBS
// SIG // fvfeoyigF8iCGlH+SVSo3HHr98NepjSFJTU5KSRKK+3n
// SIG // VSWYkSVQgJlgGh3MPcz9IWN4I/n1qfDGzqHCPWZ+/Mb5
// SIG // vVyhgaeqxLPbBIqv6cM74Nvyo1xNsllECJJrOvsrJQka
// SIG // jVz4xJwZ8blAdX5umzwFfk7K/0K3fpjgiXpqNOpXaJ+K
// SIG // SRW0HdE0FSDC7+ZKJJSJx78mn+rwEyT+A3z7Ss0gT5Cp
// SIG // TrcmhUwIw9jbvnYuYRKxFVWjKklW3z83epDVzoWJttxF
// SIG // pujdrNmRwh1YZVIB2guAAjEQoF42H0BA7WBCueHVMDyV
// SIG // 1e4nM9K4As7PVSNvQ8LI1WRaTuGSFUd9y8F8jw22BZC6
// SIG // mJoB40d7SlZIYfaildlgpgbgtu6SDsek2L8qomG57Yp5
// SIG // qTqof0DwJ4Q4HsShvRl/59T4IJBovRwmqWafH0cIPEX7
// SIG // cEttS5+tXrgRtMjjTOp6A9l0D6xcKZtxnLqiTH9KPCy6
// SIG // xZEi0UDcMTww5Fl4VvoGbMG2oonuX3f1tsoHLaO/Fwkj
// SIG // 3xVr3lDkmeUqivebQTvGkx5hGuJaSVQ+x60xJ/Y29RBr
// SIG // 8Tm9XJ59AjCCBoIwggRqoAMCAQICEDbCsL18Gzrno7Pd
// SIG // NsvJdWgwDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYT
// SIG // AlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQH
// SIG // EwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJU
// SIG // UlVTVCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3Qg
// SIG // UlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTIx
// SIG // MDMyMjAwMDAwMFoXDTM4MDExODIzNTk1OVowVzELMAkG
// SIG // A1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRl
// SIG // ZDEuMCwGA1UEAxMlU2VjdGlnbyBQdWJsaWMgVGltZSBT
// SIG // dGFtcGluZyBSb290IFI0NjCCAiIwDQYJKoZIhvcNAQEB
// SIG // BQADggIPADCCAgoCggIBAIid2LlFZ50d3ei5JoGaVFTA
// SIG // fEkFm8xaFQ/ZlBBEtEFAgXcUmanU5HYsyAhTXiDQkiUv
// SIG // pVdYqZ1uYoZEMgtHES1l1Cc6HaqZzEbOOp6YiTx63ywT
// SIG // on434aXVydmhx7Dx4IBrAou7hNGsKioIBPy5GMN7KmgY
// SIG // muu4f92sKKjbxqohUSfjk1mJlAjthgF7Hjx4vvyVDQGs
// SIG // d5KarLW5d73E3ThobSkob2SL48LpUR/O627pDchxll+b
// SIG // TSv1gASn/hp6IuHJorEu6EopoB1CNFp/+HpTXeNARXUm
// SIG // dRMKbnXWflq+/g36NJXB35ZvxQw6zid61qmrlD/IbKJA
// SIG // 6COw/8lFSPQwBP1ityZdwuCysCKZ9ZjczMqbUcLFyq6K
// SIG // dOpuzVDR3ZUwxDKL1wCAxgL2Mpz7eZbrb/JWXiOcNzDp
// SIG // QsmwGQ6Stw8tTCqPumhLRPb7YkzM8/6NnWH3T9ClmcGS
// SIG // F22LEyJYNWCHrQqYubNeKolzqUbCqhSqmr/UdUeb49zY
// SIG // Hr7ALL8bAJyPDmubNqMtuaobKASBqP84uhqcRY/pjnYd
// SIG // +V5/dcu9ieERjiRKKsxCG1t6tG9oj7liwPddXEcYGOUi
// SIG // WLm742st50jGwTzxbMpepmOP1mLnJskvZaN5e45NuzAH
// SIG // teORlsSuDt5t4BBRCJL+5EZnnw0ezntk9R8QJyAkL6/b
// SIG // AgMBAAGjggEWMIIBEjAfBgNVHSMEGDAWgBRTeb9aqitK
// SIG // z1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQU9ndq3T/9ARP/
// SIG // FqFsggIv0Ao9FCUwDgYDVR0PAQH/BAQDAgGGMA8GA1Ud
// SIG // EwEB/wQFMAMBAf8wEwYDVR0lBAwwCgYIKwYBBQUHAwgw
// SIG // EQYDVR0gBAowCDAGBgRVHSAAMFAGA1UdHwRJMEcwRaBD
// SIG // oEGGP2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VU0VS
// SIG // VHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNy
// SIG // bDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0
// SIG // dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcN
// SIG // AQEMBQADggIBAA6+ZUHtaES45aHF1BGH5Lc7JYzrftrI
// SIG // F5Ht2PFDxKKFOct/awAEWgHQMVHol9ZLSyd/pYMbaC0I
// SIG // Z+XBW9xhdkkmUV/KbUOiL7g98M/yzRyqUOZ1/IY7Ay0Y
// SIG // bMniIibJrPcgFp73WDnRDKtVutShPSZQZAdtFwXnuiWl
// SIG // 8eFARK3PmLqEm9UsVX+55DbVIz33Mbhba0HUTEYv3yJ1
// SIG // fwKGxPBsP/MgTECimh7eXomvMm0/GPxX2uhwCcs/YLxD
// SIG // nBdVVlxvDjHjO1cuwbOpkiJGHmLXXVNbsdXUC2xBrq9f
// SIG // Lrfe8IBsA4hopwsCj8hTuwKXJlSTrZcPRVSccP5i9U28
// SIG // gZ7OMzoJGlxZ5384OKm0r568Mo9TYrqzKeKZgFo0fj2/
// SIG // 0iHbj55hc20jfxvK3mQi+H7xpbzxZOFGm/yVQkpo+ffv
// SIG // 5gdhp+hv1GDsvJOtJinJmgGbBFZIThbqI+MHvAmMmkfb
// SIG // 3fTxmSkop2mSJL1Y2x/955S29Gu0gSJIkc3z30vU/iXr
// SIG // MpWx2tS7UVfVP+5tKuzGtgkP7d/doqDrLF1u6Ci3TpjA
// SIG // ZdeLLlRQZm867eVeXED58LXd1Dk6UvaAhvmWYXoiLz4J
// SIG // A5gPBcz7J311uahxCweNxE+xxxR3kT0WKzASo5G/PyDe
// SIG // z6NHdIUKBeE3jDPs2ACc6CkJ1Sji4PKWVT0/MYIEkTCC
// SIG // BI0CAQEwaTBVMQswCQYDVQQGEwJHQjEYMBYGA1UEChMP
// SIG // U2VjdGlnbyBMaW1pdGVkMSwwKgYDVQQDEyNTZWN0aWdv
// SIG // IFB1YmxpYyBUaW1lIFN0YW1waW5nIENBIFIzNgIQOlJq
// SIG // LITOVeYdZfzMEtjpiTANBglghkgBZQMEAgIFAKCCAfkw
// SIG // GgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqG
// SIG // SIb3DQEJBTEPFw0yNTAxMjcxOTAxNTBaMD8GCSqGSIb3
// SIG // DQEJBDEyBDDMlfx5sdNr9s1tcMbUfaU6YPvNwRHEEhz2
// SIG // l9V34zj5FDcdVXEo7CPfAt66ZgdV7WcwggF6BgsqhkiG
// SIG // 9w0BCRACDDGCAWkwggFlMIIBYTAWBBT4YJgZpvuILPfo
// SIG // UpfyoRlSGhZ3XzCBhwQUxq5U5HiG8Xw9VRJIjGnDSnr5
// SIG // wt0wbzBbpFkwVzELMAkGA1UEBhMCR0IxGDAWBgNVBAoT
// SIG // D1NlY3RpZ28gTGltaXRlZDEuMCwGA1UEAxMlU2VjdGln
// SIG // byBQdWJsaWMgVGltZSBTdGFtcGluZyBSb290IFI0NgIQ
// SIG // eiOu2lNplg+RyD5c9MfjPzCBvAQUhT1jLZOCgmF80JA1
// SIG // xJHeksFC2scwgaMwgY6kgYswgYgxCzAJBgNVBAYTAlVT
// SIG // MRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtK
// SIG // ZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVT
// SIG // VCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNB
// SIG // IENlcnRpZmljYXRpb24gQXV0aG9yaXR5AhA2wrC9fBs6
// SIG // 56Oz3TbLyXVoMA0GCSqGSIb3DQEBAQUABIICAFxiZz9E
// SIG // iZR0ltwtxFyGj6rq1sVCbF1OBVPyDuBBoLLCtDYcFgrd
// SIG // rsC7RSsGZKcs6yMe+CQGlqzfIbfRZKEphMa6c8x76siE
// SIG // pvF3hakXQYVjAecPJLacRPi0fkmK2L8tSiE9lv6oXoD1
// SIG // XltZTHdFwvMbCVt6FF64OjbgzK6z2ATm7JHXruxM91kI
// SIG // xIKSS6Ot/pdh5aglPZbsRNRvYmxR0ynmUKu3pnlB4Dn3
// SIG // Ppoht8CILAbWiKbdAkkymwwfcj3Ik8uk2XQbo5IcAZLY
// SIG // UBnYuwTtmGemGAjyo5z7myR5647l1nqpnMjWXNHVThwp
// SIG // qKo/3HwQPXAhtl1QXucmGtEFfpT46zaZqY8ALZzGLOd1
// SIG // flsoTRrpcwUwAm3lVHwolqnr1pyewLyT6wGvjbQgyv7K
// SIG // E4XhC9A/CP2egqb+lZPD/9UMiMZO32HX4d9s6y1oTyP5
// SIG // tX6wQ0rm7UMXwpRuuQpTIqWX3MxV1dMd5O6rG5BuJSFi
// SIG // QyIzx6o8SQvsE7nXh8tdT87eNU5JbXyoqwAXI2VPM02P
// SIG // DeRDtffgmaiyG1Unl5/9NxPB32C9JYNYbYfqWAB/45Th
// SIG // QkISVf4i5Sk5ukO8hR2H7QPfvhRFN2nnpwvhwSvbJi9s
// SIG // 2cgKpGVsaMSb59wTJQ+U0kFzJoXc3HZIKc3tcyDSh3T8
// SIG // pgxSbOcXyFoTSoMR
// SIG // End signature block

View File

@ -1,23 +0,0 @@
----------------------------------------------------------------------------
Copyright (C) Intel Corporation, 2022 All Rights Reserved.
File: HlapiScripts Readme.txt
Contents: Intel(R) Active Management Technology (Intel(R) AMT):
A short description of the HLAPI sample scripts folder content
----------------------------------------------------------------------------
The SDK provides COM interface for the High Level API. This folder contains
several JavaScript files that demonstrate how to use this COM interface.
The features supported via COM are:
- Power
- KVMSetup
- AlarmClock
- Redirection
Each JavaScript file is demonstrates the whole feature interface and not just a
single call. Please read the comments within the scripts in order to understand
the differences between the interfaces.

View File

@ -1,403 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2010 All Rights Reserved.
//
// Contents: Demonstrate the KVM COM interface.
//
//----------------------------------------------------------------------------
var Screen = { "Monitor0": 0, "Monitor1": 1 }
var PortsState = { "DisableAll": 0, "DefaultPortOnly": 1, "RedirectionPortOnly": 2, "EnableAll": 3 }
var info = new ActiveXObject("Intel.Manageability.ConnectionInfo");
if (typeof (info) != undefined)
{
info.Host = "10.0.0.15";
info.UserName = "admin";
info.Password = "Admin!98";
var amt = new ActiveXObject("Intel.Manageability.COM.AMTInstance");
if (typeof (amt) != undefined)
{
try {
amt.Create(info);
amt.KVMSetup.SetDefaultMonitor(Screen.Monitor0);
amt.KVMSetup.SetRFBPassword("P@ssw0rd");
amt.KVMSetup.SetOptInTimeout(200);
amt.KVMSetup.SetSessionTimeout(150);
amt.KVMSetup.SetOptInPolicy(true);
amt.KVMSetup.SetPortsState(PortsState.DisableAll);
//Get capabilities
var capabilities = amt.KVMSetup.GetCapabilities();
document.write("Is default port enabled: " + capabilities.IsDefaultPortEnable + "</br>");
document.write("Is redirection port enabled: " + capabilities.IsRedirectionPortEnable + "</br>");
}
catch (Error)
{
alert(Error.Message);
}
}
else
{
alert("Failed to perform KVM call");
}
}
else
{
alert("Failed to initialize ConnectionInfo object");
}
// SIG // Begin signature block
// SIG // MIItigYJKoZIhvcNAQcCoIItezCCLXcCAQExDzANBglg
// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
// SIG // H0DpeQ+HloorR2pPD4zmwLYKJIT4EiLF03TH+rCx0xqg
// SIG // ghF+MIIFbzCCBFegAwIBAgIQSPyTtGBVlI02p8mKidaU
// SIG // FjANBgkqhkiG9w0BAQwFADB7MQswCQYDVQQGEwJHQjEb
// SIG // MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD
// SIG // VQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
// SIG // TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRl
// SIG // IFNlcnZpY2VzMB4XDTIxMDUyNTAwMDAwMFoXDTI4MTIz
// SIG // MTIzNTk1OVowVjELMAkGA1UEBhMCR0IxGDAWBgNVBAoT
// SIG // D1NlY3RpZ28gTGltaXRlZDEtMCsGA1UEAxMkU2VjdGln
// SIG // byBQdWJsaWMgQ29kZSBTaWduaW5nIFJvb3QgUjQ2MIIC
// SIG // IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjeeU
// SIG // EiIEJHQu/xYjApKKtq42haxH1CORKz7cfeIxoFFvrISR
// SIG // 41KKteKW3tCHYySJiv/vEpM7fbu2ir29BX8nm2tl06UM
// SIG // abG8STma8W1uquSggyfamg0rUOlLW7O4ZDakfko9qXGr
// SIG // YbNzszwLDO/bM1flvjQ345cbXf0fEj2CA3bm+z9m0pQx
// SIG // afptszSswXp43JJQ8mTHqi0Eq8Nq6uAvp6fcbtfo/9oh
// SIG // q0C/ue4NnsbZnpnvxt4fqQx2sycgoda6/YDnAdLv64Ip
// SIG // lXCN/7sVz/7RDzaiLk8ykHRGa0c1E3cFM09jLrgt4b9l
// SIG // pwRrGNhx+swI8m2JmRCxrds+LOSqGLDGBwF1Z95t6WNj
// SIG // HjZ/aYm+qkU+blpfj6Fby50whjDoA7NAxg0POM1nqFOI
// SIG // +rgwZfpvx+cdsYN0aT6sxGg7seZnM5q2COCABUhA7vaC
// SIG // ZEao9XOwBpXybGWfv1VbHJxXGsd4RnxwqpQbghesh+m2
// SIG // yQ6BHEDWFhcp/FycGCvqRfXvvdVnTyheBe6QTHrnxvTQ
// SIG // /PrNPjJGEyA2igTqt6oHRpwNkzoJZplYXCmjuQymMDg8
// SIG // 0EY2NXycuu7D1fkKdvp+BRtAypI16dV60bV/AK6pkKrF
// SIG // fwGcELEW/MxuGNxvYv6mUKe4e7idFT/+IAx1yCJaE5UZ
// SIG // kADpGtXChvHjjuxf9OUCAwEAAaOCARIwggEOMB8GA1Ud
// SIG // IwQYMBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1Ud
// SIG // DgQWBBQy65Ka/zWWSC8oQEJwIDaRXBeF5jAOBgNVHQ8B
// SIG // Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUE
// SIG // DDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAw
// SIG // CAYGZ4EMAQQBMEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6
// SIG // Ly9jcmwuY29tb2RvY2EuY29tL0FBQUNlcnRpZmljYXRl
// SIG // U2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggr
// SIG // BgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29t
// SIG // MA0GCSqGSIb3DQEBDAUAA4IBAQASv6Hvi3SamES4aUa1
// SIG // qyQKDKSKZ7g6gb9Fin1SB6iNH04hhTmja14tIIa/ELiu
// SIG // eTtTzbT72ES+BtlcY2fUQBaHRIZyKtYyFfUSg8L54V0R
// SIG // QGf2QidyxSPiAjgaTCDi2wH3zUZPJqJ8ZsBRNraJAlTH
// SIG // /Fj7bADu/pimLpWhDFMpH2/YGaZPnvesCepdgsaLr4Cn
// SIG // vYFIUoQx2jLsFeSmTD1sOXPUC4U5IOCFGmjhp0g4qdE2
// SIG // JXfBjRkWxYhMZn0vY86Y6GnfrDyoXZ3JHFuu2PMvdM+4
// SIG // fvbXg50RlmKarkUT2n/cR/vfw1Kf5gZV6Z2M8jpiUbzs
// SIG // JA8p1FiAhORFe1rYMIIF6TCCBFGgAwIBAgIRAP5c1JUB
// SIG // imUXpNBO+HtrkzowDQYJKoZIhvcNAQEMBQAwVDELMAkG
// SIG // A1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRl
// SIG // ZDErMCkGA1UEAxMiU2VjdGlnbyBQdWJsaWMgQ29kZSBT
// SIG // aWduaW5nIENBIFIzNjAeFw0yNDAzMTMwMDAwMDBaFw0y
// SIG // NTAzMTMyMzU5NTlaMFoxCzAJBgNVBAYTAlVTMRMwEQYD
// SIG // VQQIDApDYWxpZm9ybmlhMRowGAYDVQQKDBFJbnRlbCBD
// SIG // b3Jwb3JhdGlvbjEaMBgGA1UEAwwRSW50ZWwgQ29ycG9y
// SIG // YXRpb24wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGK
// SIG // AoIBgQCOvQs9ebKrmAXTOWV54xQTZ76syOFlIGkPz4wS
// SIG // qINrfyJEgclyvtytZuAsELU4KqTAg9fdxNwP8Qx5llRL
// SIG // 6QilAfsXPHP/BROk8pqyCgP9FB+41XrC4AqNAMXzNHZH
// SIG // Kq7yyr53IbHnpHWjNm/hONTUowIYVoBqdS6E2cqwDiTa
// SIG // RrDyH4AP9PiekQhAofQQEW1wkVwJ807j7Vg13ypTsEmu
// SIG // PqNrSTO0zzQC0yUix6GW731DqYDoftJVsePYYpqFupXw
// SIG // 7eXGQzzk/MDcKXeQ1sAfDIcy3zRKW70f/ObPEj/3Vkaw
// SIG // FZEkcUtcKiGWvTrMQ/q4wQSHvCQ0dWPYYxgVCsmzAGN9
// SIG // D6fKw6RXh9WGtQPIDXmnvCkUpWnK6MqMYUb4i/Z/JwmS
// SIG // IYqi+kNELvXCRsJWIi/ZgDEclTyNwR39LOq+gUarfMgW
// SIG // D/9nbIHOM/WFfQxiVGis9pI8LndTiWbqRQ2YqPrIc2zv
// SIG // 4e/IiUkIjFR4DFRRFTmRRERN3VUhBbFnTwMCAwEAAaOC
// SIG // Aa4wggGqMB8GA1UdIwQYMBaAFA8qyyCHKLjsb0iuK1Sm
// SIG // KaoXpM0MMB0GA1UdDgQWBBQo7T1qfzp1FOdWlwIgcHEP
// SIG // 4L2HxjAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIw
// SIG // ADATBgNVHSUEDDAKBggrBgEFBQcDAzBKBgNVHSAEQzBB
// SIG // MDUGDCsGAQQBsjEBAgEDAjAlMCMGCCsGAQUFBwIBFhdo
// SIG // dHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZngQwBBAEw
// SIG // SQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5zZWN0
// SIG // aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25pbmdD
// SIG // QVIzNi5jcmwweQYIKwYBBQUHAQEEbTBrMEQGCCsGAQUF
// SIG // BzAChjhodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3Rp
// SIG // Z29QdWJsaWNDb2RlU2lnbmluZ0NBUjM2LmNydDAjBggr
// SIG // BgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20w
// SIG // IwYDVR0RBBwwGoEYcGtpZW5naW5lZXJpbmdAaW50ZWwu
// SIG // Y29tMA0GCSqGSIb3DQEBDAUAA4IBgQAdNVhldXFo7Uwk
// SIG // BpDbQ0aZktPDblIrNRdvtHMCK5NnWPLVyomeUbLqZASl
// SIG // n6YzUh3Vu/Q71QqLQW8kWFHQ0nhZEPI0T5vr5c8hYUVr
// SIG // luKkmHCJceqomqRmRBbL5hBFzJ8BvcxBHirGJZzP2UiN
// SIG // t7i2Ql8oScd+Rtj6Qa97TMpuoCL7WuQ5peEv1xCSSP2b
// SIG // yCoTzuUFHpgktO0vUDe0jinhJJNS3VdXHAgTbUaQM5hl
// SIG // a+ImEuKW1a/MorIWHtuU0gD3lhMvT2BDJ42W0EEvJQ/F
// SIG // xQeoH4kySxQgsyCrB8zCJPhbiZcFZauHnP1q8dPn6VXq
// SIG // NkjyWSP4hPNoLQ+aMsKLaawuOzHb1ZXL23j2Jx6Caqkb
// SIG // Z4V/hOo5RkbZ4VAj1fgbEUnKeL/AyFCRnVeQM0ua2Lt2
// SIG // ISRgyYE4DxrwbZr2j3ibcXCs11JzKT7Wp7iYFt6NbnEq
// SIG // PUim/XTahXC3DlFQ9pQ44fOWdGpyaJvduMYVZuHBjVkh
// SIG // e2s/HFQOsx/0XOgwggYaMIIEAqADAgECAhBiHW0MUgGe
// SIG // O5B5FSCJIRwKMA0GCSqGSIb3DQEBDAUAMFYxCzAJBgNV
// SIG // BAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQx
// SIG // LTArBgNVBAMTJFNlY3RpZ28gUHVibGljIENvZGUgU2ln
// SIG // bmluZyBSb290IFI0NjAeFw0yMTAzMjIwMDAwMDBaFw0z
// SIG // NjAzMjEyMzU5NTlaMFQxCzAJBgNVBAYTAkdCMRgwFgYD
// SIG // VQQKEw9TZWN0aWdvIExpbWl0ZWQxKzApBgNVBAMTIlNl
// SIG // Y3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYw
// SIG // ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCb
// SIG // K51T+jU/jmAGQ2rAz/V/9shTUxjIztNsfvxYB5UXeWUz
// SIG // CxEeAEZGbEN4QMgCsJLZUKhWThj/yPqy0iSZhXkZ6Pg2
// SIG // A2NVDgFigOMYzB2OKhdqfWGVoYW3haT29PSTahYkwmMv
// SIG // 0b/83nbeECbiMXhSOtbam+/36F09fy1tsB8je/RV0mIk
// SIG // 8XL/tfCK6cPuYHE215wzrK0h1SWHTxPbPuYkRdkP05Zw
// SIG // mRmTnAO5/arnY83jeNzhP06ShdnRqtZlV59+8yv+KIhE
// SIG // 5ILMqgOZYAENHNX9SJDm+qxp4VqpB3MV/h53yl41aHU5
// SIG // pledi9lCBbH9JeIkNFICiVHNkRmq4TpxtwfvjsUedyz8
// SIG // rNyfQJy/aOs5b4s+ac7IH60B+Ja7TVM+EKv1WuTGwcLm
// SIG // oU3FpOFMbmPj8pz44MPZ1f9+YEQIQty/NQd/2yGgW+uf
// SIG // flcZ/ZE9o1M7a5Jnqf2i2/uMSWymR8r2oQBMdlyh2n5H
// SIG // irY4jKnFH/9gRvd+QOfdRrJZb1sCAwEAAaOCAWQwggFg
// SIG // MB8GA1UdIwQYMBaAFDLrkpr/NZZILyhAQnAgNpFcF4Xm
// SIG // MB0GA1UdDgQWBBQPKssghyi47G9IritUpimqF6TNDDAO
// SIG // BgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIB
// SIG // ADATBgNVHSUEDDAKBggrBgEFBQcDAzAbBgNVHSAEFDAS
// SIG // MAYGBFUdIAAwCAYGZ4EMAQQBMEsGA1UdHwREMEIwQKA+
// SIG // oDyGOmh0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGln
// SIG // b1B1YmxpY0NvZGVTaWduaW5nUm9vdFI0Ni5jcmwwewYI
// SIG // KwYBBQUHAQEEbzBtMEYGCCsGAQUFBzAChjpodHRwOi8v
// SIG // Y3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2Rl
// SIG // U2lnbmluZ1Jvb3RSNDYucDdjMCMGCCsGAQUFBzABhhdo
// SIG // dHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0B
// SIG // AQwFAAOCAgEABv+C4XdjNm57oRUgmxP/BP6YdURhw1aV
// SIG // cdGRP4Wh60BAscjW4HL9hcpkOTz5jUug2oeunbYAowbF
// SIG // C2AKK+cMcXIBD0ZdOaWTsyNyBBsMLHqafvIhrCymlaS9
// SIG // 8+QpoBCyKppP0OcxYEdU0hpsaqBBIZOtBajjcw5+w/Ke
// SIG // FvPYfLF/ldYpmlG+vd0xqlqd099iChnyIMvY5HexjO2A
// SIG // mtsbpVn0OhNcWbWDRF/3sBp6fWXhz7DcML4iTAWS+MVX
// SIG // eNLj1lJziVKEoroGs9Mlizg0bUMbOalOhOfCipnx8CaL
// SIG // ZeVme5yELg09Jlo8BMe80jO37PU8ejfkP9/uPak7VLwE
// SIG // LKxAMcJszkyeiaerlphwoKx1uHRzNyE6bxuSKcutisqm
// SIG // KL5OTunAvtONEoteSiabkPVSZ2z76mKnzAfZxCl/3dq3
// SIG // dUNw4rg3sTCggkHSRqTqlLMS7gjrhTqBmzu1L90Y1KWN
// SIG // /Y5JKdGvspbOrTfOXyXvmPL6E52z1NZJ6ctuMFBQZH3p
// SIG // wWvqURR8AgQdULUvrxjUYbHHj95Ejza63zdrEcxWLDX6
// SIG // xWls/GDnVNueKjWUH3fTv1Y8Wdho698YADR7TNx8X8z2
// SIG // Bev6SivBBOHY+uqiirZtg0y9ShQoPzmCcn63Syatatvx
// SIG // 157YK9hlcPmVoa1oDE5/L9Uo2bC5a4CH2RwxghtkMIIb
// SIG // YAIBATBpMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9T
// SIG // ZWN0aWdvIExpbWl0ZWQxKzApBgNVBAMTIlNlY3RpZ28g
// SIG // UHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYCEQD+XNSV
// SIG // AYplF6TQTvh7a5M6MA0GCWCGSAFlAwQCAQUAoHwwEAYK
// SIG // KwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisG
// SIG // AQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQB
// SIG // gjcCARUwLwYJKoZIhvcNAQkEMSIEIFVp5lhkYWkWzX1M
// SIG // Cu68682Gef5liMmgsxwYtOgTEYIEMA0GCSqGSIb3DQEB
// SIG // AQUABIIBgC/5ebuG9H5XHtNMUWD5N2W7VtEnFVgesFug
// SIG // RcPRjXw74Pcie4ZOVXxDSUCTZFdrCC0cXqcApAKP9I9Y
// SIG // Oy2Bs4PYTViiMnjBc5H7TeCb2KI7cqMr3YEV+wNA7qE+
// SIG // 6rFZvhIHhTcLt5STVUS2LcF2ivnrtyGfU9Hc2DXrUksl
// SIG // n8lnDwvXzdqvqxVbzcOQOvGX3qnF6dmZF3607o7DAb/z
// SIG // 9puBC+TuNYbTwcl1aCmmiL5QkJBZ32xAHeBr3Hf4b8XS
// SIG // nRSZIhOtGbXXJfU+HkVbKaIITEtGVjeDzXL3dzM9uZpb
// SIG // eegUpT3AOxJz7BFT45N71ZPiTMDgSB7fssf+bcVFat1X
// SIG // lWorp4Ou3/DaDbyiGEBSXptBEyQjEcuW4iBrVDGZNXSI
// SIG // zHp8dYEAh1w3hM17H+J12W61J9ruhWKdomDzEbEH4ezU
// SIG // G2X1a2aPt/Ou85ZvLJOPzeBFui/zk1/SJ+WROzCtPume
// SIG // pe2OoErvTr8Ei3h9vU3DfoyruWgu0BHoeyOmmKGCGM4w
// SIG // ghjKBgorBgEEAYI3AwMBMYIYujCCGLYGCSqGSIb3DQEH
// SIG // AqCCGKcwghijAgEDMQ8wDQYJYIZIAWUDBAICBQAwgfQG
// SIG // CyqGSIb3DQEJEAEEoIHkBIHhMIHeAgEBBgorBgEEAbIx
// SIG // AgEBMDEwDQYJYIZIAWUDBAIBBQAEIFDSoYEDbiZMqHyK
// SIG // wL83lK2U0T/M8YXok4QpckNb+RsHAhUA/jVmNrA5jBoP
// SIG // Fk6Vnto95CSYGJIYDzIwMjUwMTI3MTkwMTU0WqBypHAw
// SIG // bjELMAkGA1UEBhMCR0IxEzARBgNVBAgTCk1hbmNoZXN0
// SIG // ZXIxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDEwMC4G
// SIG // A1UEAxMnU2VjdGlnbyBQdWJsaWMgVGltZSBTdGFtcGlu
// SIG // ZyBTaWduZXIgUjM1oIIS/zCCBl0wggTFoAMCAQICEDpS
// SIG // aiyEzlXmHWX8zBLY6YkwDQYJKoZIhvcNAQEMBQAwVTEL
// SIG // MAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGlt
// SIG // aXRlZDEsMCoGA1UEAxMjU2VjdGlnbyBQdWJsaWMgVGlt
// SIG // ZSBTdGFtcGluZyBDQSBSMzYwHhcNMjQwMTE1MDAwMDAw
// SIG // WhcNMzUwNDE0MjM1OTU5WjBuMQswCQYDVQQGEwJHQjET
// SIG // MBEGA1UECBMKTWFuY2hlc3RlcjEYMBYGA1UEChMPU2Vj
// SIG // dGlnbyBMaW1pdGVkMTAwLgYDVQQDEydTZWN0aWdvIFB1
// SIG // YmxpYyBUaW1lIFN0YW1waW5nIFNpZ25lciBSMzUwggIi
// SIG // MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCN0Wf0
// SIG // wUibvf04STpNYYGbw9jcRaVhBDaNBp7jmJaA9dQZW5ig
// SIG // hrXGNMYjK7Dey5RIHMqLIbT9z9if753mYbojJrKWO4ZP
// SIG // 0N5dBT2TwZZaPb8E+hqaDZ8Vy2c+x1NiEwbEzTrPX4W3
// SIG // QFq/zJvDDbWKL99qLL42GJQzX3n5wWo60KklfFn+Wb22
// SIG // mOZWYSqkCVGl8aYuE12SqIS4MVO4PUaxXeO+4+48YpQl
// SIG // Nqbc/ndTgszRQLF4MjxDPjRDD1M9qvpLTZcTGVzxfViy
// SIG // IToRNxPP6DUiZDU6oXARrGwyP9aglPXwYbkqI2dLuf9f
// SIG // iIzBugCDciOly8TPDgBkJmjAfILNiGcVEzg+40xUdhxN
// SIG // caC+6r0juPiR7bzXHh7v/3RnlZuT3ZGstxLfmE7fRMAF
// SIG // wbHdDz5gtHLqjSTXDiNF58IxPtvmZPG2rlc+Yq+2B8+5
// SIG // pY+QZn+1vEifI0MDtiA6BxxQuOnj4PnqDaK7NEKwtD1p
// SIG // zoA3jJFuoJiwbatwhDkg1PIjYnMDbDW+wAc9FtRN6pUs
// SIG // O405jaBgigoFZCw9hWjLNqgFVTo7lMb5rVjJ9aSBVVL2
// SIG // dcqzyFW2LdWk5Xdp65oeeOALod7YIIMv1pbqC15R7QCY
// SIG // LxcK1bCl4/HpBbdE5mjy9JR70BHuYx27n4XNOZbwrXcG
// SIG // 3wZf9gEUk7stbPAoBQIDAQABo4IBjjCCAYowHwYDVR0j
// SIG // BBgwFoAUX1jtTDF6omFCjVKAurNhlxmiMpswHQYDVR0O
// SIG // BBYEFGjvpDJJabZSOB3qQzks9BRqngyFMA4GA1UdDwEB
// SIG // /wQEAwIGwDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQM
// SIG // MAoGCCsGAQUFBwMIMEoGA1UdIARDMEEwNQYMKwYBBAGy
// SIG // MQECAQMIMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8vc2Vj
// SIG // dGlnby5jb20vQ1BTMAgGBmeBDAEEAjBKBgNVHR8EQzBB
// SIG // MD+gPaA7hjlodHRwOi8vY3JsLnNlY3RpZ28uY29tL1Nl
// SIG // Y3RpZ29QdWJsaWNUaW1lU3RhbXBpbmdDQVIzNi5jcmww
// SIG // egYIKwYBBQUHAQEEbjBsMEUGCCsGAQUFBzAChjlodHRw
// SIG // Oi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNU
// SIG // aW1lU3RhbXBpbmdDQVIzNi5jcnQwIwYIKwYBBQUHMAGG
// SIG // F2h0dHA6Ly9vY3NwLnNlY3RpZ28uY29tMA0GCSqGSIb3
// SIG // DQEBDAUAA4IBgQCw3C7J+k82TIov9slP1e8YTx+fDsa/
// SIG // /hJ62Y6SMr2E89rv82y/n8we5W6z5pfBEWozlW7nWp+s
// SIG // dPCdUTFw/YQcqvshH6b9Rvs9qZp5Z+V7nHwPTH8yzKwg
// SIG // KzTTG1I1XEXLAK9fHnmXpaDeVeI8K6Lw3iznWZdLQe3z
// SIG // l+Rejdq5l2jU7iUfMkthfhFmi+VVYPkR/BXpV7Ub1Qyy
// SIG // WebqkjSHJHRmv3lBYbQyk08/S7TlIeOr9iQ+UN57fJg4
// SIG // QI0yqdn6PyiehS1nSgLwKRs46T8A6hXiSn/pCXaASnds
// SIG // 0LsM5OVoKYfbgOOlWCvKfwUySWoSgrhncihSBXxH2pAu
// SIG // DV2vr8GOCEaePZc0Dy6O1rYnKjGmqm/IRNkJghSMizr1
// SIG // iIOPN+23futBXAhmx8Ji/4NTmyH9K0UvXHiuA2Pa3wZx
// SIG // xR9r9XeIUVb2V8glZay+2ULlc445CzCvVSZV01ZB6bgv
// SIG // CuUuBx079gCcepjnZDCcEuIC5Se4F6yFaZ8RvmiJ4hgw
// SIG // ggYUMIID/KADAgECAhB6I67aU2mWD5HIPlz0x+M/MA0G
// SIG // CSqGSIb3DQEBDAUAMFcxCzAJBgNVBAYTAkdCMRgwFgYD
// SIG // VQQKEw9TZWN0aWdvIExpbWl0ZWQxLjAsBgNVBAMTJVNl
// SIG // Y3RpZ28gUHVibGljIFRpbWUgU3RhbXBpbmcgUm9vdCBS
// SIG // NDYwHhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5
// SIG // WjBVMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGln
// SIG // byBMaW1pdGVkMSwwKgYDVQQDEyNTZWN0aWdvIFB1Ymxp
// SIG // YyBUaW1lIFN0YW1waW5nIENBIFIzNjCCAaIwDQYJKoZI
// SIG // hvcNAQEBBQADggGPADCCAYoCggGBAM2Y2ENBq26CK+z2
// SIG // M34mNOSJjNPvIhKAVD7vJq+MDoGD46IiM+b83+3ecLvB
// SIG // hStSVjeYXIjfa3ajoW3cS3ElcJzkyZlBnwDEJuHlzpbN
// SIG // 4kMH2qRBVrjrGJgSlzzUqcGQBaCxpectRGhhnOSwcjPM
// SIG // I3G0hedv2eNmGiUbD12OeORN0ADzdpsQ4dDi6M4YhoGE
// SIG // 9cbY11XxM2AVZn0GiOUC9+XE0wI7CQKfOUfigLDn7i/W
// SIG // eyxZ43XLj5GVo7LDBExSLnh+va8WxTlA+uBvq1KO8RSH
// SIG // UQLgzb1gbL9Ihgzxmkdp2ZWNuLc+XyEmJNbD2OIIq/fW
// SIG // lwBp6KNL19zpHsODLIsgZ+WZ1AzCs1HEK6VWrxmnKyJJ
// SIG // g2Lv23DlEdZlQSGdF+z+Gyn9/CRezKe7WNyxRf4e4bwU
// SIG // trYE2F5Q+05yDD68clwnweckKtxRaF0VzN/w76kOLIaF
// SIG // Vhf5sMM/caEZLtOYqYadtn034ykSFaZuIBU9uCSrKRKT
// SIG // PJhWvXk4CllgrwIDAQABo4IBXDCCAVgwHwYDVR0jBBgw
// SIG // FoAU9ndq3T/9ARP/FqFsggIv0Ao9FCUwHQYDVR0OBBYE
// SIG // FF9Y7UwxeqJhQo1SgLqzYZcZojKbMA4GA1UdDwEB/wQE
// SIG // AwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMBMGA1UdJQQM
// SIG // MAoGCCsGAQUFBwMIMBEGA1UdIAQKMAgwBgYEVR0gADBM
// SIG // BgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vY3JsLnNlY3Rp
// SIG // Z28uY29tL1NlY3RpZ29QdWJsaWNUaW1lU3RhbXBpbmdS
// SIG // b290UjQ2LmNybDB8BggrBgEFBQcBAQRwMG4wRwYIKwYB
// SIG // BQUHMAKGO2h0dHA6Ly9jcnQuc2VjdGlnby5jb20vU2Vj
// SIG // dGlnb1B1YmxpY1RpbWVTdGFtcGluZ1Jvb3RSNDYucDdj
// SIG // MCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdv
// SIG // LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAEtd7IK0ONVgM
// SIG // noEdJVj9TC1ndK/HYiYh9lVUacahRoZ2W2hfiEOyQExn
// SIG // Hk1jkvpIJzAMxmEc6ZvIyHI5UkPCbXKspioYMdbOnBWQ
// SIG // Un733qMooBfIghpR/klUqNxx6/fDXqY0hSU1OSkkSivt
// SIG // 51UlmJElUICZYBodzD3M/SFjeCP59anwxs6hwj1mfvzG
// SIG // +b1coYGnqsSz2wSKr+nDO+Db8qNcTbJZRAiSazr7KyUJ
// SIG // Go1c+MScGfG5QHV+bps8BX5Oyv9Ct36Y4Il6ajTqV2if
// SIG // ikkVtB3RNBUgwu/mSiSUice/Jp/q8BMk/gN8+0rNIE+Q
// SIG // qU63JoVMCMPY2752LmESsRVVoypJVt8/N3qQ1c6Fibbc
// SIG // Rabo3azZkcIdWGVSAdoLgAIxEKBeNh9AQO1gQrnh1TA8
// SIG // ldXuJzPSuALOz1Ujb0PCyNVkWk7hkhVHfcvBfI8NtgWQ
// SIG // upiaAeNHe0pWSGH2opXZYKYG4Lbukg7HpNi/KqJhue2K
// SIG // eak6qH9A8CeEOB7Eob0Zf+fU+CCQaL0cJqlmnx9HCDxF
// SIG // +3BLbUufrV64EbTI40zqegPZdA+sXCmbcZy6okx/Sjws
// SIG // usWRItFA3DE8MORZeFb6BmzBtqKJ7l939bbKBy2jvxcJ
// SIG // I98Va95Q5JnlKor3m0E7xpMeYRriWklUPsetMSf2NvUQ
// SIG // a/E5vVyefQIwggaCMIIEaqADAgECAhA2wrC9fBs656Oz
// SIG // 3TbLyXVoMA0GCSqGSIb3DQEBDAUAMIGIMQswCQYDVQQG
// SIG // EwJVUzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UE
// SIG // BxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VS
// SIG // VFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0
// SIG // IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0y
// SIG // MTAzMjIwMDAwMDBaFw0zODAxMTgyMzU5NTlaMFcxCzAJ
// SIG // BgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0
// SIG // ZWQxLjAsBgNVBAMTJVNlY3RpZ28gUHVibGljIFRpbWUg
// SIG // U3RhbXBpbmcgUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB
// SIG // AQUAA4ICDwAwggIKAoICAQCIndi5RWedHd3ouSaBmlRU
// SIG // wHxJBZvMWhUP2ZQQRLRBQIF3FJmp1OR2LMgIU14g0JIl
// SIG // L6VXWKmdbmKGRDILRxEtZdQnOh2qmcxGzjqemIk8et8s
// SIG // E6J+N+Gl1cnZocew8eCAawKLu4TRrCoqCAT8uRjDeypo
// SIG // GJrruH/drCio28aqIVEn45NZiZQI7YYBex48eL78lQ0B
// SIG // rHeSmqy1uXe9xN04aG0pKG9ki+PC6VEfzutu6Q3IcZZf
// SIG // m00r9YAEp/4aeiLhyaKxLuhKKaAdQjRaf/h6U13jQEV1
// SIG // JnUTCm511n5avv4N+jSVwd+Wb8UMOs4netapq5Q/yGyi
// SIG // QOgjsP/JRUj0MAT9YrcmXcLgsrAimfWY3MzKm1HCxcqu
// SIG // inTqbs1Q0d2VMMQyi9cAgMYC9jKc+3mW62/yVl4jnDcw
// SIG // 6ULJsBkOkrcPLUwqj7poS0T2+2JMzPP+jZ1h90/QpZnB
// SIG // khdtixMiWDVgh60KmLmzXiqJc6lGwqoUqpq/1HVHm+Pc
// SIG // 2B6+wCy/GwCcjw5rmzajLbmqGygEgaj/OLoanEWP6Y52
// SIG // Hflef3XLvYnhEY4kSirMQhtberRvaI+5YsD3XVxHGBjl
// SIG // Ili5u+NrLedIxsE88WzKXqZjj9Zi5ybJL2WjeXuOTbsw
// SIG // B7XjkZbErg7ebeAQUQiS/uRGZ58NHs57ZPUfECcgJC+v
// SIG // 2wIDAQABo4IBFjCCARIwHwYDVR0jBBgwFoAUU3m/Wqor
// SIG // Ss9UgOHYm8Cd8rIDZsswHQYDVR0OBBYEFPZ3at0//QET
// SIG // /xahbIICL9AKPRQlMA4GA1UdDwEB/wQEAwIBhjAPBgNV
// SIG // HRMBAf8EBTADAQH/MBMGA1UdJQQMMAoGCCsGAQUFBwMI
// SIG // MBEGA1UdIAQKMAgwBgYEVR0gADBQBgNVHR8ESTBHMEWg
// SIG // Q6BBhj9odHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVNF
// SIG // UlRydXN0UlNBQ2VydGlmaWNhdGlvbkF1dGhvcml0eS5j
// SIG // cmwwNQYIKwYBBQUHAQEEKTAnMCUGCCsGAQUFBzABhhlo
// SIG // dHRwOi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqGSIb3
// SIG // DQEBDAUAA4ICAQAOvmVB7WhEuOWhxdQRh+S3OyWM637a
// SIG // yBeR7djxQ8SihTnLf2sABFoB0DFR6JfWS0snf6WDG2gt
// SIG // CGflwVvcYXZJJlFfym1Doi+4PfDP8s0cqlDmdfyGOwMt
// SIG // GGzJ4iImyaz3IBae91g50QyrVbrUoT0mUGQHbRcF57ol
// SIG // pfHhQEStz5i6hJvVLFV/ueQ21SM99zG4W2tB1ExGL98i
// SIG // dX8ChsTwbD/zIExAopoe3l6JrzJtPxj8V9rocAnLP2C8
// SIG // Q5wXVVZcbw4x4ztXLsGzqZIiRh5i111TW7HV1AtsQa6v
// SIG // Xy633vCAbAOIaKcLAo/IU7sClyZUk62XD0VUnHD+YvVN
// SIG // vIGezjM6CRpcWed/ODiptK+evDKPU2K6synimYBaNH49
// SIG // v9Ih24+eYXNtI38byt5kIvh+8aW88WThRpv8lUJKaPn3
// SIG // 7+YHYafob9Rg7LyTrSYpyZoBmwRWSE4W6iPjB7wJjJpH
// SIG // 29308ZkpKKdpkiS9WNsf/eeUtvRrtIEiSJHN899L1P4l
// SIG // 6zKVsdrUu1FX1T/ubSrsxrYJD+3f3aKg6yxdbugot06Y
// SIG // wGXXiy5UUGZvOu3lXlxA+fC13dQ5OlL2gIb5lmF6Ii8+
// SIG // CQOYDwXM+yd9dbmocQsHjcRPsccUd5E9FiswEqORvz8g
// SIG // 3s+jR3SFCgXhN4wz7NgAnOgpCdUo4uDyllU9PzGCBJEw
// SIG // ggSNAgEBMGkwVTELMAkGA1UEBhMCR0IxGDAWBgNVBAoT
// SIG // D1NlY3RpZ28gTGltaXRlZDEsMCoGA1UEAxMjU2VjdGln
// SIG // byBQdWJsaWMgVGltZSBTdGFtcGluZyBDQSBSMzYCEDpS
// SIG // aiyEzlXmHWX8zBLY6YkwDQYJYIZIAWUDBAICBQCgggH5
// SIG // MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq
// SIG // hkiG9w0BCQUxDxcNMjUwMTI3MTkwMTU0WjA/BgkqhkiG
// SIG // 9w0BCQQxMgQw/uzIyNO5OttdOtW79hwRCXL/48zFTRT1
// SIG // +f4lvWsh8sWYetcAO+k2CbFYMPEEoa4cMIIBegYLKoZI
// SIG // hvcNAQkQAgwxggFpMIIBZTCCAWEwFgQU+GCYGab7iCz3
// SIG // 6FKX8qEZUhoWd18wgYcEFMauVOR4hvF8PVUSSIxpw0p6
// SIG // +cLdMG8wW6RZMFcxCzAJBgNVBAYTAkdCMRgwFgYDVQQK
// SIG // Ew9TZWN0aWdvIExpbWl0ZWQxLjAsBgNVBAMTJVNlY3Rp
// SIG // Z28gUHVibGljIFRpbWUgU3RhbXBpbmcgUm9vdCBSNDYC
// SIG // EHojrtpTaZYPkcg+XPTH4z8wgbwEFIU9Yy2TgoJhfNCQ
// SIG // NcSR3pLBQtrHMIGjMIGOpIGLMIGIMQswCQYDVQQGEwJV
// SIG // UzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxML
// SIG // SmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJV
// SIG // U1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IFJT
// SIG // QSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQIQNsKwvXwb
// SIG // Ouejs902y8l1aDANBgkqhkiG9w0BAQEFAASCAgBxUFm6
// SIG // nqBA63gIGDvsjbju0zDn8k3VbRViuksmRyvSml1O6798
// SIG // l2EJPDkBqgm3p/eEt/EgtHeTwW93h/lLptzb7pugqYvo
// SIG // 9aK23Xj2YQ+bU3rwagpijCPoBmqJSd9ffNTQaDMLqovM
// SIG // WzLyO/jOTsnTF5IDrTr6kgnS25YD6S/jx/TSd1m8lyDN
// SIG // iz7WMikzWZ/ewMBzpeP151E+6mqEuMPQI084NQsChZRs
// SIG // 6UQZE9Q8XxURuSip3pF9cCSjuKpx0j/f0DRwVJs9mixg
// SIG // dxnfk2FeicezdWulBbODaJ/SHwee45knv3Xfy0FnQTfJ
// SIG // 5L8byz7vbNz40oK1Fxf/XTz5XZmOSAB9ZV48RouMOipx
// SIG // baHqkeFuG+I2BXNBZsqRMdUqIdcCMdh5FCZK7EfyKOvM
// SIG // hkLRI8oLC0v+/hkNbRuAhSC2w8FsWiz37ZXy1toiMYfK
// SIG // Wrdoif5RAiX+Ko2eFz20BqZeikzrRXXeTEOOg1hZjRan
// SIG // qO6nmn5bIx/S7vS1VLCWOLHpBrddOn1wiIaoIL4PkgqE
// SIG // Ie7lu6troEpC5xbOEZLcyQt44Nvb3VSoIKDKYWHLjS0K
// SIG // 0e2tRTDeWQDqdnV2AR5DqdRTMFCNfW72DVZr4FC89VE8
// SIG // etEMafQ73SE0yfQsEuWRwsuOkArQoo+Pti3vpJhNmYe6
// SIG // CjryNuxWeB56H5GIdw==
// SIG // End signature block

View File

@ -1,401 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2010 All Rights Reserved.
//
// Contents: Demonstrate the PowerOperation COM interface.
//
//----------------------------------------------------------------------------
var info = new ActiveXObject("Intel.Manageability.ConnectionInfo");
if (typeof (info) != undefined)
{
info.Host = "10.0.0.15";
info.UserName = "admin";
info.Password = "Admin!98";
var PowerState = { "Unknown": 0, "On": 1, "S0": 1, "S3": 2, " StandBy": 2, "Hibernate": 3, "S4": 3, "Off": 4, "S5": 4, "Unexpected": 5 }
var amt = new ActiveXObject("Intel.Manageability.COM.AMTInstance");
if (typeof (amt) != undefined)
{
try
{
amt.Create(info);
//Get current power state
var pState = amt.Power.CurrentPowerState();
alert("Current state: " + pState + "</br>");
//Power down
amt.Power.PowerDown();
}
catch (Error)
{
alert(Error.Message);
}
}
else
{
alert("Failed to perform Power call");
}
}
else
{
alert("Failed to initialize ConnectionInfo object");
}
// SIG // Begin signature block
// SIG // MIItiQYJKoZIhvcNAQcCoIItejCCLXYCAQExDzANBglg
// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
// SIG // 7vC9T+SmU5MfK6uKdKqAHdMKJ5I3DB1cZqAKLnSket2g
// SIG // ghF+MIIFbzCCBFegAwIBAgIQSPyTtGBVlI02p8mKidaU
// SIG // FjANBgkqhkiG9w0BAQwFADB7MQswCQYDVQQGEwJHQjEb
// SIG // MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD
// SIG // VQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
// SIG // TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRl
// SIG // IFNlcnZpY2VzMB4XDTIxMDUyNTAwMDAwMFoXDTI4MTIz
// SIG // MTIzNTk1OVowVjELMAkGA1UEBhMCR0IxGDAWBgNVBAoT
// SIG // D1NlY3RpZ28gTGltaXRlZDEtMCsGA1UEAxMkU2VjdGln
// SIG // byBQdWJsaWMgQ29kZSBTaWduaW5nIFJvb3QgUjQ2MIIC
// SIG // IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjeeU
// SIG // EiIEJHQu/xYjApKKtq42haxH1CORKz7cfeIxoFFvrISR
// SIG // 41KKteKW3tCHYySJiv/vEpM7fbu2ir29BX8nm2tl06UM
// SIG // abG8STma8W1uquSggyfamg0rUOlLW7O4ZDakfko9qXGr
// SIG // YbNzszwLDO/bM1flvjQ345cbXf0fEj2CA3bm+z9m0pQx
// SIG // afptszSswXp43JJQ8mTHqi0Eq8Nq6uAvp6fcbtfo/9oh
// SIG // q0C/ue4NnsbZnpnvxt4fqQx2sycgoda6/YDnAdLv64Ip
// SIG // lXCN/7sVz/7RDzaiLk8ykHRGa0c1E3cFM09jLrgt4b9l
// SIG // pwRrGNhx+swI8m2JmRCxrds+LOSqGLDGBwF1Z95t6WNj
// SIG // HjZ/aYm+qkU+blpfj6Fby50whjDoA7NAxg0POM1nqFOI
// SIG // +rgwZfpvx+cdsYN0aT6sxGg7seZnM5q2COCABUhA7vaC
// SIG // ZEao9XOwBpXybGWfv1VbHJxXGsd4RnxwqpQbghesh+m2
// SIG // yQ6BHEDWFhcp/FycGCvqRfXvvdVnTyheBe6QTHrnxvTQ
// SIG // /PrNPjJGEyA2igTqt6oHRpwNkzoJZplYXCmjuQymMDg8
// SIG // 0EY2NXycuu7D1fkKdvp+BRtAypI16dV60bV/AK6pkKrF
// SIG // fwGcELEW/MxuGNxvYv6mUKe4e7idFT/+IAx1yCJaE5UZ
// SIG // kADpGtXChvHjjuxf9OUCAwEAAaOCARIwggEOMB8GA1Ud
// SIG // IwQYMBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1Ud
// SIG // DgQWBBQy65Ka/zWWSC8oQEJwIDaRXBeF5jAOBgNVHQ8B
// SIG // Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUE
// SIG // DDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAw
// SIG // CAYGZ4EMAQQBMEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6
// SIG // Ly9jcmwuY29tb2RvY2EuY29tL0FBQUNlcnRpZmljYXRl
// SIG // U2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggr
// SIG // BgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29t
// SIG // MA0GCSqGSIb3DQEBDAUAA4IBAQASv6Hvi3SamES4aUa1
// SIG // qyQKDKSKZ7g6gb9Fin1SB6iNH04hhTmja14tIIa/ELiu
// SIG // eTtTzbT72ES+BtlcY2fUQBaHRIZyKtYyFfUSg8L54V0R
// SIG // QGf2QidyxSPiAjgaTCDi2wH3zUZPJqJ8ZsBRNraJAlTH
// SIG // /Fj7bADu/pimLpWhDFMpH2/YGaZPnvesCepdgsaLr4Cn
// SIG // vYFIUoQx2jLsFeSmTD1sOXPUC4U5IOCFGmjhp0g4qdE2
// SIG // JXfBjRkWxYhMZn0vY86Y6GnfrDyoXZ3JHFuu2PMvdM+4
// SIG // fvbXg50RlmKarkUT2n/cR/vfw1Kf5gZV6Z2M8jpiUbzs
// SIG // JA8p1FiAhORFe1rYMIIF6TCCBFGgAwIBAgIRAP5c1JUB
// SIG // imUXpNBO+HtrkzowDQYJKoZIhvcNAQEMBQAwVDELMAkG
// SIG // A1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRl
// SIG // ZDErMCkGA1UEAxMiU2VjdGlnbyBQdWJsaWMgQ29kZSBT
// SIG // aWduaW5nIENBIFIzNjAeFw0yNDAzMTMwMDAwMDBaFw0y
// SIG // NTAzMTMyMzU5NTlaMFoxCzAJBgNVBAYTAlVTMRMwEQYD
// SIG // VQQIDApDYWxpZm9ybmlhMRowGAYDVQQKDBFJbnRlbCBD
// SIG // b3Jwb3JhdGlvbjEaMBgGA1UEAwwRSW50ZWwgQ29ycG9y
// SIG // YXRpb24wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGK
// SIG // AoIBgQCOvQs9ebKrmAXTOWV54xQTZ76syOFlIGkPz4wS
// SIG // qINrfyJEgclyvtytZuAsELU4KqTAg9fdxNwP8Qx5llRL
// SIG // 6QilAfsXPHP/BROk8pqyCgP9FB+41XrC4AqNAMXzNHZH
// SIG // Kq7yyr53IbHnpHWjNm/hONTUowIYVoBqdS6E2cqwDiTa
// SIG // RrDyH4AP9PiekQhAofQQEW1wkVwJ807j7Vg13ypTsEmu
// SIG // PqNrSTO0zzQC0yUix6GW731DqYDoftJVsePYYpqFupXw
// SIG // 7eXGQzzk/MDcKXeQ1sAfDIcy3zRKW70f/ObPEj/3Vkaw
// SIG // FZEkcUtcKiGWvTrMQ/q4wQSHvCQ0dWPYYxgVCsmzAGN9
// SIG // D6fKw6RXh9WGtQPIDXmnvCkUpWnK6MqMYUb4i/Z/JwmS
// SIG // IYqi+kNELvXCRsJWIi/ZgDEclTyNwR39LOq+gUarfMgW
// SIG // D/9nbIHOM/WFfQxiVGis9pI8LndTiWbqRQ2YqPrIc2zv
// SIG // 4e/IiUkIjFR4DFRRFTmRRERN3VUhBbFnTwMCAwEAAaOC
// SIG // Aa4wggGqMB8GA1UdIwQYMBaAFA8qyyCHKLjsb0iuK1Sm
// SIG // KaoXpM0MMB0GA1UdDgQWBBQo7T1qfzp1FOdWlwIgcHEP
// SIG // 4L2HxjAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIw
// SIG // ADATBgNVHSUEDDAKBggrBgEFBQcDAzBKBgNVHSAEQzBB
// SIG // MDUGDCsGAQQBsjEBAgEDAjAlMCMGCCsGAQUFBwIBFhdo
// SIG // dHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZngQwBBAEw
// SIG // SQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2NybC5zZWN0
// SIG // aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25pbmdD
// SIG // QVIzNi5jcmwweQYIKwYBBQUHAQEEbTBrMEQGCCsGAQUF
// SIG // BzAChjhodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3Rp
// SIG // Z29QdWJsaWNDb2RlU2lnbmluZ0NBUjM2LmNydDAjBggr
// SIG // BgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20w
// SIG // IwYDVR0RBBwwGoEYcGtpZW5naW5lZXJpbmdAaW50ZWwu
// SIG // Y29tMA0GCSqGSIb3DQEBDAUAA4IBgQAdNVhldXFo7Uwk
// SIG // BpDbQ0aZktPDblIrNRdvtHMCK5NnWPLVyomeUbLqZASl
// SIG // n6YzUh3Vu/Q71QqLQW8kWFHQ0nhZEPI0T5vr5c8hYUVr
// SIG // luKkmHCJceqomqRmRBbL5hBFzJ8BvcxBHirGJZzP2UiN
// SIG // t7i2Ql8oScd+Rtj6Qa97TMpuoCL7WuQ5peEv1xCSSP2b
// SIG // yCoTzuUFHpgktO0vUDe0jinhJJNS3VdXHAgTbUaQM5hl
// SIG // a+ImEuKW1a/MorIWHtuU0gD3lhMvT2BDJ42W0EEvJQ/F
// SIG // xQeoH4kySxQgsyCrB8zCJPhbiZcFZauHnP1q8dPn6VXq
// SIG // NkjyWSP4hPNoLQ+aMsKLaawuOzHb1ZXL23j2Jx6Caqkb
// SIG // Z4V/hOo5RkbZ4VAj1fgbEUnKeL/AyFCRnVeQM0ua2Lt2
// SIG // ISRgyYE4DxrwbZr2j3ibcXCs11JzKT7Wp7iYFt6NbnEq
// SIG // PUim/XTahXC3DlFQ9pQ44fOWdGpyaJvduMYVZuHBjVkh
// SIG // e2s/HFQOsx/0XOgwggYaMIIEAqADAgECAhBiHW0MUgGe
// SIG // O5B5FSCJIRwKMA0GCSqGSIb3DQEBDAUAMFYxCzAJBgNV
// SIG // BAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQx
// SIG // LTArBgNVBAMTJFNlY3RpZ28gUHVibGljIENvZGUgU2ln
// SIG // bmluZyBSb290IFI0NjAeFw0yMTAzMjIwMDAwMDBaFw0z
// SIG // NjAzMjEyMzU5NTlaMFQxCzAJBgNVBAYTAkdCMRgwFgYD
// SIG // VQQKEw9TZWN0aWdvIExpbWl0ZWQxKzApBgNVBAMTIlNl
// SIG // Y3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYw
// SIG // ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCb
// SIG // K51T+jU/jmAGQ2rAz/V/9shTUxjIztNsfvxYB5UXeWUz
// SIG // CxEeAEZGbEN4QMgCsJLZUKhWThj/yPqy0iSZhXkZ6Pg2
// SIG // A2NVDgFigOMYzB2OKhdqfWGVoYW3haT29PSTahYkwmMv
// SIG // 0b/83nbeECbiMXhSOtbam+/36F09fy1tsB8je/RV0mIk
// SIG // 8XL/tfCK6cPuYHE215wzrK0h1SWHTxPbPuYkRdkP05Zw
// SIG // mRmTnAO5/arnY83jeNzhP06ShdnRqtZlV59+8yv+KIhE
// SIG // 5ILMqgOZYAENHNX9SJDm+qxp4VqpB3MV/h53yl41aHU5
// SIG // pledi9lCBbH9JeIkNFICiVHNkRmq4TpxtwfvjsUedyz8
// SIG // rNyfQJy/aOs5b4s+ac7IH60B+Ja7TVM+EKv1WuTGwcLm
// SIG // oU3FpOFMbmPj8pz44MPZ1f9+YEQIQty/NQd/2yGgW+uf
// SIG // flcZ/ZE9o1M7a5Jnqf2i2/uMSWymR8r2oQBMdlyh2n5H
// SIG // irY4jKnFH/9gRvd+QOfdRrJZb1sCAwEAAaOCAWQwggFg
// SIG // MB8GA1UdIwQYMBaAFDLrkpr/NZZILyhAQnAgNpFcF4Xm
// SIG // MB0GA1UdDgQWBBQPKssghyi47G9IritUpimqF6TNDDAO
// SIG // BgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIB
// SIG // ADATBgNVHSUEDDAKBggrBgEFBQcDAzAbBgNVHSAEFDAS
// SIG // MAYGBFUdIAAwCAYGZ4EMAQQBMEsGA1UdHwREMEIwQKA+
// SIG // oDyGOmh0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGln
// SIG // b1B1YmxpY0NvZGVTaWduaW5nUm9vdFI0Ni5jcmwwewYI
// SIG // KwYBBQUHAQEEbzBtMEYGCCsGAQUFBzAChjpodHRwOi8v
// SIG // Y3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2Rl
// SIG // U2lnbmluZ1Jvb3RSNDYucDdjMCMGCCsGAQUFBzABhhdo
// SIG // dHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0B
// SIG // AQwFAAOCAgEABv+C4XdjNm57oRUgmxP/BP6YdURhw1aV
// SIG // cdGRP4Wh60BAscjW4HL9hcpkOTz5jUug2oeunbYAowbF
// SIG // C2AKK+cMcXIBD0ZdOaWTsyNyBBsMLHqafvIhrCymlaS9
// SIG // 8+QpoBCyKppP0OcxYEdU0hpsaqBBIZOtBajjcw5+w/Ke
// SIG // FvPYfLF/ldYpmlG+vd0xqlqd099iChnyIMvY5HexjO2A
// SIG // mtsbpVn0OhNcWbWDRF/3sBp6fWXhz7DcML4iTAWS+MVX
// SIG // eNLj1lJziVKEoroGs9Mlizg0bUMbOalOhOfCipnx8CaL
// SIG // ZeVme5yELg09Jlo8BMe80jO37PU8ejfkP9/uPak7VLwE
// SIG // LKxAMcJszkyeiaerlphwoKx1uHRzNyE6bxuSKcutisqm
// SIG // KL5OTunAvtONEoteSiabkPVSZ2z76mKnzAfZxCl/3dq3
// SIG // dUNw4rg3sTCggkHSRqTqlLMS7gjrhTqBmzu1L90Y1KWN
// SIG // /Y5JKdGvspbOrTfOXyXvmPL6E52z1NZJ6ctuMFBQZH3p
// SIG // wWvqURR8AgQdULUvrxjUYbHHj95Ejza63zdrEcxWLDX6
// SIG // xWls/GDnVNueKjWUH3fTv1Y8Wdho698YADR7TNx8X8z2
// SIG // Bev6SivBBOHY+uqiirZtg0y9ShQoPzmCcn63Syatatvx
// SIG // 157YK9hlcPmVoa1oDE5/L9Uo2bC5a4CH2RwxghtjMIIb
// SIG // XwIBATBpMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9T
// SIG // ZWN0aWdvIExpbWl0ZWQxKzApBgNVBAMTIlNlY3RpZ28g
// SIG // UHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYCEQD+XNSV
// SIG // AYplF6TQTvh7a5M6MA0GCWCGSAFlAwQCAQUAoHwwEAYK
// SIG // KwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisG
// SIG // AQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQB
// SIG // gjcCARUwLwYJKoZIhvcNAQkEMSIEIH/NDvOEuA7+4mWU
// SIG // idDsJ4F5pqmhQdGAfIP1VICq7o8BMA0GCSqGSIb3DQEB
// SIG // AQUABIIBgGRJ2oh/K3chxJSxTIZYD2S969tnl7j44N7v
// SIG // 0QtU9//OzOkIaTi+AovDE1Kn0CrFxy9sMMhq62YagmA7
// SIG // 5Fm52SB7ZwI5ObjpngRDuaG48uhaEi4rse48PnEgv1x7
// SIG // 24KMtvhXny6noQ+vpJrfnZvKovEbfAVoew3aD0CZC5wk
// SIG // ICTJM8W6VfWN1AZeJN2ekGAcsCEx7TsATE4JoKML8SlB
// SIG // q6q6tcAsE1qK0k1+wTIHA08t8JIesqnW3JBIWb0qi6eo
// SIG // hunvf1v7EctnjFbU5jzyvTk6mvQp1EJp6YO0oPqhjMA+
// SIG // 0tAk/cufxtF2c69awZ6eYPBY5njqrhwNLrHPLWpHdZJl
// SIG // XskfvzkU/3tQI0/xY1RxKRwuwlRsczPaXYYilcERAnXR
// SIG // N1nP2grpuEqrGJo1uTOD6/shXyn0iOBZM3DZ7yj7I1Kp
// SIG // 0JQEC0TbmZS+UL4LX6nGEn+L2xT/e0DWXHxm+QJgkiWY
// SIG // aM04sppUOPj6XjJn2DtCDCLPWj9za4sAp3IrtaGCGM0w
// SIG // ghjJBgorBgEEAYI3AwMBMYIYuTCCGLUGCSqGSIb3DQEH
// SIG // AqCCGKYwghiiAgEDMQ8wDQYJYIZIAWUDBAICBQAwgfMG
// SIG // CyqGSIb3DQEJEAEEoIHjBIHgMIHdAgEBBgorBgEEAbIx
// SIG // AgEBMDEwDQYJYIZIAWUDBAIBBQAEIOp4RqzYlhaj8LZI
// SIG // DMJ1tnrYQZmDX5/ZdJSPd30e4OgFAhQOsTKqJ/FpsgAg
// SIG // E1HA8XqJSP3LxhgPMjAyNTAxMjcxOTAxNThaoHKkcDBu
// SIG // MQswCQYDVQQGEwJHQjETMBEGA1UECBMKTWFuY2hlc3Rl
// SIG // cjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTAwLgYD
// SIG // VQQDEydTZWN0aWdvIFB1YmxpYyBUaW1lIFN0YW1waW5n
// SIG // IFNpZ25lciBSMzWgghL/MIIGXTCCBMWgAwIBAgIQOlJq
// SIG // LITOVeYdZfzMEtjpiTANBgkqhkiG9w0BAQwFADBVMQsw
// SIG // CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1p
// SIG // dGVkMSwwKgYDVQQDEyNTZWN0aWdvIFB1YmxpYyBUaW1l
// SIG // IFN0YW1waW5nIENBIFIzNjAeFw0yNDAxMTUwMDAwMDBa
// SIG // Fw0zNTA0MTQyMzU5NTlaMG4xCzAJBgNVBAYTAkdCMRMw
// SIG // EQYDVQQIEwpNYW5jaGVzdGVyMRgwFgYDVQQKEw9TZWN0
// SIG // aWdvIExpbWl0ZWQxMDAuBgNVBAMTJ1NlY3RpZ28gUHVi
// SIG // bGljIFRpbWUgU3RhbXBpbmcgU2lnbmVyIFIzNTCCAiIw
// SIG // DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAI3RZ/TB
// SIG // SJu9/ThJOk1hgZvD2NxFpWEENo0GnuOYloD11BlbmKCG
// SIG // tcY0xiMrsN7LlEgcyoshtP3P2J/vneZhuiMmspY7hk/Q
// SIG // 3l0FPZPBllo9vwT6GpoNnxXLZz7HU2ITBsTNOs9fhbdA
// SIG // Wr/Mm8MNtYov32osvjYYlDNfefnBajrQqSV8Wf5ZvbaY
// SIG // 5lZhKqQJUaXxpi4TXZKohLgxU7g9RrFd477j7jxilCU2
// SIG // ptz+d1OCzNFAsXgyPEM+NEMPUz2q+ktNlxMZXPF9WLIh
// SIG // OhE3E8/oNSJkNTqhcBGsbDI/1qCU9fBhuSojZ0u5/1+I
// SIG // jMG6AINyI6XLxM8OAGQmaMB8gs2IZxUTOD7jTFR2HE1x
// SIG // oL7qvSO4+JHtvNceHu//dGeVm5Pdkay3Et+YTt9EwAXB
// SIG // sd0PPmC0cuqNJNcOI0XnwjE+2+Zk8bauVz5ir7YHz7ml
// SIG // j5Bmf7W8SJ8jQwO2IDoHHFC46ePg+eoNors0QrC0PWnO
// SIG // gDeMkW6gmLBtq3CEOSDU8iNicwNsNb7ABz0W1E3qlSw7
// SIG // jTmNoGCKCgVkLD2FaMs2qAVVOjuUxvmtWMn1pIFVUvZ1
// SIG // yrPIVbYt1aTld2nrmh544Auh3tgggy/WluoLXlHtAJgv
// SIG // FwrVsKXj8ekFt0TmaPL0lHvQEe5jHbufhc05lvCtdwbf
// SIG // Bl/2ARSTuy1s8CgFAgMBAAGjggGOMIIBijAfBgNVHSME
// SIG // GDAWgBRfWO1MMXqiYUKNUoC6s2GXGaIymzAdBgNVHQ4E
// SIG // FgQUaO+kMklptlI4HepDOSz0FGqeDIUwDgYDVR0PAQH/
// SIG // BAQDAgbAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAww
// SIG // CgYIKwYBBQUHAwgwSgYDVR0gBEMwQTA1BgwrBgEEAbIx
// SIG // AQIBAwgwJTAjBggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0
// SIG // aWdvLmNvbS9DUFMwCAYGZ4EMAQQCMEoGA1UdHwRDMEEw
// SIG // P6A9oDuGOWh0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2Vj
// SIG // dGlnb1B1YmxpY1RpbWVTdGFtcGluZ0NBUjM2LmNybDB6
// SIG // BggrBgEFBQcBAQRuMGwwRQYIKwYBBQUHMAKGOWh0dHA6
// SIG // Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1B1YmxpY1Rp
// SIG // bWVTdGFtcGluZ0NBUjM2LmNydDAjBggrBgEFBQcwAYYX
// SIG // aHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcN
// SIG // AQEMBQADggGBALDcLsn6TzZMii/2yU/V7xhPH58Oxr/+
// SIG // EnrZjpIyvYTz2u/zbL+fzB7lbrPml8ERajOVbudan6x0
// SIG // 8J1RMXD9hByq+yEfpv1G+z2pmnln5XucfA9MfzLMrCAr
// SIG // NNMbUjVcRcsAr18eeZeloN5V4jwrovDeLOdZl0tB7fOX
// SIG // 5F6N2rmXaNTuJR8yS2F+EWaL5VVg+RH8FelXtRvVDLJZ
// SIG // 5uqSNIckdGa/eUFhtDKTTz9LtOUh46v2JD5Q3nt8mDhA
// SIG // jTKp2fo/KJ6FLWdKAvApGzjpPwDqFeJKf+kJdoBKd2zQ
// SIG // uwzk5Wgph9uA46VYK8p/BTJJahKCuGdyKFIFfEfakC4N
// SIG // Xa+vwY4IRp49lzQPLo7WticqMaaqb8hE2QmCFIyLOvWI
// SIG // g4837bd+60FcCGbHwmL/g1ObIf0rRS9ceK4DY9rfBnHF
// SIG // H2v1d4hRVvZXyCVlrL7ZQuVzjjkLMK9VJlXTVkHpuC8K
// SIG // 5S4HHTv2AJx6mOdkMJwS4gLlJ7gXrIVpnxG+aIniGDCC
// SIG // BhQwggP8oAMCAQICEHojrtpTaZYPkcg+XPTH4z8wDQYJ
// SIG // KoZIhvcNAQEMBQAwVzELMAkGA1UEBhMCR0IxGDAWBgNV
// SIG // BAoTD1NlY3RpZ28gTGltaXRlZDEuMCwGA1UEAxMlU2Vj
// SIG // dGlnbyBQdWJsaWMgVGltZSBTdGFtcGluZyBSb290IFI0
// SIG // NjAeFw0yMTAzMjIwMDAwMDBaFw0zNjAzMjEyMzU5NTla
// SIG // MFUxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdv
// SIG // IExpbWl0ZWQxLDAqBgNVBAMTI1NlY3RpZ28gUHVibGlj
// SIG // IFRpbWUgU3RhbXBpbmcgQ0EgUjM2MIIBojANBgkqhkiG
// SIG // 9w0BAQEFAAOCAY8AMIIBigKCAYEAzZjYQ0GrboIr7PYz
// SIG // fiY05ImM0+8iEoBUPu8mr4wOgYPjoiIz5vzf7d5wu8GF
// SIG // K1JWN5hciN9rdqOhbdxLcSVwnOTJmUGfAMQm4eXOls3i
// SIG // QwfapEFWuOsYmBKXPNSpwZAFoLGl5y1EaGGc5LByM8wj
// SIG // cbSF52/Z42YaJRsPXY545E3QAPN2mxDh0OLozhiGgYT1
// SIG // xtjXVfEzYBVmfQaI5QL35cTTAjsJAp85R+KAsOfuL9Z7
// SIG // LFnjdcuPkZWjssMETFIueH69rxbFOUD64G+rUo7xFIdR
// SIG // AuDNvWBsv0iGDPGaR2nZlY24tz5fISYk1sPY4gir99aX
// SIG // AGnoo0vX3Okew4MsiyBn5ZnUDMKzUcQrpVavGacrIkmD
// SIG // Yu/bcOUR1mVBIZ0X7P4bKf38JF7Mp7tY3LFF/h7hvBS2
// SIG // tgTYXlD7TnIMPrxyXCfB5yQq3FFoXRXM3/DvqQ4shoVW
// SIG // F/mwwz9xoRku05iphp22fTfjKRIVpm4gFT24JKspEpM8
// SIG // mFa9eTgKWWCvAgMBAAGjggFcMIIBWDAfBgNVHSMEGDAW
// SIG // gBT2d2rdP/0BE/8WoWyCAi/QCj0UJTAdBgNVHQ4EFgQU
// SIG // X1jtTDF6omFCjVKAurNhlxmiMpswDgYDVR0PAQH/BAQD
// SIG // AgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAww
// SIG // CgYIKwYBBQUHAwgwEQYDVR0gBAowCDAGBgRVHSAAMEwG
// SIG // A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9jcmwuc2VjdGln
// SIG // by5jb20vU2VjdGlnb1B1YmxpY1RpbWVTdGFtcGluZ1Jv
// SIG // b3RSNDYuY3JsMHwGCCsGAQUFBwEBBHAwbjBHBggrBgEF
// SIG // BQcwAoY7aHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0
// SIG // aWdvUHVibGljVGltZVN0YW1waW5nUm9vdFI0Ni5wN2Mw
// SIG // IwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLnNlY3RpZ28u
// SIG // Y29tMA0GCSqGSIb3DQEBDAUAA4ICAQAS13sgrQ41WAye
// SIG // gR0lWP1MLWd0r8diJiH2VVRpxqFGhnZbaF+IQ7JATGce
// SIG // TWOS+kgnMAzGYRzpm8jIcjlSQ8JtcqymKhgx1s6cFZBS
// SIG // fvfeoyigF8iCGlH+SVSo3HHr98NepjSFJTU5KSRKK+3n
// SIG // VSWYkSVQgJlgGh3MPcz9IWN4I/n1qfDGzqHCPWZ+/Mb5
// SIG // vVyhgaeqxLPbBIqv6cM74Nvyo1xNsllECJJrOvsrJQka
// SIG // jVz4xJwZ8blAdX5umzwFfk7K/0K3fpjgiXpqNOpXaJ+K
// SIG // SRW0HdE0FSDC7+ZKJJSJx78mn+rwEyT+A3z7Ss0gT5Cp
// SIG // TrcmhUwIw9jbvnYuYRKxFVWjKklW3z83epDVzoWJttxF
// SIG // pujdrNmRwh1YZVIB2guAAjEQoF42H0BA7WBCueHVMDyV
// SIG // 1e4nM9K4As7PVSNvQ8LI1WRaTuGSFUd9y8F8jw22BZC6
// SIG // mJoB40d7SlZIYfaildlgpgbgtu6SDsek2L8qomG57Yp5
// SIG // qTqof0DwJ4Q4HsShvRl/59T4IJBovRwmqWafH0cIPEX7
// SIG // cEttS5+tXrgRtMjjTOp6A9l0D6xcKZtxnLqiTH9KPCy6
// SIG // xZEi0UDcMTww5Fl4VvoGbMG2oonuX3f1tsoHLaO/Fwkj
// SIG // 3xVr3lDkmeUqivebQTvGkx5hGuJaSVQ+x60xJ/Y29RBr
// SIG // 8Tm9XJ59AjCCBoIwggRqoAMCAQICEDbCsL18Gzrno7Pd
// SIG // NsvJdWgwDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYT
// SIG // AlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQH
// SIG // EwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJU
// SIG // UlVTVCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3Qg
// SIG // UlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTIx
// SIG // MDMyMjAwMDAwMFoXDTM4MDExODIzNTk1OVowVzELMAkG
// SIG // A1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRl
// SIG // ZDEuMCwGA1UEAxMlU2VjdGlnbyBQdWJsaWMgVGltZSBT
// SIG // dGFtcGluZyBSb290IFI0NjCCAiIwDQYJKoZIhvcNAQEB
// SIG // BQADggIPADCCAgoCggIBAIid2LlFZ50d3ei5JoGaVFTA
// SIG // fEkFm8xaFQ/ZlBBEtEFAgXcUmanU5HYsyAhTXiDQkiUv
// SIG // pVdYqZ1uYoZEMgtHES1l1Cc6HaqZzEbOOp6YiTx63ywT
// SIG // on434aXVydmhx7Dx4IBrAou7hNGsKioIBPy5GMN7KmgY
// SIG // muu4f92sKKjbxqohUSfjk1mJlAjthgF7Hjx4vvyVDQGs
// SIG // d5KarLW5d73E3ThobSkob2SL48LpUR/O627pDchxll+b
// SIG // TSv1gASn/hp6IuHJorEu6EopoB1CNFp/+HpTXeNARXUm
// SIG // dRMKbnXWflq+/g36NJXB35ZvxQw6zid61qmrlD/IbKJA
// SIG // 6COw/8lFSPQwBP1ityZdwuCysCKZ9ZjczMqbUcLFyq6K
// SIG // dOpuzVDR3ZUwxDKL1wCAxgL2Mpz7eZbrb/JWXiOcNzDp
// SIG // QsmwGQ6Stw8tTCqPumhLRPb7YkzM8/6NnWH3T9ClmcGS
// SIG // F22LEyJYNWCHrQqYubNeKolzqUbCqhSqmr/UdUeb49zY
// SIG // Hr7ALL8bAJyPDmubNqMtuaobKASBqP84uhqcRY/pjnYd
// SIG // +V5/dcu9ieERjiRKKsxCG1t6tG9oj7liwPddXEcYGOUi
// SIG // WLm742st50jGwTzxbMpepmOP1mLnJskvZaN5e45NuzAH
// SIG // teORlsSuDt5t4BBRCJL+5EZnnw0ezntk9R8QJyAkL6/b
// SIG // AgMBAAGjggEWMIIBEjAfBgNVHSMEGDAWgBRTeb9aqitK
// SIG // z1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQU9ndq3T/9ARP/
// SIG // FqFsggIv0Ao9FCUwDgYDVR0PAQH/BAQDAgGGMA8GA1Ud
// SIG // EwEB/wQFMAMBAf8wEwYDVR0lBAwwCgYIKwYBBQUHAwgw
// SIG // EQYDVR0gBAowCDAGBgRVHSAAMFAGA1UdHwRJMEcwRaBD
// SIG // oEGGP2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VU0VS
// SIG // VHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNy
// SIG // bDA1BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0
// SIG // dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcN
// SIG // AQEMBQADggIBAA6+ZUHtaES45aHF1BGH5Lc7JYzrftrI
// SIG // F5Ht2PFDxKKFOct/awAEWgHQMVHol9ZLSyd/pYMbaC0I
// SIG // Z+XBW9xhdkkmUV/KbUOiL7g98M/yzRyqUOZ1/IY7Ay0Y
// SIG // bMniIibJrPcgFp73WDnRDKtVutShPSZQZAdtFwXnuiWl
// SIG // 8eFARK3PmLqEm9UsVX+55DbVIz33Mbhba0HUTEYv3yJ1
// SIG // fwKGxPBsP/MgTECimh7eXomvMm0/GPxX2uhwCcs/YLxD
// SIG // nBdVVlxvDjHjO1cuwbOpkiJGHmLXXVNbsdXUC2xBrq9f
// SIG // Lrfe8IBsA4hopwsCj8hTuwKXJlSTrZcPRVSccP5i9U28
// SIG // gZ7OMzoJGlxZ5384OKm0r568Mo9TYrqzKeKZgFo0fj2/
// SIG // 0iHbj55hc20jfxvK3mQi+H7xpbzxZOFGm/yVQkpo+ffv
// SIG // 5gdhp+hv1GDsvJOtJinJmgGbBFZIThbqI+MHvAmMmkfb
// SIG // 3fTxmSkop2mSJL1Y2x/955S29Gu0gSJIkc3z30vU/iXr
// SIG // MpWx2tS7UVfVP+5tKuzGtgkP7d/doqDrLF1u6Ci3TpjA
// SIG // ZdeLLlRQZm867eVeXED58LXd1Dk6UvaAhvmWYXoiLz4J
// SIG // A5gPBcz7J311uahxCweNxE+xxxR3kT0WKzASo5G/PyDe
// SIG // z6NHdIUKBeE3jDPs2ACc6CkJ1Sji4PKWVT0/MYIEkTCC
// SIG // BI0CAQEwaTBVMQswCQYDVQQGEwJHQjEYMBYGA1UEChMP
// SIG // U2VjdGlnbyBMaW1pdGVkMSwwKgYDVQQDEyNTZWN0aWdv
// SIG // IFB1YmxpYyBUaW1lIFN0YW1waW5nIENBIFIzNgIQOlJq
// SIG // LITOVeYdZfzMEtjpiTANBglghkgBZQMEAgIFAKCCAfkw
// SIG // GgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqG
// SIG // SIb3DQEJBTEPFw0yNTAxMjcxOTAxNThaMD8GCSqGSIb3
// SIG // DQEJBDEyBDDKQzt33olgvJsppQUyFags4wyy3TSosnG7
// SIG // dPBMIegkzN3hR1lghJsnp4hSSl9rOgkwggF6BgsqhkiG
// SIG // 9w0BCRACDDGCAWkwggFlMIIBYTAWBBT4YJgZpvuILPfo
// SIG // UpfyoRlSGhZ3XzCBhwQUxq5U5HiG8Xw9VRJIjGnDSnr5
// SIG // wt0wbzBbpFkwVzELMAkGA1UEBhMCR0IxGDAWBgNVBAoT
// SIG // D1NlY3RpZ28gTGltaXRlZDEuMCwGA1UEAxMlU2VjdGln
// SIG // byBQdWJsaWMgVGltZSBTdGFtcGluZyBSb290IFI0NgIQ
// SIG // eiOu2lNplg+RyD5c9MfjPzCBvAQUhT1jLZOCgmF80JA1
// SIG // xJHeksFC2scwgaMwgY6kgYswgYgxCzAJBgNVBAYTAlVT
// SIG // MRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtK
// SIG // ZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVT
// SIG // VCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNB
// SIG // IENlcnRpZmljYXRpb24gQXV0aG9yaXR5AhA2wrC9fBs6
// SIG // 56Oz3TbLyXVoMA0GCSqGSIb3DQEBAQUABIICAGxCt1WQ
// SIG // vxif80+bVrhm9L+wIT7teW1o22YCmPI//wAVxmTP5grL
// SIG // L/TVEm8kjUO/QkWMacjyQvObK6yki02IJeWeQmFBcnHV
// SIG // xqOLmGb2C5DX/rBDXtObNuhJ+KORxmEoHTKx5zuY5/OB
// SIG // Utcea+H3vXdVutmDrIEiWcAMerzBjvWU2EqoVKKSyciF
// SIG // o9UohKkbNtvPgbsGnpFx88mFW+Rc1VLhAXXHeWVdfa74
// SIG // eISMxfx/5TgyQonZUbBVUbo5nXp6HuQsk20pl5yfi8Qo
// SIG // M5ZHUGvxXaxJNuQ5394YbSyyg63Kle/qK4TnEFG3LX2f
// SIG // B/BI64nXRgB5qZMetAmGZDDOREEueTwav5llpygkF5a+
// SIG // zqB1HMQrLA174zY5XaADDMjcmwxqotiwDN7qO3bscaxp
// SIG // u0ezIYybV73Bih3Iqe8mmpjOZY2qtm5voEOPgG5wNaf2
// SIG // gtwcdbv84g+x9Q+REX8hKo1fADmboKvJ5NujpGS2CD0v
// SIG // nbqC/eMf+x6yABSuhn19hYhyzakt4qN4cwoYlkS00iov
// SIG // eTMELIkiEBhaR8mNKb8Ugqr+snJ0ud1VokRiFFBL1Jm8
// SIG // BCX6vFyczkc4MhH1Qq9osYeW8jCAo9DJZ/KOrlkzZrfO
// SIG // XjlvedFwYqOyBQNlDiTAyINAoMeNh/nV8HotFkM19stj
// SIG // F6clWNxZI6hCFX9i
// SIG // End signature block

View File

@ -1,229 +0,0 @@
<!-- //----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2010 All Rights Reserved.
//
// Contents: Demonstrate the Redirection COM interface.
//
//----------------------------------------------------------------------------
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Redirection COM interface </title>
<style type="text/css">
#Button1
{
height: 31px;
width: 147px;
}
#PowerDown
{
width: 101px;
background-color: #FFFFFF;
font-weight: 700;
color: #3366CC;
}
#PowerUp
{
width: 108px;
background-color: #FFFFFF;
color: #3366CC;
font-weight: 700;
}
.style1
{
font-size: medium;
}
.style2
{
text-align: center;
height: 363px;
}
.style3
{
text-align: center;
font-family: Calibri;
font-size: medium;
}
.style4
{
font-family: Calibri;
font-size: medium;
}
</style>
<!-- The AMT instance must be defined as global to register to the redirection events -->
<script language="javascript" type="text/javascript">
var amt = new ActiveXObject("Intel.Manageability.COM.AMTInstance");
</script>
<script language="javascript" type="text/javascript">
// <![CDATA[
function SOLSession_onclick()
{
var info = new ActiveXObject("Intel.Manageability.ConnectionInfo");
var SolStatus = { "Alive": 0, "Closed": 1, "Dropped": 2, "Data Availiable":3 }
if (typeof (info) != undefined)
{
info.Host = Host.value;
info.UserName = UserName.value;
info.Password = Password.value;
if (typeof (amt) != undefined)
{
try
{
amt.Create(info);
// Move the interface to TRUE
amt.RedirectionSOL.SetInterfaceState(true);
//Get interface state
IGet = amt.RedirectionSOL.GetInterfaceState();
alert("The current interface state is: " + IGet);
//Get current session state
CSession = amt.RedirectionSOL.CurrentSessionState;
alert("Session state is: "+CSession);
//Start session
amt.RedirectionSOL.StartSOL();
//Need to wait for the event to raise
//Stop session
amt.RedirectionSOL.StopSOL();
}
catch (Error)
{
alert(Error.Message);
}
}
else
{
alert("Interface undefined - failed");
}
}
else
{
alert("SOL Interface test failed");
}
}
function IDERSession_onclick()
{
Cd = "c:\\iso.iso";
Floppy = "c:\\img.img";
var EredirectState = { "IDER_SET_ONRESET": 0, "IDER_SET_GRACEFULLY": 1, "IDER_SET_IMMEDIATELY": 2 }
var hlaTimeout = new ActiveXObject("Intel.Manageability.Redirection.IDERTimeouts");
var hlaStatistic = new ActiveXObject("Intel.Manageability.Redirection.IDERStatistics");
try
{
hlaTimeout.RxTimeout = 15000;
hlaTimeout.TxTimeout = 17000;
hlaTimeout.HBTimeout = 25000;
}
catch (Error)
{
alert(Error.description);
}
var info = new ActiveXObject("Intel.Manageability.ConnectionInfo");
if (typeof (info) != undefined)
{
info.Host = Host.value;
info.UserName = UserName.value;
info.Password = Password.value;
if (typeof (amt) != undefined)
{
try
{
amt.Create(info);
//Set interface state to TRUE
amt.RedirectionIDER.SetInterfaceState(true);
//Get interface state
IGet = amt.RedirectionIDER.GetInterfaceState;
alert("The current interface state is: " + IGet);
//Get current session state
CSession = amt.RedirectionIDER.CurrentSessionState;
alert("Session state is: "+CSession);
//Start session
amt.RedirectionIDER.StartIDERWithTimeoutAndState(Cd, Floppy, hlaTimeout, EredirectState.IDER_SET_IMMEDIATELY);
//Get Statistic
IDERStatistic = amt.RedirectionIDER.GetStatistics();
document.write("ErrorState: " + IDERStatistic.ErrorState + "</br>");
document.write("DataTransfer: " + IDERStatistic.DataTransfer + "</br>");
//Stop session
amt.RedirectionIDER.StopIDER();
}
catch (Error)
{
alert(Error.Message);
}
}
else
{
alert("Interface undefined - failed");
}
}
else
{
alert("SOL Interface test failed");
}
}
function amt::OnSOLStatusChange(a,e) {
alert("The session status changed to: " + e.state);
}
function amt::OnIDERStatusChange(a,e) {
alert("The session status changed to: " + e.state);
}
// ]]>
</script>
</head>
<body style="background-color: #003366" background="background.bmp">
<div class="style2">
<center>
<table style="height: 252px; font-family: Calibri; font-weight: 700">
<tr>
<td style="color: #FFFFFF">
<span class="style1">Host Name:&nbsp;&nbsp; </span>
<input id="Host" type="text" class="style1" /><span class="style1"> </span>
</td>
</tr>
<tr>
<td style="color: #FFFFFF">
<span class="style1">User Name:&nbsp;&nbsp;&nbsp; </span>
<input id="UserName" type="text" class="style1" /><span class="style1"> </span>
</td>
</tr>
<tr>
<td style="color: #FFFFFF">
<span class="style1">Password:&nbsp;&nbsp; &nbsp;&nbsp; </span>
<input id="Password" type="password" class="style1" /></td>
</tr>
</table>
</center>
<span class="style4">&nbsp;</span><br class="style4" />
<span class="style1">
<input id="SOLSession" type="button" value="SOL Session"
onclick="return SOLSession_onclick()" class="style3" /></span><span
class="style4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<input id="IDERSession" type="button" value="IDER Session"
onclick="return IDERSession_onclick()" class="style3" /></span><span
class="style4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<p>
<marquee loop="-1" scrollamount="5" width="100%"
style="color: #FFFFFF; font-family: 'MV Boli'; font-size: x-large; font-weight: 700; height: 35px;">This script demonstrate the Intel High Level API COM Interface :)</marquee></p>
</body>
</html>

View File

@ -1,11 +0,0 @@
ECHO.
ECHO ****************************************************
ECHO Register IWSManClient.dll
ECHO ****************************************************
call "C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm" "IWSManClient.dll" /u
ECHO.
ECHO ****************************************************
ECHO Register HLAPI.dll
ECHO ****************************************************
call "C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm" "HLAPI.dll" /u

View File

@ -1,74 +0,0 @@
Copyright (C) 2007 Intel Corporation
Intel(R) Active Management Technology (Intel AMT):
A brief overview of the Intel AMT® High-level API module
Introduction:
-------------
The Intel AMT® High Level Application Programming Interface (HLAPI) provides
software developers with a simple interface to the Intel AMT features. This zip
includes the HLAPI library, and the HLAPI samples. The HLAPI is using other AMT
SDK compiled libraries, which are also included in this zip. Their sources can
be found in separate zip folders in the AMT SDK kit.
Note: Once an object in this library is given a reference to a SecureString
password that object becomes that password instance's owner and shouldn't
be changed, disposed or given to another object. If the same password is
needed by more than one object use the SecureString.Copy method.
More info about the HLAPI Library and HLAPI samples can be found here:
https://software.intel.com/sites/manageability/HLAPI_Documentation/default.htm
The zip includes:
1) Bin folder:
a) HLAPI compiled library: HLAPI.dll
b) Other AMT SDK compiled libraries (referenced by HLAPI code):
*DotNetWSManClient.dll
*imrsdk.dll
*imrsdk_x64.dll
*Intel.Wsman.Scripting.dll
*IWSManClient.dll
*WebStorage.dll
c) Scripts folder: Containing JavaScript scripts.
For more info, see Src\Scripts\HlapiScriptsReadme.txt
2) Src folder:
a) Intel_Manageability_Library folder contains C# code for the
HLAPI.dll
b) HLAPI_Samples folder contains C# code for the HLAPI samples.
Each sample has a VS project, which can be compiled to an .exe file.
All samples' projects are included into one solution:
HLAPI Samples.sln
How to Build:
-------------
In order to compile the HLAPI library:
1) Use Visual Studio and the latest windows SDK toolkit.
2) Open solution from this path:
Src\Intel_Manageability_Library.sln
3) Invoke build from the Visual Studio menu.
In order to run a sample:
Note: To ensure that security is maintained, the samples should be run from a directory that can be accessed
only by the Administrator user. This is to prevent unauthorized manipulation of files in the directory.
1) Open HLAPI Samples.sln in Visual Studio.
2) Right click on the project of the sample you want to run, and select
"Set as StartUp Project".
3) In Common\SampleArgs.json, fill the ConnectionInfoEx settings with your
AMT system settings (IP address / host name, user name, proxy, etc.).
4) Change/set any other input needed for this specific sample in the
Program.cs file.
5) Build the sample from Visual Studio.
6) An .exe file will be compiled into the output folder:
bin\<configuration> where <configuration> is either Debug or Release.
7) Run the .exe file from command-line.
8) Enter the password to your AMT system when prompted.
9) Get the sample output.
------------------------------------------------------------------
* Other names and brands may be claimed as the property of others.

View File

@ -1 +0,0 @@
All vPro SDK files from this package with the following extensions are eligible for redistribution: .cpp, .cs, .dll, .lib, .exe., .ps1.

View File

@ -1,23 +0,0 @@
The MIT License (MIT)
Copyright (c) .NET Foundation and Contributors
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,11 +0,0 @@
Copyright and Licensing Information for ACE(TM), TAO(TM), CIAO(TM), and CoSMIC(TM)
ACE(TM), TAO(TM), CIAO(TM), and CoSMIC(TM) (henceforth referred to as "DOC software") are copyrighted by Douglas C. Schmidt and his research group at Washington University, University of California, Irvine, and Vanderbilt University, Copyright (c) 1993-2007, all rights reserved. Since DOC software is open-source, freely available software, you are free to use, modify, copy, and distribute--perpetually and irrevocably--the DOC software source code and object code produced from the source, as well as copy and distribute modified versions of this software. You must, however, include this copyright statement along with any code built using DOC software that you release. No copyright statement needs to be provided if you just ship binary executables of your software products.
You can use DOC software in commercial and/or binary software releases and are under no obligation to redistribute any of your source code that is built using DOC software. Note, however, that you may not do anything to the DOC software code, such as copyrighting it yourself or claiming authorship of the DOC software code, that will prevent DOC software from being distributed freely using an open-source development model. You needn't inform anyone that you're using DOC software in your software, though we encourage you to let us know so we can promote your project in the DOC software success stories.
The ACE, TAO, CIAO, and CoSMIC web sites are maintained by the DOC Group at the Institute for Software Integrated Systems (ISIS) and the Center for Distributed Object Computing of Washington University, St. Louis for the development of open-source software as part of the open-source software community. Submissions are provided by the submitter ``as is'' with no warranties whatsoever, including any warranty of merchantability, noninfringement of third party intellectual property, or fitness for any particular purpose. In no event shall the submitter be liable for any direct, indirect, special, exemplary, punitive, or consequential damages, including without limitation, lost profits, even if advised of the possibility of such damages. Likewise, DOC software is provided as is with no warranties of any kind, including the warranties of design, merchantability, and fitness for a particular purpose, noninfringement, or arising from a course of dealing, usage or trade practice. Washington University, UC Irvine, Vanderbilt University, their employees, and students shall have no liability with respect to the infringement of copyrights, trade secrets or any patents by DOC software or any part thereof. Moreover, in no event will Washington University, UC Irvine, or Vanderbilt University, their employees, or students be liable for any lost revenue or profits or other special, indirect and consequential damages.
DOC software is provided with no support and without any obligation on the part of Washington University, UC Irvine, Vanderbilt University, their employees, or students to assist in its use, correction, modification, or enhancement. A number of companies around the world provide commercial support for DOC software, however.
DOC software is Y2K-compliant, as long as the underlying OS platform is Y2K-compliant. Likewise, DOC software is compliant with the new US daylight savings rule passed by Congress as "The Energy Policy Act of 2005," which established new daylight savings times (DST) rules for the United States that expand DST as of March 2007. Since DOC software obtains time/date and calendaring information from operating systems users will not be affected by the new DST rules as long as they upgrade their operating systems accordingly.
The names ACE(TM), TAO(TM), CIAO(TM), CoSMIC(TM), Washington University, UC Irvine, and Vanderbilt University, may not be used to endorse or promote products or services derived from this source without express written permission from Washington University, UC Irvine, or Vanderbilt University. Further, products or services derived from this source may not be called ACE(TM), TAO(TM), CIAO(TM), or CoSMIC(TM) nor may the name Washington University, UC Irvine, or Vanderbilt University appear in their names, without express written permission from Washington University, UC Irvine, and Vanderbilt University.

View File

@ -1,21 +0,0 @@
Boost Software License - Version 1.0
August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

View File

@ -1,20 +0,0 @@
Copyright (c) 2011-2022 Twitter, Inc.
Copyright (c) 2011-2022 The Bootstrap Authors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@ -1,157 +0,0 @@
GENIVIA, INC., SOURCE CODE LICENSE AGREEMENT FOR COMMERCIAL USE
Rationale: This source code license for commercial use shall replace the gSOAP public license and GPL license for Customer's use of the Software, thereby rendering the terms and conditions imposed by the gSOAP public license and GPL license on Customer inactive during the term of this commercial license as set forth in this Agreement. This license covers the entire gSOAP source distribution, including, but not limited to, the runtime library, compiler, WSDL importer, example applications, and documentation.
THIS SOURCE CODE LICENSE AGREEMENT ("Agreement") is made and entered into as of the last date executed by the parties below (the "Effective Date") by and between GENIVIA, INC., a Florida corporation having a principal place of business at 3178 Shamrock East, Tallahassee, Florida 32309, USA, ("Genivia"), and Intel Corporation, a Delaware corporation having a principal place of business at 2200 Mission College Blvd., Santa Clara, CA 95052 ("Customer"). The parties agree as follows:
1. DEFINITIONS.
"Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code.
"Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: (i) any addition to or deletion from the contents of a file containing Original Code or previous Modifications; (ii) any new file that contains any part of the Original Code, or previous Modifications.
"Covered Code" means the Original Code, or Modifications or the combination of the Original Code, and Modifications, in each case including portions thereof.
"Software" means the Covered Code and accompanying documentation, including Updates (if any), provided by Genivia under this Agreement.
"Updates" means any patches, bug fixes, and upgrades made generally available during the term and provided by Genivia under this Agreement.
"Source Code" means computer programming code in human readable form that is not suitable for machine execution without the intervening steps of interpretation or compilation, meaning the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable Object Code, or source code differential comparisons against the Original Code. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge.
"Executable Object Code" means the computer programming code in any other form than Source Code that is not readily perceivable by humans and suitable for machine execution without the intervening steps of interpretation or compilation.
"Authorized Site" means the specific address of Customers facility consisting of a single building or multiple buildings on a contiguous campus as specified in Exhibit A.
"Project" means a concerted undertaking by an identified Customer development team to design or produce a Target Application.
"Run-Time Module" means the Executable Object Code derived from compiling the Software to be incorporated into a Target Application as inseparably embedded code.
"Target Application" means an end-user item, such as a software product that is possibly replicated in identical form and offered for sale to third parties, or a device or system developed by Customer pursuant to a Project that contains a Run-Time Module, or any portion thereof, as specified in Exhibit A.
2. SOURCE CODE LICENSE.
Subject to Customers compliance with the terms and conditions of this Agreement and payment of any applicable fees, Genivia hereby grants to Customer a non-transferable, non-exclusive, worldwide, royalty-free license: (i) to use the Software, solely at the Authorized Site in connection with the Project; (ii) to create Modifications of the Software, solely to the extent necessary to support the development of the Target Application; (iii) to compile the Software, including any Modifications thereof, into a Run-Time Module; (iv) to reproduce an unlimited number of Run-Time Modules for physical incorporation into the Target Application; and (v) to distribute the Target Application.
In addition to the licenses granted above, Genivia hereby grants to Customer a non-transferable,
nonexclusive, worldwide, perpetual, royalty-free, paid-up license to reproduce, market, sublicense
and distribute the Applications solely in connection with Customer's Intel® AMT SDK.
Customer's Sub-licensees shall, in turn, be granted a royalty free, paid up license to reproduce,
market and distribute Target Applications developed utilizing the Software and Applications
licensed by Customer. Sublicensees' rights to utilize the Applications, however, shall be limited to
uses directly related to the Intel® AMT SDK. Further, Genivia agrees that all recipients of
Customer's Intel® AMT SDK shall be granted royalty free access to all updates of the Software
made generally available on Genivia's website.
3. RESTRICTIONS.
Customer shall reproduce and include any and all copyright notices and proprietary rights legends, as such notices and legends appear in the original Software, on any copy of the Software, or portion thereof, with the exception of the gSOAP public license and GPL license notices.
The Software shall be handled, used and stored, solely at the Authorized Site identified in Exhibit A. The Software may be used from a single machine, a set of machines, or a network file server, but there shall be no access to the Software from any external network not located at the Authorized Site.
A function of the Software is to create Run-Time Modules for incorporation into Target Applications. Except as set forth in Section 2 above, no license is granted hereunder to reproduce or distribute the gSOAP soapcpp2 compiler and wsdl2h importer as part of such Target Application.
4. OWNERSHIP.
Genivia represents and warrants to Customer that Genivia has all rights in the Software necessary to grant the rights and license granted to Customer in this Agreement.
Without limiting the foregoing, Genivia represents and warrants that Genivia acquires an assignment of all intellectual property rights in and to all portions of the Software that are delivered to Customer under this Agreement, including any Modifications made by GPL or gSOAP Public License licensees of such Software.
Customer shall not have any obligation to provide, assign, or disclose to Genivia or any other party any Modifications. Notwithstanding the foregoing, Genivia and its licensors shall retain exclusive ownership of all worldwide Intellectual Property Rights in and to the Software. Customer acknowledges that this Agreement does not grant to Customer any Intellectual Property Rights in or to the Software other than the limited right to use the Software as set forth in Section 2. Customer hereby assigns to Genivia all Intellectual Property Rights it may have or obtain in and to the Modifications that Customer makes to the Software. If Customer has or obtains any rights to the foregoing that cannot be assigned to Genivia, Customer unconditionally and irrevocably waives the enforcement of such rights, and if such rights cannot be waived, Customer hereby grants to Genivia an exclusive, irrevocable, perpetual, worldwide, fully paid and royalty-free license, with rights to sublicense through one or more levels of sublicensees, to reproduce, create derivative works of, distribute, publicly perform, publicly display, make, use, sell and import such Modifications and other intellectual property noted above by all means now known or later developed. All rights in and to the Software not expressly granted to Customer in this Agreement are expressly reserved for Genivia and its licensors.
5. DELIVERY AND PAYMENT.
Immediately following the Effective Date, Genivia grants Costumer the right to download the Software from the Approved Software Download Site specified in Exhibit A, and install the Software at the Authorized Site and use the Software as set forth in Section 2 subject to the restrictions listed in Section 3. Notwithstanding any terms or other agreements posted on the Approved Software Download Site, this Agreement shall be the sole and exclusive agreement governing Customer's use of the Software.
Customer shall pay to Genivia the Software license fees set forth in Genivias current price list, unless otherwise specified in Exhibit A. License fees will be invoiced with shipment of this License Agreement. Payment of all amounts invoiced shall be due thirty (30) days after receipt of the invoice.
All payments and amounts shall be paid without deduction, set-off or counter claim, free and clear of any restrictions or conditions, and without deduction for any taxes, levies, imposts, duties, fees, deductions, withholdings or other governmental charges. If any deduction is required to be made by law, Customer shall pay in the manner and at the same time such additional amounts as will result in receipt by Genivia of such amount as would have been received by Genivia had no such amount been required to be deducted. If Customer is claiming sales or use tax exemption, a certified Tax Exempt Certificate must be attached to this Agreement or applicable purchase order submitted by Customer.
6. TERM AND TERMINATION.
This Agreement shall commence upon the Effective Date and continue until terminated as set forth in this Agreement. This Agreement will immediately terminate upon Customers breach of this Agreement, unless such breach is curable and is cured by Customer within thirty (30) days after notice of such breach is provided by Genivia. Upon termination Customer agrees not to use the Software for any purpose whatsoever. The following Sections shall survive any termination of this Agreement: Sections 1, 4, 6, and 8.
7. LIMITED WARRANTY.
Genivia warrants that the Software, installation scripts, and future Updates will be provided to Customer. Customer assumes full responsibility for: (i) the selection, download, and installation of the Software from the Approved Software Download Site specified in Exhibit A; (ii) the proper use of the Software; (iii) verifying the results obtained from the use of the Software; and (iv) taking appropriate measures to prevent loss of data. Genivia does not warrant that the operation of the Software will meet Customers requirements or that Customer will be able to achieve any particular results from use or modification of the Software or that the Software will operate free from error.
EXCEPT AS EXPRESSLY SET FORTH IN SECTIONS 7 AND 8 OF THIS AGREEMENT, GENIVIA AND ITS LICENSORS DISCLAIM ALL WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY RIGHTS, AND ANY WARRANTY THAT MAY ARISE BY REASON OF TRADE USAGE, CUSTOM, OR COURSE OF DEALING. WITHOUT LIMITING THE FOREGOING, CUSTOMER ACKNOWLEDGES THAT THE SOFTWARE IS PROVIDED "AS IS" AND THAT GENIVIA DOES NOT WARRANT THE SOFTWARE WILL RUN UNINTERRUPTED OR ERROR FREE. THE ENTIRE RISK AS TO RESULTS AND PERFORMANCE OF THE SOFTWARE IS ASSUMED BY CUSTOMER. UNDER NO CIRCUMSTANCES WILL GENIVIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES OF ANY KIND OR NATURE WHATSOEVER, WHETHER BASED ON CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, ARISING OUT OF OR IN ANY WAY RELATED TO THE SOFTWARE, EVEN IF GENIVIA HAS BEEN ADVISED ON THE POSSIBILITY OF SUCH DAMAGE OR IF SUCH DAMAGE COULD HAVE BEEN REASONABLY FORESEEN, AND NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY EXCLUSIVE REMEDY PROVIDED. SUCH LIMITATION ON DAMAGES INCLUDES, BUT IS NOT LIMITED TO, DAMAGES FOR LOSS OF GOODWILL, LOST PROFITS, LOSS OF DATA OR SOFTWARE, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION OR IMPAIRMENT OF OTHER GOODS. IN NO EVENT WILL GENIVIA BE LIABLE FOR THE COSTS OF PROCUREMENT OF SUBSTITUTE SOFTWARE OR SERVICES. COSTUMER ACKNOWLEDGE THAT THIS SOFTWARE IS NOT DESIGNED FOR USE IN ON-LINE EQUIPMENT IN HAZARDOUS ENVIRONMENTS SUCH AS OPERATION OF NUCLEAR FACILITIES, AIRCRAFT NAVIGATION OR CONTROL, OR LIFE-CRITICAL APPLICATIONS. GENIVIA EXPRESSLY DISCLAIM ANY LIABILITY RESULTING FROM USE OF THE SOFTWARE IN ANY SUCH ON-LINE EQUIPMENT IN HAZARDOUS ENVIRONMENTS AND ACCEPTS NO LIABILITY IN RESPECT OF ANY ACTIONS OR CLAIMS BASED ON THE USE OF THE SOFTWARE IN ANY SUCH ON-LINE EQUIPMENT IN HAZARDOUS ENVIRONMENTS BY CUSTOMER. FOR PURPOSES OF THIS PARAGRAPH, THE TERM "LIFE-CRITICAL APPLICATION" MEANS AN APPLICATION IN WHICH THE FUNCTIONING OR MALFUNCTIONING OF THE SOFTWARE MAY RESULT DIRECTLY OR INDIRECTLY IN PHYSICAL INJURY OR LOSS OF HUMAN LIFE. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
8. INFRINGEMENT INDEMNITY.
Genivia will defend at its expense any suit brought against Customer and will pay all damages finally awarded in such suit insofar as such suit is based on a claim that the Software as provided to Customer infringes a previously issued patent or copyright, provided that Genivia is notified promptly of such claim and is given full and complete authority (including settlement authority), information and assistance by Customer for such defense. In the event that the Software is held in any such suit to infringe such a right and its use is enjoined, or if in the opinion of Genivia the Software is likely to become the subject of such a claim, Genivia at its own election and expense will either (i) procure for Customer the right to continue using the Software or (ii) modify or replace the Software so that it becomes non-infringing while giving substantially equivalent performance. In the event that (i) or (ii) above are not, in Genivias sole determination, obtainable using reasonable commercial efforts, then Genivia may terminate this Agreement and refund amount Customer paid Genivia under this Agreement for the Software which is the subject of such claim. The indemnification obligation shall not apply to infringement actions or claims to the extent that such actions or claims are caused solely by: (i) modifications made to the Software by a party other than Genivia; and (ii) the combination of the Software with items not supplied or approved by Genivia.
9. GENERAL.
Neither party shall be liable hereunder by reason of any failure or delay in the performance of its obligations hereunder (except for the payment of money) on account of strikes, shortages, riots, insurrection, fires, flood, storm, explosions, acts of God, war, governmental action, labor conditions, earthquakes, material shortages or any other cause which is beyond the reasonable control of such party.
The Software is a "commercial item" as that term is defined at 48 C.F.R. 2.101, consisting of "commercial computer software" and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212. Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4, Customer will provide the Software to U.S. Government End Users only pursuant to the terms and conditions therein.
Customer may not delegate, assign or transfer this Agreement, the license(s) granted or any of Customers rights or duties hereunder, including by way of merger (regardless of whether Customer or Genivia is the surviving entity) or acquisition, and any attempt to do so, without Genivias express prior written consent, shall be void. Genivia may assign this Agreement, and its rights and obligations hereunder, in its sole discretion.
All Software and technical information delivered under this Agreement are subject to U.S. export control laws and may be subject to export or import regulations in other countries. Customer agrees to strictly comply with all such laws and regulations.
This Agreement is governed by California law, excluding any principle or provision that would call for the application of the law of any jurisdiction other than California. Any action regarding this Agreement shall be brought in a court of competent jurisdiction, federal or state, in the County of Santa Clara, California, and Genivia consents to venue and jurisdiction in and service of process from such court.
EXHIBIT A
1. Genivia gSOAP Source Code Products.
Original Source Code files suitable for compilation into Run-Time Modules for integration into a Target Application:
dom.h
dom++.h
dom.c
dom++.cpp
dom.cpp
soapdoc2.pdf
soapdoc2.html
stdsoap2.h
stdsoap2.c
stdsoap2.cpp
stl.h
stldeque.h
stllist.h
stlvector.h
stlset.h
samples/* (all example files included in the package under 'samples')
Updates to any of the Original Source Code files listed above and distributed by Genivia are also covered under this Agreement.
Original Source Code files of the Software with development functionality not suitable for compilation and integration into Target Applications:
src/error2.c
src/error2.h
src/init2.c
src/soapcpp2.c
src/soapcpp2.h
src/soapcpp2_lex.l
src/soapcpp2_yacc.y
src/symbol2.c
wsdl/dime.h
wsdl/gwsdl.h
wsdl/http.h
wsdl/imports.h
wsdl/includes.h
wsdl/mime.h
wsdl/schema.cpp
wsdl/schema.h
wsdl/service.cpp
wsdl/service.h
wsdl/soap.cpp
wsdl/soap.h
wsdl/typemap.dat
wsdl/types.cpp
wsdl/types.h
wsdl/wsdl.cpp
wsdl/wsdl.h
wsdl/wsdl2h.cpp
The source codes above are part of the software development toolkit. The development toolkit generates source code that is suitable for compilation and integration into the Target Application as set forth by Sections 2 and 3.
2. Approved Software Download Site
http://sourceforge.net/projects/gsoap2
3. Description of the Customer's Project and the Intended Functionality of the Target Application.
Intel® Active Management Technology ,a network management stack that provides out-of-band management in the realms of asset management, diagnostics, security, circuit breaker, and similar features.
___________________________________________________

View File

@ -1,23 +0,0 @@
Except where otherwise noted in the source code (e.g. the files hash.c,
list.c and the trio files, which are covered by a similar licence but
with different Copyright notices) all the files are:
Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is fur-
nished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@ -1,27 +0,0 @@
Copyright (C) 2004-2006 Intel Corp. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
- Neither the name of Intel Corp. nor the names of its
contributors may be used to endorse or promote products derived from this
software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,25 +0,0 @@
Copyright (C) The Internet Society (1999). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

View File

@ -1,168 +0,0 @@
-------------------------------------------------------------------
Copyright (C) 2004 Intel Corporation
Release notes file for Intel AMT(R) High-level API module
-------------------------------------------------------------------
HLAPI Module release 20.0.0.1:
------------------------------
# The Intel(R) AMT SDK has been updated from version 18.x to 20.x.
This update indicates that the SDK now supports Intel(R) CSME version 20.x,
which is used on Intel(R) Lunar Lake platforms.
# Bug fix: Fixed the PTHI command marshaling
# Bug fix: Added option to load configuration file from working directory
HLAPI Module release 18.0.1.1:
------------------------------
# Updated HardwareAsset to support DMTF SMBIOS release 3.8.0.
# Added user input for timeout in agent presence samples.
# Added thread blocking warning in AgentPresenceLocal sample.
# Bug fix: Fix all agent presence samples.
# Bug fix: Fix sample password input backspace usage.
# Bug fix: Add sample input file serialization errors.
# Bug fix: Add error message if AMT server was not found.
HLAPI Module release 18.0.0.1:
------------------------------
# Updated the Intel(R) AMT SDK version from 16.x to 18.x to indicate that the
SDK also supports Intel(R) CSME version 18.x, used on Intel(R) Meteor Lake platforms.
# This module adds support for the new features in Intel(R) Remote Platform Erase 3.0
# Bug fix: Fix dispose error in AMTInstanceManager
# Static code analysis fixes
HLAPI Module release 16.0.7.1:
------------------------------
# This release changes all HLAPI samples to compile to .NET Framework 4.8
instead of .NET Framework 4.6.1.
# This release changes the connection to Intel(R) AMT to use a SecureString for
storing passwords in memory. All password references in the HLAPI library and
samples have been modified to support this capability.
As a result:
- All APIs that used a string to reference a password were replaced with a
SecureString.
- ConnectionInfoEX, SocksProxy, were converted from structs into Disposable
classes.
- Updated Readme to note SecureString password ownership.
# Changed ConnectionInfoEX usage in HLAPI Samples to be created by an external
argument file with the password given when prompted by the sample.
# Updated the Readme with new argument passing method.
# Updated versions using SecureStrings for passwords of these dlls:
DotNetWSManClient.dll
IWSManClient.dll
Intel.Wsman.Scripting.dll
WebStorage.dll
# Bug fix: Allow usage of AgentPresence without proxy.
# Bug fix: Fix usage of AgentPresence with a LAN-less configuration.
# Bug fix: Update event codes in AccessMonitorManager.
# Bug fix: Remove OCR enablement when enabling RPE in AMT.
# Bug fix: Fix fetched event logs in RPE sample.
# Bug fix: Fix use of self-signed certificates.
HLAPI Module release 16.0.5.1:
------------------------------
# This release changes the HLAPI to compile to .NET Standard 2.0 instead of
.NET Framework 4.6.1 - meaning that it can now be used as a part of either of
the following target frameworks:
.NET Standard starting from version 2.0
.NET Framework starting from version 4.6.1
.NET Core starting from version 2.0
.NET starting from version 5.0
# Updated versions compiled to .NET Standard 2.0 of these dlls:
DotNetWSManClient.dll
IWSManClient.dll
Intel.Wsman.Scripting.dll
WebStorage.dll
# All samples were changed to compile using an SDK style project file, allowing
users to easily compile the samples to .NET (Core) if they wish.
# Updated the Power sample with basic CLI to change power options in runtime.
# Bug fix: Added support for the GCMP-256 encryption method in the WiFi
Configurations.
# Bug fix: Fixed HLAPI WebStorage flow implementation.
# Updated HardwareAsset to support DMTF SMBIOS release 3.6.0.
# Cleanup of the SOAP APIs as they are deprecated since AMT 6.0.
HLAPI Module release 16.0.4.1:
------------------------------
This release includes:
# Support for Intel AMT connectivity over TLS with an option to accept a
self-signed certificate. Using a self-signed certificate allows the developer
to initially enable a TLS connection with untrusted self-signed certificates.
When moving towards productization, the developer should switch to use
certificates provided by a trusted certificate authority. In absence of
deployment of a trusted certificate authority, the WSMAN AMTAuthenticate()
command must be used to verify that the endpoint is authentic AMT Firmware.
# Bug fix: Added support for WPA3 wireless authentication method in the WiFi
Configuration Samples
# Bug fix in the HardwareAsset sample
# Static code analysis fixes
# Updated versions of these dlls:
imrsdk.dll
imrsdk_x64.dll
DotNetWSManClient.dll
IWSManClient.dll
Intel.Wsman.Scripting.dll
WebStorage.dll
HLAPI Module release 16.0.3.1:
------------------------------
# A new addition to the AMT HLAPI package: Remote Platform Erase sample, for the
new 'Remote Platform Erase' feature added to AMT starting ME16. This
sample introduces the flows and the commands of the RPE feature.
This sample includes RPE 2.0 options.
# This release contains a bug-fix in the WiFi Configuration Remote sample
# This version includes code changes resulting from an additional static code
analysis.
# This package contains an updated version of these dlls:
DotNetWSManClient.dll
IWSManClient.dll
Intel.Wsman.Scripting.dll
WebStorage.dll
HLAPI Module release 16.0.0.1:
------------------------------
# Updated the version of the AMT SDK from 15.x to 16.x to reflect that the AMT
SDK also supports CSME version 16.x that is used on Intel* Alderlake platforms
# This release contains bug-fixes for the HardwareAsset sample; added display of
OCR and RPE capabilities; processor family, processor upgrade, and form factor
fields lists were updated
HLAPI Module release 15.0.2.1:
------------------------------
# This release contains a bug-fix for the HardwareAsset sample
# This release contains a bug-fix for the Redirection sample
# This package contains an updated version of these dlls:
DotNetWSManClient.dll
IWSManClient.dll
HLAPI Module release 15.0.1.1:
------------------------------
# This release contains a bug-fix for the HardwareAsset sample
# This package contains an updated version of these dlls:
imrsdk.dll
imrsdk_x64.dll
DotNetWSManClient.dll
Intel.Wsman.Scripting.dll
IWSManClient.dll
HLAPI Module release 15.0.0.2:
------------------------------
# Updated the version of the AMT SDK from 14.x to 15.x to reflect that the AMT
SDK also supports CSME version 15.x that is used on Intel* Tigerlake platforms
# This release contains bug fixes for Redirection Sample, and HardwareAsset
Sample
HLAPI Module release 14.0.2.1:
------------------------------
This release contains bug fixes for some of the HLAPI samples.
HLAPI Module release 14.0.1.1:
------------------------------
# First release since AMT SDK 12.0.0.9 was removed for maintenance
# Module contains: Bin folder with compiled dlls. It includes the C# source code
in the Src folder. This module also includes sample code.
# See Readme file for more details.
------------------------------------------------------------------
* Other names and brands may be claimed as the property of others.

View File

@ -1,137 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (C) 2023 Intel Corporation
//
// File: ProgramInput.cs
//
// Contents: Program input getting functions.
//
//----------------------------------------------------------------------------
using Newtonsoft.Json;
using System.IO;
using Intel.Manageability;
using System.Security;
using System;
namespace Common.Utils
{
public static class ProgramInput
{
#region Consts
private const string sampleArgsFileName = "SampleArgs.json";
private const string defaultSampleArgsPath = @"..\..\..\..\Common\";
private const string fallBackSampleArgsPath = @"..\..\..\..\..\..\Common\Utils\C#\";
#endregion
#region Enum
public enum PASSWORD_TYPE
{
AMT_USER,
PROXY,
REDIRECTION_PROXY
}
#endregion
#region Public Static Functions
public static ConnectionInfoEX DeserializeJsonToStruct(string jsonPath = null)
{
// config location = input;
if (jsonPath == null)
{
// config location = working directory;
jsonPath = Path.Combine(Directory.GetCurrentDirectory(), sampleArgsFileName);
if (!File.Exists(jsonPath))
{
// location = ..\..\..\..\Common\
jsonPath = Path.GetFullPath(Path.Combine(defaultSampleArgsPath, sampleArgsFileName));
if (!File.Exists(jsonPath))
{
// location = ..\..\..\..\..\..\Common\Utils\C#\
jsonPath = Path.GetFullPath(Path.Combine(fallBackSampleArgsPath, sampleArgsFileName));
}
}
}
if (!File.Exists(jsonPath))
{
throw new IOException($"The file {jsonPath} does not exist.");
}
Console.WriteLine($"Loading config file from: {jsonPath}");
string json = File.ReadAllText(jsonPath);
ConnectionInfoEX connection;
try
{
connection = JsonConvert.DeserializeObject<ConnectionInfoEX>(json);
}
catch (JsonReaderException e)
{
throw new IOException(e.Message);
}
//check if Json has UserName
if (connection?.UserName != null)
{
connection.Password = PasswordPrompt(PASSWORD_TYPE.AMT_USER.ToString());
}
//check if Proxy param was provided
if (connection?.Proxy != null)
{
connection.Proxy.Password = PasswordPrompt(PASSWORD_TYPE.PROXY.ToString());
}
//check if RedirectionProxy param was provided
if (connection?.RedirectionProxy != null)
{
connection.RedirectionProxy.Password = PasswordPrompt(PASSWORD_TYPE.REDIRECTION_PROXY.ToString());
}
return connection;
}
/// <summary>
/// Prompts for Password, does not display the password on the console, and returns a Secure String password
/// </summary>
/// <returns></returns>
public static SecureString PasswordPrompt(string passwordType)
{
SecureString secPass = new SecureString();
Console.WriteLine($"Please enter {passwordType} password:");
ConsoleKeyInfo nextPassKey = Console.ReadKey(true);
while (nextPassKey.Key != ConsoleKey.Enter)
{
if (nextPassKey.Key == ConsoleKey.Backspace)
{
if (secPass.Length > 0)
{
secPass.RemoveAt(secPass.Length - 1);
Console.Write("\b \b");
}
}
else
{
secPass.AppendChar(nextPassKey.KeyChar);
Console.Write('*');
}
nextPassKey = Console.ReadKey(true);
}
secPass.MakeReadOnly();
Console.Write('\n');
return secPass;
}
#endregion
}
}

View File

@ -1,48 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (C) 2023 Intel Corporation
//
// File: SampleArgs.Json
//
// Contents: User input for connection
//
//----------------------------------------------------------------------------
{
"Host": "dut.vprodemo.com",
"UserName": "admin",
"Secure": true,
"Certificate": null,
"Auth": "Digest",
"Proxy": null,
"RedirectionProxy": null,
"Forwarder": null,
"UseDigestMasterPassword": false,
"Timeout": 10000,
"AcceptSelfSignedCertificate": false
/* Struct values can be assigned as the following example:
"Proxy": {
"DropAtEnd": true,
"Host": "proxy.vprodemo.com",
"Port": 10,
"UserName": "admin2"
},
"RedirectionProxy": {
"DropAtEnd": true,
"Host": "redirectionProxy.vprodemo.com",
"Port": 10,
"UserName": "admin2"
},
"Forwarder": {
"Host": "forwarder.vprodemo.com",
"MainPort": 1992,
"RedirectionPort": 1992,
"RfbPort": 1992
}
*/
}

View File

@ -1,192 +0,0 @@
using System;
using System.Runtime.InteropServices;
using System.Security;
using System.Text;
namespace Common.Utils
{
/// <summary>
/// An extension class to handle SecureString conversion
/// </summary>
internal static class SecureStringExtensions
{
public static readonly Encoding ENCODING = Encoding.UTF8;
#region methods
/// <summary>
/// Convert the content of the SecureString as an array of bytes
/// </summary>
/// <param name="password"></param>
/// <returns> A Byte Array representation of a secure string </returns>
public static byte[] ConvertToByteArray(this SecureString password)
{
if (password == null)
{
throw new SecureStringConversionException("Cannot convert a null password");
}
IntPtr stringTempPass = IntPtr.Zero;
string convertedPass;
try
{
stringTempPass = Marshal.SecureStringToGlobalAllocUnicode(password);
convertedPass = Marshal.PtrToStringUni(stringTempPass);
if (convertedPass != null)
return ENCODING.GetBytes(convertedPass);
else
return null;
}
finally
{
Marshal.ZeroFreeGlobalAllocUnicode(stringTempPass);
}
}
/// <summary>
/// Convert the content of a byte array to a secure string
/// </summary>
/// <param name="arrayToConvert"></param>
/// <returns> The representation of the byte array in a secure string </returns>
public static SecureString ConvertByteArrayToSecureString(this byte[] arrayToConvert)
{
IntPtr stringPointer = IntPtr.Zero;
if (arrayToConvert.Length == 0)
throw new ArgumentException("Password is empty");
stringPointer = Marshal.StringToBSTR(ENCODING.GetString(arrayToConvert));
try
{
return ConvertToSecureString(Marshal.PtrToStringBSTR(stringPointer));
}
finally
{
Marshal.ZeroFreeBSTR(stringPointer);
GC.Collect();
}
}
/// <summary>
/// Convert a secure string to a char array
/// </summary>
/// <param name="password"></param>
/// <returns> A representation of the secure string in a char array </returns>
public static char[] ConvertToCharArray(this SecureString password)
{
char[] charArray = new char[password.Length];
IntPtr charPass = IntPtr.Zero;
try
{
charPass = Marshal.SecureStringToCoTaskMemUnicode(password);
Marshal.Copy(charPass, charArray, 0, password.Length);
return charArray;
}
finally
{
if (charPass != IntPtr.Zero)
{
Marshal.ZeroFreeGlobalAllocUnicode(charPass);
}
}
}
/// <summary>
/// Convert a SecureString to string. Used for compliancy with MSFT WINRM DLL
/// </summary>
/// <param name="password"></param>
/// <returns>a string represetation of a secure string </returns>
public static string ConvertToString(this SecureString password)
{
IntPtr stringPointer = IntPtr.Zero;
if (password == null)
throw new ArgumentNullException("Password is empty");
stringPointer = Marshal.SecureStringToBSTR(password);
try
{
return Marshal.PtrToStringBSTR(stringPointer);
}
finally
{
Marshal.ZeroFreeBSTR(stringPointer);
}
}
/// <summary>
/// Convert a String object to SecureString
/// </summary>
/// <param name="password"></param>
/// <returns>A secure string representation of a string object</returns>
public static SecureString ConvertToSecureString(this string password)
{
var securePass = new SecureString();
foreach (var c in password)
securePass.AppendChar(c);
securePass.MakeReadOnly();
return securePass;
}
/// <summary>
/// Compare the value of secure string object
/// </summary>
/// <param name="password"></param>
/// <param name="value"></param>
/// <returns>true/false according to the values equality</returns>
public static bool ValueEquals(this SecureString password, SecureString value)
{
IntPtr passBstr = IntPtr.Zero;
IntPtr valueBstr = IntPtr.Zero;
try
{
passBstr = Marshal.SecureStringToBSTR(password);
valueBstr = Marshal.SecureStringToBSTR(value);
int passLength = Marshal.ReadInt32(passBstr, -4);
int valueLength = Marshal.ReadInt32(valueBstr, -4);
if (passLength != valueLength)
return false;
for (int x = 0; x < passLength; ++x)
{
byte passByte = Marshal.ReadByte(passBstr, x);
byte valueByte = Marshal.ReadByte(valueBstr, x);
if (passByte != valueByte)
return false;
}
return true;
}
finally
{
if (passBstr != IntPtr.Zero)
Marshal.ZeroFreeBSTR(passBstr);
if (valueBstr != IntPtr.Zero)
Marshal.ZeroFreeBSTR(valueBstr);
}
}
}
public class SecureStringConversionException : Exception
{
public SecureStringConversionException()
{
}
public SecureStringConversionException(string message) : base(message)
{
}
public SecureStringConversionException(string message, Exception innerException) : base(message, innerException)
{
}
}
}
#endregion

View File

@ -1,302 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using Intel.Manageability;
using Intel.Manageability.ACL;
using Intel.Manageability.Exceptions;
using System.Security;
namespace ACLSample
{
public static class ACLFunctionality
{
public static void CreateOrUpdateDigestUser(IAMTInstance amt)
{
//------------------------
// Create DigestEntry
//------------------------
List<Realm> realms = new List<Realm>
{
Realm.HardwareAsset,
Realm.Storage
};
// Create SecureString by password.
using (SecureString secureString = new SecureString())
{
foreach (char c in "P@ssw0rd")
secureString.AppendChar(c);
var digestEntry = new DigestEntry("DigestUser", secureString, realms, AccessPermission.Network);
try
{
amt.Config.ACL.CreateOrUpdateDigestUser(digestEntry);
Console.WriteLine("Create digest user completed successfully.");
}
catch (ACLManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} ACLFailure: {2}\n", e.Source, e.Message, e.Failure);
}
catch (ManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1}\n", e.Source, e.Message);
}
}
}
public static void GetAllDigestUsers(IAMTInstance amt)
{
try
{
var digestUsers = amt.Config.ACL.GetAllDigestUsers();
Console.WriteLine("\n DigestUsers Details");
Console.WriteLine(" -------------------");
// Display DigestUser details.
digestUsers.ForEach(e => DisplayDigestUser(e));
}
catch (ACLManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} ACLFailure: {2}\n", e.Source, e.Message, e.Failure);
}
catch (ManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1}\n", e.Source, e.Message);
}
}
public static void GetDigestUser(IAMTInstance amt, string userName)
{
try
{
var digestEntry = amt.Config.ACL.GetDigestUser(userName);
Console.WriteLine("\n DigestUser Details");
// Display DigestUser details.
Console.WriteLine(" ------------------");
DisplayDigestUser(digestEntry);
}
catch (ACLManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} ACLFailure: {2}\n", e.Source, e.Message, e.Failure);
}
catch (ManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1}\n", e.Source, e.Message);
}
}
public static void DeleteDigestUser(IAMTInstance amt, string userNameOrSid)
{
try
{
amt.Config.ACL.DeleteDigestUser(userNameOrSid);
Console.WriteLine("Delete digest user completed successfully.");
}
catch (ACLManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} ACLFailure: {2}\n", e.Source, e.Message, e.Failure);
}
catch (ManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1}\n", e.Source, e.Message);
}
}
public static void CreateOrUpdateKerberosUser(IAMTInstance amt, string userNameOrSid)
{
//------------------------
// Create KerberosEntry
//------------------------
List<Realm> realms = new List<Realm> { Realm.Administration };
KerberosEntry kerberosEntry = new KerberosEntry(userNameOrSid, realms, AccessPermission.Any);
try
{
amt.Config.ACL.CreateOrUpdateKerberosUser(kerberosEntry);
Console.WriteLine("Create kerberos user completed successfully.");
}
catch (ACLManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} ACLFailure: {2}\n", e.Source, e.Message, e.Failure);
}
catch (ManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1}\n", e.Source, e.Message);
}
}
public static void GetAllKerberosUsers(IAMTInstance amt)
{
try
{
var kerberosUsers = amt.Config.ACL.GetAllKerberosUsers();
Console.WriteLine("\n KerberosUsers Details");
Console.WriteLine(" ---------------------");
kerberosUsers.ForEach(e => DisplayKerberosUser(e));
}
catch (ACLManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} ACLFailure: {2}\n", e.Source, e.Message, e.Failure);
}
catch (ManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1}\n", e.Source, e.Message);
}
}
public static void GetKerberosUser(IAMTInstance amt, string userNameOrSid)
{
try
{
// If UserNameOrSid equals to Domain\\UserName calculate the appropriate SID.
var kerberosUser = amt.Config.ACL.GetKerberosUser(userNameOrSid);
Console.WriteLine("\n KerberosUser Details");
Console.WriteLine(" --------------------");
DisplayKerberosUser(kerberosUser);
}
catch (ACLManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} ACLFailure: {2}\n", e.Source, e.Message, e.Failure);
}
catch (ManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1}\n", e.Source, e.Message);
}
}
public static void DeleteKerberosUser(IAMTInstance amt, string userNameOrSid)
{
try
{
amt.Config.ACL.DeleteKerberosUser(userNameOrSid);
Console.WriteLine("Delete kerberos user completed successfully.");
}
catch (ACLManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} ACLFailure: {2}\n", e.Source, e.Message, e.Failure);
}
catch(ManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1}\n", e.Source, e.Message);
}
}
public static void UpdateAdminUser(IAMTInstance amt, string UserName, string password)
{
try
{
// Create SecureString by password.
if (password == null)
{
Console.WriteLine("UpdateAdmin failed with error: Failed to update Admin user. ACLFailor: InvalidPassword");
return;
}
using (SecureString secureString = new SecureString())
{
foreach (char c in password)
secureString.AppendChar(c);
amt.Config.ACL.UpdateAdmin(UserName, secureString);
}
Console.WriteLine("Update admin user completed successfully.");
}
catch (ACLManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} ACLFailor: {2}\n",e.Source ,e.Message, e.Failure);
}
catch(ManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1}\n", e.Source, e.Message);
}
}
public static void GetAdminUser(IAMTInstance amt)
{
try
{
string adminUser = amt.Config.ACL.GetAdminUser();
Console.WriteLine("The name of the admin user is "+adminUser);
}
catch (ACLManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} ACLFailure: {2}\n", e.Source, e.Message, e.Failure);
}
catch (ManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1}\n", e.Source, e.Message);
}
}
public static void DisplayDigestUser(DigestEntry user)
{
Console.WriteLine("\n * Name : " + user.UserName);
// Get description attribute of AccessPermission.
Type type = user.Access.GetType();
MemberInfo[] memInfo = type.GetMember(user.Access.ToString());
object[] attributes = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
string accessPermission = ((DescriptionAttribute)attributes[0]).Description;
Console.WriteLine(" Permission : " + accessPermission);
// Get description attribute of Realms.
Console.Write(" Realms : ");
foreach (Realm realm in user.Realms)
{
if ((uint)realm != 23 && (uint)realm != 22 && (uint)realm != 1)
{
type = realm.GetType();
memInfo = type.GetMember(realm.ToString());
attributes = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
string realmString = ((DescriptionAttribute)attributes[0]).Description;
Console.Write(realmString + ", ");
}
}
Console.Write("\b\b \n");
}
public static void DisplayKerberosUser(KerberosEntry user)
{
Console.WriteLine("\n * SID : " + user.UserNameOrSID);
// Get description attribute of AccessPermission.
Type type = user.Access.GetType();
MemberInfo[] memInfo = type.GetMember(user.Access.ToString());
object[] attributes = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
string accessPermission = ((DescriptionAttribute)attributes[0]).Description;
Console.WriteLine(" Permission : " + accessPermission);
// Get description attribute of Realms.
Console.Write(" Realms : ");
foreach (Realm realm in user.Realms)
{
if ((uint)realm != 23 && (uint)realm != 22 && (uint)realm != 1)
{
type = realm.GetType();
memInfo = type.GetMember(realm.ToString());
attributes = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
string realmString = ((DescriptionAttribute)attributes[0]).Description;
Console.Write(realmString + ", ");
}
}
Console.Write("\b\b \n");
}
}
}

View File

@ -1,29 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
<PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" />
</ItemGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
</Project>

View File

@ -1,95 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 - 2014 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.IO;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using Common.Utils;
using System.Runtime.InteropServices;
namespace ACLSample
{
class Program
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
static void Main(string[] args)
{
// set default dll lookup directory to system
SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32
IAMTInstance amt = null;
ConnectionInfoEX ci = null;
try
{
// Check if JSON path was provided as an argument. If not, default path would be used.
try
{
ci = ProgramInput.DeserializeJsonToStruct(args.Length > 0 ? args[0] : null);
}
catch (IOException e)
{
Console.WriteLine($"Could not read argument file: {e.Message}");
return;
}
amt = AMTInstanceFactory.CreateEX(ci);
}
catch (ManageabilityException e)
{
Console.WriteLine(e.Message);
return;
}
try
{
// Create or update digest user.
ACLFunctionality.CreateOrUpdateDigestUser(amt);
// Get digest user by his name.
ACLFunctionality.GetDigestUser(amt, "DigestUser");
// Get all digest users.
ACLFunctionality.GetAllDigestUsers(amt);
// Delete digest user by his name.
ACLFunctionality.DeleteDigestUser(amt, "DigestUser");
// Create a kerberos user with the user's domain\username.
// The user must already be defined in Active Directory when creating the ACL Kerberos entry.
ACLFunctionality.CreateOrUpdateKerberosUser(amt, "Intel\\KerberosUser");
// Get kerberos user by his Domain\UserName
ACLFunctionality.GetKerberosUser(amt, "Intel\\KerberosUser");
// Get all kerberos users
ACLFunctionality.GetAllKerberosUsers(amt);
// Delete kerberos user by his SID
ACLFunctionality.DeleteKerberosUser(amt, "Intel\\KerberosUser");
// Update Admin user
ACLFunctionality.UpdateAdminUser(amt, "Admin", "p@ssw0rd");
// Get user name of the Admin user
ACLFunctionality.GetAdminUser(amt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
amt?.Dispose();
}
}
}
}

View File

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ACLSample")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Intel Corporation")]
[assembly: AssemblyProduct("ACLSample")]
[assembly: AssemblyCopyright("Copyright © 2020 Intel Corporation")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("102b502a-3a25-4bf5-9b9c-4b1afb2a091f")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,291 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using Intel.Manageability;
using Intel.Manageability.AccessMonitor;
using Intel.Manageability.Exceptions;
namespace AccessMonitorSample
{
public static class AccessMonitorFunctionality
{
private const string ROOT_CERT = @"..\..\RootCert.cer";
private const string LEAF_CERT = @"..\..\LeafCert.p12";
public static void GetAccessMonitorSettings(IAMTInstance amt)
{
try
{
AccessMonitorSettings settings = amt.AccessMonitor.GetAccessMonitorSettings();
PrintSettings(settings);
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
}
public static void GetRegisteredEvents(IAMTInstance amt)
{
try
{
List<EventDetails> registeredEvents = amt.AccessMonitor.GetRegisteredEvents();
PrintEvents(registeredEvents);
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
}
public static void RegisterToLog(IAMTInstance amt, List<EventDetails> eventDetails)
{
try
{
amt.AccessMonitor.RegisterToLog(eventDetails);
Console.WriteLine("Registered to log successfully.");
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
}
public static void UnregisterToLog(IAMTInstance amt, string eventName)
{
try
{
amt.AccessMonitor.UnregisterToLog(eventName);
Console.WriteLine("Unregistered to log successfully.");
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
}
public static void ReadLog(IAMTInstance amt)
{
try
{
string fqdn;
Guid guid;
List<AuditRecord> logRecords = amt.AccessMonitor.ReadLog(out guid, out fqdn);
Console.WriteLine("UUID:{0} FQDN:{1} Log Records:", guid.ToString(), fqdn);
PrintLogRecords(logRecords);
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
}
public static uint LockLog(IAMTInstance amt, LogLockType lockType, int timeOut)
{
try
{
uint lockHandle = amt.AccessMonitor.LockLog(lockType, timeOut);
Console.WriteLine("Locked log successfully.");
return lockHandle;
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
return 0;
}
public static void UnlockLog(IAMTInstance amt, uint lockHandle)
{
try
{
amt.AccessMonitor.UnlockLog(lockHandle);
Console.WriteLine("Unlocked log successfully.");
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
}
public static void ClearLog(IAMTInstance amt)
{
try
{
amt.AccessMonitor.ClearLog();
Console.WriteLine("Cleared log successfully.");
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
}
public static void SetEventStoragePolicy(IAMTInstance amt, EventsStoragePolicy eventsStoragePolicy)
{
try
{
amt.AccessMonitor.SetEventsStoragePolicy(eventsStoragePolicy);
Console.WriteLine("Events storage policy was set successfully.");
}
catch (NotSupportedException e)
{
Console.WriteLine("SetEventStoragePolicy failed with error: {0} \n", e.Message);
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
}
public static void SetEventStoragePolicy(IAMTInstance amt, EventsStoragePolicy eventsStoragePolicy, int keepDays)
{
try
{
amt.AccessMonitor.SetEventsStoragePolicy(eventsStoragePolicy, keepDays);
Console.WriteLine("Events storage policy was set successfully.");
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
}
public static void SetLogSignature(IAMTInstance amt)
{
try
{
// Set log signature with one certificate that contains public key and private key:
using (X509Certificate2 x509Certificate2 = new X509Certificate2(LEAF_CERT, "q", X509KeyStorageFlags.Exportable))
{
amt.AccessMonitor.SetLogSignature(x509Certificate2);
Console.WriteLine("Set log signature passed successfully.");
}
// Set log signature with chain of trusted certificates:
// 1. Create X509Chain object.
// 2. Set to X509Chain object additional certificates store from which the chain will be built.
// 3. Build certificates chain.
// 4. Set Access Monitor log signature.
using (X509Certificate2 rootCertificate = new X509Certificate2(ROOT_CERT))
using (X509Certificate2 leafCertificate = new X509Certificate2(LEAF_CERT, "q", X509KeyStorageFlags.Exportable))
using (X509Chain trustedChain = new X509Chain())
{
trustedChain.ChainPolicy.ExtraStore.Add(rootCertificate);
trustedChain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags;
trustedChain.Build(leafCertificate);
amt.AccessMonitor.SetLogSignature(trustedChain);
Console.WriteLine("Set log signature with certificates chain passed successfully.");
}
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
catch (CryptographicException ex)
{
Console.WriteLine(ex.Message);
}
}
public static void ReadLogSignature(IAMTInstance amt)
{
try
{
X509Chain amtCertificates;
Guid guid;
string fqdn;
List<AuditRecord> auditRecords = amt.AccessMonitor.ReadLogSignature(out amtCertificates, out guid, out fqdn, SignatureMechanism.SHA2_256);
Console.WriteLine("The log signature was read successfully, but it is still necessary to verify the trustworthiness of the AMT certificates chain used to sign the log......");
Console.WriteLine("Guid:{0} FQDN:{1} Log Records:", guid, fqdn);
PrintLogRecords(auditRecords);
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
}
public static void ReadLogAuthentication(IAMTInstance amt)
{
try
{
using (X509Certificate2 trustedCertificate = new X509Certificate2(ROOT_CERT))
{
Guid guid;
string fqdn;
// Read the log and check the signature againt the trustedCertificate.
List<AuditRecord> auditRecords = amt.AccessMonitor.ReadLogAuthentication(trustedCertificate, out guid, out fqdn, SignatureMechanism.SHA2_256);
Console.WriteLine("The log was read successfully. The authentication of the trusted certificate against AMT certificates passed.");
Console.WriteLine("Guid:{0} FQDN:{1} Log Records:", guid, fqdn);
PrintLogRecords(auditRecords);
}
}
catch (AccessMonitorManageabilityException e)
{
Console.WriteLine("{0} failed with error: {1} AccessMonitorFailure: {2}\n", e.Source, e.Message, e.Failure);
}
catch (CryptographicException ex)
{
Console.WriteLine(ex.Message);
}
}
#region Helper Methods
private static void PrintLogRecords(List<AuditRecord> logRecords)
{
logRecords.ForEach(e =>
{
Console.WriteLine(string.Format("\t* Event Name : {0}", e.EventName));
Console.WriteLine(string.Format("\t Event Trigger : {0}", e.EventTrigger));
Console.WriteLine(string.Format("\t UserName Or SID : {0}", e.UserNameOrSID));
Console.WriteLine(string.Format("\t Host Name : {0}", e.HostName));
Console.WriteLine(string.Format("\t Domain : {0}", e.Domain));
Console.WriteLine(string.Format("\t Time Stamp : {0}", e.TimeStamp));
Console.WriteLine();
});
}
private static void PrintEvents(List<EventDetails> registeredEvents)
{
Console.WriteLine("Registered Events:");
registeredEvents.ForEach(e =>
{
Console.WriteLine(string.Format("\t* Event Name : {0}", e.EventName));
Console.WriteLine(string.Format("\t Event Policy: {0}", e.EventPolicy));
Console.WriteLine();
});
}
private static void PrintSettings(AccessMonitorSettings settings)
{
Console.WriteLine("Access Monitor Settings:");
Console.WriteLine("========================");
Console.WriteLine(string.Format("\tEnabled State : {0}", settings.EnabledState));
Console.WriteLine(string.Format("\tAudit State : {0}", settings.LogState));
Console.WriteLine(string.Format("\tPercentage Log Free : {0}", settings.PercentageFree));
Console.WriteLine(string.Format("\tRecords Number : {0}", settings.CurrentRecordsNumber));
Console.WriteLine(string.Format("\tEvents Storage Policy: {0}", settings.EventsStoragePolicy));
if (settings.EventsStoragePolicy == EventsStoragePolicy.RestrictedRollOver)
Console.WriteLine(string.Format("\tMin Days To Keep : {0}", settings.MinDaysToKeep));
Console.WriteLine(string.Format("\tTime Of Last Record : {0}", settings.TimeOfLastRecord));
Console.WriteLine(string.Format("\tMax Allowed Auditors : {0}", settings.MaxAllowedAuditors));
}
#endregion
}
}

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
</ItemGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
</Project>

View File

@ -1,98 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 - 2014 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.IO;
using Intel.Manageability;
using Intel.Manageability.AccessMonitor;
using Intel.Manageability.Exceptions;
using Common.Utils;
using System.Runtime.InteropServices;
namespace AccessMonitorSample
{
class Program
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
static void Main(string[] args)
{
// set default dll lookup directory to system
SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32
IAMTInstance amt = null;
ConnectionInfoEX ci = null;
try
{
// Check if JSON path was provided as an argument. If not, default path would be used.
try
{
ci = ProgramInput.DeserializeJsonToStruct(args.Length > 0 ? args[0] : null);
}
catch (IOException e)
{
Console.WriteLine($"Could not read argument file: {e.Message}");
return;
}
amt = AMTInstanceFactory.CreateEX(ci);
}
catch (ManageabilityException e)
{
Console.WriteLine(e.Message);
return;
}
try
{
AccessMonitorFunctionality.SetLogSignature(amt);
AccessMonitorFunctionality.GetAccessMonitorSettings(amt);
AccessMonitorFunctionality.SetEventStoragePolicy(amt, EventsStoragePolicy.NoRollOver);
AccessMonitorFunctionality.GetRegisteredEvents(amt);
// Register AuditEvents.NetworkTime.AMTTimeSet event.
List<EventDetails> eventsDetails = new List<EventDetails>();
eventsDetails.Add(new EventDetails(AuditEvents.NetworkTime.AMTTimeSet, EventPolicy.None));
AccessMonitorFunctionality.RegisterToLog(amt, eventsDetails);
// Create AMTTimeSet event record in the log.
amt.TimeSynchronization.SetUtcNetworkTime();
AccessMonitorFunctionality.ReadLog(amt);
AccessMonitorFunctionality.ReadLogSignature(amt);
AccessMonitorFunctionality.ReadLogAuthentication(amt);
AccessMonitorFunctionality.UnregisterToLog(amt, AuditEvents.NetworkTime.AMTTimeSet);
AccessMonitorFunctionality.ClearLog(amt);
uint lockHandle = AccessMonitorFunctionality.LockLog(amt, LogLockType.UnprovisioningLock, 30);
// Perform unprovisioning AMT....
AccessMonitorFunctionality.UnlockLog(amt, lockHandle);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
amt?.Dispose();
}
}
}
}

View File

@ -1,35 +0,0 @@
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("AccessMonitorSample")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Intel Corporation")]
[assembly: AssemblyProduct("AccessMonitorSample")]
[assembly: AssemblyCopyright("Copyright © 2020 Intel Corporation")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("6efe2964-4077-44ae-942a-16a76c1b156d")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,19 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIDEzCCAfugAwIBAgIJAPM8vkQAJQqRMA0GCSqGSIb3DQEBBQUAMDgxGzAZBgNV
BAMTEkRlbW8gUm9vdCBDQSBzZXZlcjELMAkGA1UEBhMCSUwxDDAKBgNVBAsTA0ZU
TDAeFw0xMzA0MzAwODQzMTdaFw0xNDA0MzAwODQzMTdaMDgxGzAZBgNVBAMTEkRl
bW8gUm9vdCBDQSBzZXZlcjELMAkGA1UEBhMCSUwxDDAKBgNVBAsTA0ZUTDCCASIw
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALDlTPkkMYZ4NLigO9GdEr9S2jPI
0eBKiPpIWjr3nESvNsweNMhhZYD1ZY3EYpExGi7NZM0hiQ0numpCT9TKKlqloh2C
1WN/94hilmx/q07AL5ghbU9IW/m/wljnpSw3ogK/25T9FlyFkU+5HXO4lwM9tDFJ
lRFZgioNzE8r5yEFzLqrGzuMtqbOplElJPwq2GMYKZUYY5x5pGdcBNynpAy8n7FZ
ytXvhr6YhTt/Cy2kS8FUqtLyLQVx5kiPAZL2mt7O1vG8/z8fIngtlo3qlFRKZ2vT
/RZ+iBdYIyk7jQ1ARHANDRRMNn1ZFWyz9/6UxWUPJnXIJrLmY4Xil4V2PCcCAwEA
AaMgMB4wDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAbYwDQYJKoZIhvcNAQEF
BQADggEBAKW1f7UZefJtoV8KocV60z71D+VBM/pZSPbISIoiu4BjhY9IVitJaUhF
UmCRc6htN4f/SPOeeUB3FNVFptcEzMXo2sydUCgIM++Jb/Nn7TvBLwX40+VkF80K
FXJFG6rFFXMW1EXAuvdFEjWGAsfAIg0mtInS9+MzBsiyG1Bg1JOdZYTAT12mCpe7
PKalJMOXQChxP2Dqz1ABeCl9UXG9+Mjj8tJQz/06tP9gQCI3BxvWNVNV9gRXhGT6
jiSGRIKeiZMoqU2mFO2MDHgtu/Fp+6G3180NdeHaynaql3cxlPMHl9jGxcrkl7uH
eEqQ6OuFQqtWaxDICdZHyvezLf2RLjw=
-----END CERTIFICATE-----

View File

@ -1,88 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using Intel.Manageability;
using Intel.Manageability.AgentPresence;
using Intel.Manageability.Exceptions;
namespace AgentPresenceLocalSample
{
static class AgentPresenceLocalFunctionality
{
public static void CreateOrUpdateAgent(IAMTInstance amt, string agentName)
{
// --------------------
// Create Agent
// --------------------
var actions = new List<AgentAction>
{
new AgentAction(AgentState.NotStarted, AgentState.Running, true, ActionSystemDefense.DeactivatePolicy,
false),
new AgentAction(AgentState.Stopped, AgentState.Expired | AgentState.Stopped, false,
ActionSystemDefense.ActivatePolicy, false)
};
Console.Write("Enter agent startup timeout in seconds (default is 120): ");
if (!ushort.TryParse(Console.ReadLine(), out var startupTimer))
startupTimer = 120;
Console.WriteLine();
Console.Write("Enter agent heartbeat timeout in seconds (default is 120): ");
if (!ushort.TryParse(Console.ReadLine(), out var intervalTimer))
intervalTimer = 120;
Console.WriteLine();
// Create policy and pass the action list as a parameter
Agent agent = new Agent(agentName, actions, startupTimer, intervalTimer);
// -------------------------------------------
// Add the agent to the Intel AMT instance
// -------------------------------------------
try
{
amt.AgentPresence.Remote.CreateOrUpdateAgent(agent);
Console.WriteLine("Create agent completed successfully.");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Create agent failed with exception: " + ex.Message);
}
}
public static void Start(IAMTInstance amt, string applicationName)
{
CreateOrUpdateAgent(amt, applicationName);
Console.WriteLine("Starting presence. The heartbeats will block this program's thread.");
Console.WriteLine("For an unblocking solution use any of the other agent presence samples.");
try
{
amt.AgentPresence.Local.StartPresence(applicationName);
Console.WriteLine("Start presence completed successfully.");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Start presence failed with exception: " + ex.Message);
}
}
public static void Shutdown(IAMTInstance amt, string applicationName)
{
try
{
amt.AgentPresence.Local.ShutdownPresence(applicationName);
Console.WriteLine("Shutdown presence completed successfully.");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Shutdown presence failed with exception: " + ex.Message);
}
}
}
}

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
</ItemGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
</Project>

View File

@ -1,62 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.IO;
using System.Runtime.InteropServices;
using Common.Utils;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
namespace AgentPresenceLocalSample
{
class Program
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
static void Main(string[] args)
{
// set default dll lookup directory to system
SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32
IAMTInstance amt = null;
ConnectionInfoEX ci = null;
try
{
// Check if JSON path was provided as an argument. If not, default path would be used.
try
{
ci = ProgramInput.DeserializeJsonToStruct(args.Length > 0 ? args[0] : null);
}
catch (IOException e)
{
Console.WriteLine($"Could not read argument file: {e.Message}");
return;
}
amt = AMTInstanceFactory.CreateEX(ci);
}
catch (ManageabilityException e)
{
Console.WriteLine(e.Message);
return;
}
// Start Presence.
AgentPresenceLocalFunctionality.Start(amt, "MyAgent");
Console.WriteLine("Press enter to stop the agent");
Console.ReadLine();
// Shutdown Presence.
AgentPresenceLocalFunctionality.Shutdown(amt, "MyAgent");
}
}
}

View File

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("AgentPresenceLocalSample")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("AgentPresenceLocalSample")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("a9b8c01f-6f33-416e-a033-b57003ea315a")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,107 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 - 2012 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using Intel.Manageability.Exceptions;
using Intel.Manageability;
using Intel.Manageability.AgentPresence;
namespace AgentPresenceLocalSample1
{
static class AgentPresenceLocalFunctionality1
{
public static void CreateOrUpdateAgent(IAMTInstance amt, string agentName)
{
// --------------------
// Create Agent
// --------------------
var actions = new List<AgentAction>
{
new AgentAction(AgentState.NotStarted, AgentState.Running, true, ActionSystemDefense.DeactivatePolicy,
false),
new AgentAction(AgentState.Stopped, AgentState.Expired | AgentState.Stopped, false,
ActionSystemDefense.ActivatePolicy, false)
};
Console.Write("Enter agent startup timeout in seconds (default is 120): ");
if (!ushort.TryParse(Console.ReadLine(), out var startupTimer))
startupTimer = 120;
Console.WriteLine();
Console.Write("Enter agent heartbeat timeout in seconds (default is 120): ");
if (!ushort.TryParse(Console.ReadLine(), out var intervalTimer))
intervalTimer = 120;
Console.WriteLine();
// Create policy and pass the action list as a parameter
Agent agent = new Agent(agentName, actions, startupTimer, intervalTimer);
// -------------------------------------------
// Add the agent to the Intel AMT instance
// -------------------------------------------
try
{
amt.AgentPresence.Remote.CreateOrUpdateAgent(agent);
Console.WriteLine("Create agent completed successfully.");
}
catch (ManageabilityException ex)
{
if ((ex.InnerException is AgentPresenceManageabilityException ex1) && (ex1.Failure == AgentPresenceFailure.DuplicateAgent))
{
// Ignore the error, agent already exists
Console.WriteLine("Agent already exists");
return;
}
throw;
}
}
public static void Start(IAMTInstance amt, string applicationName)
{
// To start an agent, do the following:
// 1. Create the Agent by invoking IAMTInstance.AgentPresence.Remote.CreateOrUpdateAgent(string)
// with AgentName (see AgentPresenceRemoteSample sample).
// 2. From AMT - local, register to watchdog and send heartbeats by invoking amt.AgentPresence.Local.StartPresence().
// When the StartPresence function sends heartbeats, it activates an endless loop that sends a heartbeat each agent.TimeoutInterval,
// So, to avoid getting stuck on the StartPresence function, perform it in another thread.
CreateOrUpdateAgent(amt, applicationName);
ThreadPool.QueueUserWorkItem(agent =>
{
try
{
Console.WriteLine("Start presence: " + applicationName.ToString());
amt.AgentPresence.Local.StartPresence(applicationName);
}
catch (ManageabilityException ex)
{
Console.WriteLine("Start presence failed with exception: " + ex.Message);
}
});
Console.WriteLine(applicationName + " is sending hearbeats, to stop press any key....");
Console.ReadKey();
}
public static void Shutdown(IAMTInstance amt, string applicationName)
{
try
{
amt.AgentPresence.Local.ShutdownPresence(applicationName);
Console.WriteLine("Shutdown " + applicationName + " completed successfully.");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Shutdown " + applicationName + " failed with exception: " + ex.Message);
}
}
}
}

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
</ItemGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
</Project>

View File

@ -1,75 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 - 2014 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using HLAPI;
using Common.Utils;
using System.IO;
using System.Runtime.InteropServices;
namespace AgentPresenceLocalSample1
{
class Program
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
static void Main(string[] args)
{
// set default dll lookup directory to system
SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32
IAMTInstance amt = null;
ConnectionInfoEX ci = null;
try
{
// Check if JSON path was provided as an argument. If not, default path would be used.
try
{
ci = ProgramInput.DeserializeJsonToStruct(args.Length > 0 ? args[0] : null);
}
catch (IOException e)
{
Console.WriteLine($"Could not read argument file: {e.Message}");
return;
}
amt = AMTInstanceFactory.CreateEX(ci);
}
catch (ManageabilityException e)
{
Console.WriteLine(e.Message);
return;
}
try
{
// StartPresence causes the agent to start sends heartbeats.
AgentPresenceLocalFunctionality1.Start(amt, "Agent1");
// ShutdownPresence causes the StartPresence to stop sending heartbeats. The thread that performs it was finished
// and the agent's state was changed to "stop".
AgentPresenceLocalFunctionality1.Shutdown(amt, "Agent1");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
amt?.Dispose();
}
}
}
}

View File

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("AgentPresenceLocalSample1")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Intel Corporation")]
[assembly: AssemblyProduct("AgentPresenceLocalSample1")]
[assembly: AssemblyCopyright("Copyright © 2020 Intel Corporation")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("68f024e8-5635-4938-9bd0-8ff2e61f57ed")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,108 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 - 2012 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using Intel.Manageability.Exceptions;
using Intel.Manageability;
using Intel.Manageability.AgentPresence;
namespace AgentPresenceLocalSample2
{
static class AgentPresenceLocalFunctionality2
{
public static void CreateOrUpdateAgent(IAMTInstance amt, string agentName)
{
// --------------------
// Create Agent
// --------------------
var actions = new List<AgentAction>
{
new AgentAction(AgentState.NotStarted, AgentState.Running, true, ActionSystemDefense.DeactivatePolicy,
false),
new AgentAction(AgentState.Stopped, AgentState.Expired | AgentState.Stopped, false,
ActionSystemDefense.ActivatePolicy, false)
};
Console.Write("Enter agent startup timeout in seconds (default is 120): ");
if (!ushort.TryParse(Console.ReadLine(), out var startupTimer))
startupTimer = 120;
Console.WriteLine();
Console.Write("Enter agent heartbeat timeout in seconds (default is 120): ");
if (!ushort.TryParse(Console.ReadLine(), out var intervalTimer))
intervalTimer = 120;
Console.WriteLine();
// Create policy and pass the action list as a parameter
Agent agent = new Agent(agentName, actions, startupTimer, intervalTimer);
// -------------------------------------------
// Add the agent to the Intel AMT instance
// -------------------------------------------
try
{
amt.AgentPresence.Remote.CreateOrUpdateAgent(agent);
Console.WriteLine("Create agent completed successfully.");
}
catch (ManageabilityException ex)
{
if ((ex.InnerException is AgentPresenceManageabilityException ex1) && (ex1.Failure == AgentPresenceFailure.DuplicateAgent))
{
// Ignore the error, agent already exists
Console.WriteLine("Agent already exists");
return;
}
throw ex;
}
}
public static void Start(IAMTInstance amt, string applicationName)
{
// To start an agent, do the following:
// 1. Create the Agent by invoking IAMTInstance.AgentPresence.Remote.CreateOrUpdateAgent(string)
// with AgentName (see AgentPresenceRemoteSample sample).
// 2. From AMT - local, register to watchdog and send heartbeats by invoking amt.AgentPresence.Local.StartPresence().
// When the StartPresence function sends heartbeats, it activates an endless loop that sends a heartbeat each agent.TimeoutInterval,
// So, to avoid getting stuck on the StartPresence function, perform it in another thread.
CreateOrUpdateAgent(amt, applicationName);
ThreadPool.QueueUserWorkItem(agent =>
{
try
{
Console.WriteLine("Start presence: " + applicationName.ToString());
amt.AgentPresence.Local.StartPresence(applicationName);
}
catch (ManageabilityException ex)
{
Console.WriteLine("Start presence failed with exception: " + ex.Message);
}
});
Console.WriteLine(applicationName + " is sending hearbeats, to stop press any key....");
Console.ReadKey();
}
public static void Expire(IAMTInstance amt, string applicationName)
{
try
{
amt.AgentPresence.Local.ExpirePresence(applicationName);
Console.WriteLine("Expire " + applicationName + " completed successfully.");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Expire " + applicationName + " failed with exception: " + ex.Message);
}
}
}
}

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
</ItemGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
</Project>

View File

@ -1,74 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 - 2014 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using HLAPI;
using Common.Utils;
using System.IO;
using System.Runtime.InteropServices;
namespace AgentPresenceLocalSample2
{
class Program
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
static void Main(string[] args)
{
// set default dll lookup directory to system
SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32
IAMTInstance amt = null;
ConnectionInfoEX ci = null;
try
{
// Check if JSON path was provided as an argument. If not, default path would be used.
try
{
ci = ProgramInput.DeserializeJsonToStruct(args.Length > 0 ? args[0] : null);
}
catch (IOException e)
{
Console.WriteLine($"Could not read argument file: {e.Message}");
return;
}
amt = AMTInstanceFactory.CreateEX(ci);
}
catch (ManageabilityException e)
{
ci?.Dispose();
Console.WriteLine(e.Message);
return;
}
try
{
// StartPresence causes the agent to start sends heartbeats.
AgentPresenceLocalFunctionality2.Start(amt, "Agent1");
// ExpirePresence causes the StartPresence to stop sending heartbeats. The thread that performs it was finished
// and the agent's state was changed to "expire".
AgentPresenceLocalFunctionality2.Expire(amt, "Agent1");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
amt?.Dispose();
}
}
}
}

View File

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("AgentPresenceLocalSample2")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Intel Corporation")]
[assembly: AssemblyProduct("AgentPresenceLocalSample2")]
[assembly: AssemblyCopyright("Copyright © 2020 Intel Corporation")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("60e221c1-b614-4d5d-85a8-f1a4bd4775e7")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,341 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 - 2015 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using Intel.Manageability;
using Intel.Manageability.AgentPresence;
using Intel.Manageability.SystemDefense;
using System.Collections.ObjectModel;
using Intel.Manageability.Exceptions;
using System.Collections;
namespace AgentPresenceRemoteSample
{
static class AgentPresenceRemoteFunctionality
{
public static void CreateOrUpdateAgent(IAMTInstance amt, string agentName)
{
// --------------------
// Create Agent
// --------------------
var actions = new List<AgentAction>
{
new AgentAction(AgentState.NotStarted, AgentState.Running, true, ActionSystemDefense.DeactivatePolicy,
false),
new AgentAction(AgentState.Stopped, AgentState.Expired | AgentState.Stopped, false,
ActionSystemDefense.ActivatePolicy, false)
};
Console.Write("Enter agent startup timeout in seconds (default is 120): ");
if (!ushort.TryParse(Console.ReadLine(), out var startupTimer))
startupTimer = 120;
Console.WriteLine();
Console.Write("Enter agent heartbeat timeout in seconds (default is 120): ");
if (!ushort.TryParse(Console.ReadLine(), out var intervalTimer))
intervalTimer = 120;
Console.WriteLine();
// Create policy and pass the action list as a parameter
Agent agent = new Agent(agentName, actions, startupTimer, intervalTimer);
// -------------------------------------------
// Add the agent to the Intel AMT instance
// -------------------------------------------
try
{
amt.AgentPresence.Remote.CreateOrUpdateAgent(agent);
Console.WriteLine("Create agent completed successfully.");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Create agent failed with exception: " + ex.Message);
}
}
public static void DisplayAgents(IAMTInstance amt)
{
try
{
// Retrieve all agents
List<Agent> agents = amt.AgentPresence.Remote.GetAllAgents();
Console.WriteLine("Agents:");
Console.WriteLine("-------");
// Go over the agents and display their capabilities
IEnumerator agentEnumerator = agents.GetEnumerator();
while (agentEnumerator.MoveNext())
{
PrintAgentContent(agentEnumerator.Current as Agent);
}
}
catch (ManageabilityException ex)
{
Console.WriteLine("Display agents failed with exception: " + ex.Message);
}
}
public static void GetAgent(IAMTInstance amt, string agentName)
{
try
{
// Retrieve all agents
Agent agent = amt.AgentPresence.Remote.GetAgent(agentName);
Console.WriteLine("\nAgent:");
Console.WriteLine("-------");
PrintAgentContent(agent);
}
catch (ManageabilityException ex)
{
Console.WriteLine("Display agent failed with exception: " + ex.Message);
}
}
public static void DisplayCapabalities(IAMTInstance amt)
{
// Display general agent presence capabilities
AgentPresenceCapabilities generalCapabilities = amt.AgentPresence.Remote.GetGeneralCapabilities();
Console.WriteLine("\nGeneral capabilities:");
Console.WriteLine("\tMax Supported Agents: {0} ", generalCapabilities.MaxTotalAgents);
Console.WriteLine("\tMax Supported Actions: {0} ", generalCapabilities.MaxTotalActions);
Console.WriteLine("\tMax Supported EAC Agents: {0} ", generalCapabilities.MaxToatalEacAgents);
Console.WriteLine("\tMin Supported Actions: {0} ", generalCapabilities.MinAgentActions);
}
public static void DeleteAgent(IAMTInstance amt, string agentName)
{
try
{
amt.AgentPresence.Remote.DeleteAgent(agentName);
Console.WriteLine("Delete agent completed successfully.");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Delete agent failed with exception: " + ex.Message);
}
}
public static void DeleteAllAgent(IAMTInstance amt)
{
try
{
amt.AgentPresence.Remote.DeleteAllAgents();
Console.WriteLine("Delete all agents completed successfully.");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Delete agents failed with exception: " + ex.Message);
}
}
public static void SetAgentPresencePolicy(IAMTInstance amt)
{
Collection<Policy> policies = new Collection<Policy>();
Collection<UserFilter> filters = new Collection<UserFilter>();
// ----------------------
// Create Policy #1
// ----------------------
// Prepare filter list (create ipfilter for block ipv4 packets and ethernet filter for rarp packets)
IPFilter ipFilter = FilterFactory.CreateIPFilter("ipFilter", FilterType.Drop, FilterDirection.Both, true, IPVersion.IPv4);
EthernetFilter etherFilter = FilterFactory.CreateEthernetFilter("etherFilter", FilterType.StatisticsAndDrop, FilterDirection.Incoming, false, (ushort)EtherTypes.ETH_TYPE_RARP);
// Add the filters we just created to the filter list
filters.Add(ipFilter);
filters.Add(etherFilter);
// Create policy and pass the filters list as a parameter
policies.Add(new Policy("MyPolicy", 10, 150, filters));
// Add the policy to the Intel AMT instance
try
{
amt.SystemDefense.PolicyStore.CreateOrUpdatePolicies(policies);
Console.WriteLine("Create policy completed successfully.");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Create policy failed with exception: " + ex.Message);
}
try
{
// Set the policy to agent presence on the supported interface
amt.AgentPresence.Remote.SetSystemDefensePolicy("MyPolicy", Intel.Manageability.AgentPresence.NetworkInterface.Wired);
Console.WriteLine("Set the policy to Agent Presence completed successfully.");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Set the policy to Agent Presence failed with exception: " + ex.Message);
}
}
public static void GetAgentPresencePolicy(IAMTInstance amt)
{
try
{
// Get the policy from agent presence on the supported interface
Policy policy = amt.AgentPresence.Remote.GetSystemDefensePolicy(Intel.Manageability.AgentPresence.NetworkInterface.Wired);
Console.WriteLine("\nAgent Presence Policy:");
Console.WriteLine("----------------------");
PrintAgentPolicy(policy);
}
catch (ManageabilityException ex)
{
Console.WriteLine("Get the policy from Agent Presence failed with exception: " + ex.Message);
}
}
public static void RemoveAgentPresencePolicy(IAMTInstance amt)
{
try
{
// Remove the policy from agent presence on the supported interface
amt.AgentPresence.Remote.RemoveSystemDefensePolicy(Intel.Manageability.AgentPresence.NetworkInterface.Wired);
Console.WriteLine("Remove the policy from Agent Presence completed successfully.");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Remove the policy from Agent Presence failed with exception: " + ex.Message);
}
}
public static void SetExpirationActionOnAgentPresenceWatchDog(IAMTInstance amt,string agentName)
{
try
{
//set expiration action properties
WatchDogExpirationAction expirationAction = new WatchDogExpirationAction(ExpirationAction.Reboot, ExpirationAction.Reboot, 60, true);
amt.AgentPresence.Remote.SetExpirationAction(expirationAction);
//apply expiration action on specific agent
amt.AgentPresence.Remote.ApplyActionOnWatchDog(agentName, true);
Console.WriteLine("Set expiration action completed successfully.");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Set expiration action failed with exception: " + ex.Message);
}
}
private static void PrintAgentContent(Agent agent)
{
Console.WriteLine("Agent Name: {0} \n", agent.ApplicationName);
Console.WriteLine("\tDevice ID: {0} ", agent.DeviceID);
Console.WriteLine("\tState: {0} ", agent.CurrentState);
Console.WriteLine("\tStartup Interval: {0} ", agent.StartupInterval);
Console.WriteLine("\tTimeout Interval: {0} ", agent.TimeoutInterval);
// Go over the actions and display their capabilities
IEnumerator actionEnumerator = agent.Actions.GetEnumerator();
Console.WriteLine("Actions:");
while (actionEnumerator.MoveNext())
{
var action = actionEnumerator.Current as AgentAction;
if (action == null)
{
Console.WriteLine("\tError: Failed to convert action to AgentAction");
break;
}
PrintAction(actionEnumerator.Current as AgentAction);
}
}
private static void PrintAction(AgentAction action)
{
Console.WriteLine("\n\t* Old State: {0} ", action.OldState);
Console.WriteLine("\t New State: {0} ", action.NewState);
Console.WriteLine("\t Create Event: {0} ", action.EventOnTransition);
Console.WriteLine("\t System Defense Action: {0} ", action.ActionSystemDefense);
Console.WriteLine("\t EAC Action: {0} \n", action.ActionEAC);
}
private static void PrintAgentPolicy(Policy policy)
{
Console.WriteLine("Policy Name: {0} ", policy.Name);
Console.WriteLine("\tPrecedence: {0} ", policy.Precedence);
Console.WriteLine("\tantiSpoofingSupport: {0} ", policy.antiSpoofingSupport);
Console.WriteLine("\tTimeout: {0} ", policy.Timeout);
Console.WriteLine("\tTx filter:\n\t\tDefaultCount: {0}\n\t\tDefaultDrop: {1}\n\t\tDefaultMatchEvent: {2}", policy.TxFilter.DefaultCount, policy.TxFilter.DefaultDrop, policy.TxFilter.DefaultMatchEvent);
Console.WriteLine("\tRx filter:\n\t\tDefaultCount: {0}\n\t\tDefaultDrop: {1}\n\t\tDefaultMatchEvent: {2}", policy.RxFilter.DefaultCount, policy.RxFilter.DefaultDrop, policy.RxFilter.DefaultMatchEvent);
// Go over the filters and display their capabilities
IEnumerator filterEnumerator = policy.Filters.GetEnumerator();
while (filterEnumerator.MoveNext())
{
Filter curFilter = filterEnumerator.Current as Filter;
if (curFilter is IPFilter)
{
PrintIPFilter(curFilter as IPFilter);
}
else if (curFilter is EthernetFilter)
{
PrintEthernetFilter(curFilter as EthernetFilter);
}
}
}
private static void PrintEthernetFilter(EthernetFilter ethernetFilter)
{
Console.WriteLine("\tFilter Name: {0} ", ethernetFilter.Name);
Console.WriteLine("\t\tFilter Direction: {0}", ethernetFilter.Direction.ToString());
Console.WriteLine("\t\tCreate Event: {0}", ethernetFilter.CreateEvent);
Console.WriteLine("\t\tFilter Profile: {0}", ethernetFilter.Profile.ToString());
if (ethernetFilter.Profile == FilterType.RateLimit)
Console.WriteLine("\t\tEvents Per Second: {0}", ethernetFilter.EventsPerSecond);
Console.WriteLine("\t\tProtocol ID: {0}", ethernetFilter.ProtocolID);
}
private static void PrintIPFilter(IPFilter ipFilter)
{
Console.WriteLine("\tFilter Name: {0} ", ipFilter.Name);
Console.WriteLine("\t\tFilter Direction: {0}", ipFilter.Direction.ToString());
Console.WriteLine("\t\tCreate Event: {0}", ipFilter.CreateEvent);
Console.WriteLine("\t\tFilter Profile: {0}", ipFilter.Profile.ToString());
if (ipFilter.Profile == FilterType.RateLimit)
Console.WriteLine("\t\tEvents Per Second: {0}", ipFilter.EventsPerSecond);
Console.WriteLine("\t\tIP Version: {0}", ipFilter.IpVersion.ToString());
if (ipFilter.IPAddress != null)
{
Console.WriteLine("\t\tIP Header Address: {0}", ipFilter.IPHeaderAddress.ToString());
Console.WriteLine("\t\tIP Address: {0}", ipFilter.IPAddress.ToString());
}
if (ipFilter.IPMask != null)
Console.WriteLine("\t\tIP Mask: {0}", ipFilter.IPMask.ToString());
if (ipFilter is ProtocolFilter)
Console.WriteLine("\t\tProtocol ID: {0}", ((ProtocolFilter)ipFilter).ProtocolID);
else if (ipFilter is TCPFilter)
{
Console.WriteLine("\t\tProtocol: TCP");
if (((TCPFilter)ipFilter).PortFilterExists)
{
Console.WriteLine("\t\tHeader Port Address: {0}", ((TCPFilter)ipFilter).HeaderPortAddress);
Console.WriteLine("\t\tPort1: {0}", ((TCPFilter)ipFilter).Port1);
Console.WriteLine("\t\tPort2: {0}", ((TCPFilter)ipFilter).Port2);
}
Console.WriteLine("\t\tFlags On: {0}", ((TCPFilter)ipFilter).FlagsOn);
Console.WriteLine("\t\tFlags Off: {0}", ((TCPFilter)ipFilter).FlagsOff);
}
else if (ipFilter is UDPFilter)
{
Console.WriteLine("\t\tProtocol: UDP");
Console.WriteLine("\t\tHeader Port Address: {0}", ((UDPFilter)ipFilter).HeaderPortAddress);
Console.WriteLine("\t\tPort1: {0}", ((UDPFilter)ipFilter).Port1);
Console.WriteLine("\t\tPort2: {0}", ((UDPFilter)ipFilter).Port2);
}
}
}
}

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
</ItemGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
</Project>

View File

@ -1,105 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 - 2015 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.IO;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using Common.Utils;
using System.Runtime.InteropServices;
namespace AgentPresenceRemoteSample
{
class Program
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
static void Main(string[] args)
{
// set default dll lookup directory to system
SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32
IAMTInstance amt = null;
ConnectionInfoEX ci = null;
try
{
// Check if JSON path was provided as an argument. If not, default path would be used.
try
{
ci = ProgramInput.DeserializeJsonToStruct(args.Length > 0 ? args[0] : null);
}
catch (IOException e)
{
Console.WriteLine($"Could not read argument file: {e.Message}");
return;
}
amt = AMTInstanceFactory.CreateEX(ci);
}
catch (ManageabilityException e)
{
ci?.Dispose();
Console.WriteLine(e.Message);
return;
}
try
{
// When creating an agent that is related to the EventManager feature, EventManager sends an event when Agent.eventOnTransition equals true.
// The event that was sent contains only the first 6 characters of the agent's name.
// Therefore, we recommend naming an agent with max length of 6 characters,
// otherwise the event that will be sent will include only the first part of the agent's name.
// Create Agent
AgentPresenceRemoteFunctionality.CreateOrUpdateAgent(amt, "Agent1");
// Create second Agent
AgentPresenceRemoteFunctionality.CreateOrUpdateAgent(amt, "Agent2");
// Get all Agents
AgentPresenceRemoteFunctionality.DisplayAgents(amt);
// Get Agent Presence capabilities
AgentPresenceRemoteFunctionality.DisplayCapabalities(amt);
// Get Agent by name
AgentPresenceRemoteFunctionality.GetAgent(amt, "Agent1");
// Set the policy for agent presence
AgentPresenceRemoteFunctionality.SetAgentPresencePolicy(amt);
// Get the policy from agent presence
AgentPresenceRemoteFunctionality.GetAgentPresencePolicy(amt);
// Remove the policy from agent presence
AgentPresenceRemoteFunctionality.RemoveAgentPresencePolicy(amt);
//Set expiration action on agent
AgentPresenceRemoteFunctionality.SetExpirationActionOnAgentPresenceWatchDog(amt, "Agent1");
// Delete specific agent
AgentPresenceRemoteFunctionality.DeleteAgent(amt, "Agent1");
// Delete specific agent
AgentPresenceRemoteFunctionality.DeleteAgent(amt, "Agent2");
// Delete all agents
AgentPresenceRemoteFunctionality.DeleteAllAgent(amt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
amt?.Dispose();
}
}
}
}

View File

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("AgentPrenceImpl")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Intel Corporation")]
[assembly: AssemblyProduct("AgentPrenceImpl")]
[assembly: AssemblyCopyright("Copyright © 2020 Intel Corporation")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("f6633285-7cfa-4980-882a-a6fb6778f2e3")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,102 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2009-2013 All Rights Reserved.
//
// File: AlarmClockFunctionality.cs
//
// Contents: Demonstrate the IAlarmClock interface.
//
//
//----------------------------------------------------------------------------
using System;
using Intel.Manageability;
using Intel.Manageability.AlarmClock;
using Intel.Manageability.Exceptions;
namespace AlarmClockSample
{
public class AlarmClockFunctionality
{
/// <summary>
/// Display the current alarm clock settings
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void DisplaySettings(IAMTInstance amt)
{
try
{
AlarmClockSettings settings = amt.AlarmClock.GetAlarmClockSettings();
Console.WriteLine("Alarm Clock Settings:\n=====================\n");
Console.WriteLine("Next Alarm Time: {0}", (settings.NextAlarmTime != DateTime.MinValue) ? settings.NextAlarmTime.ToString() : @"N\A");
Console.WriteLine("Alarm Clock Interval: {0}", (settings.AlarmInterval != null) ? settings.AlarmInterval.ToString() : @"N\A");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Get alarm clock settings failed");
Console.WriteLine(ex.Message);
}
}
/// <summary>
/// Configure a single wake up event
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void SetSingleAlarmTime(IAMTInstance amt)
{
DateTime date;
try
{
date = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day + 1);
Console.Write("Setting next alarm time to: "+date.ToString()+"...\t");
amt.AlarmClock.SetSingleAlarm(date);
Console.WriteLine("Success");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Failed");
Console.WriteLine("\n" + ex.Message);
}
}
/// <summary>
/// Configure a recurring wake up event
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void SetRecurringAlarm(IAMTInstance amt)
{
DateTime date;
try
{
date = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day + 1);
Console.Write("Setting recurring alarm to:" + date.ToString()+", with interval of 1 day...\t");
amt.AlarmClock.SetRecurringAlarm(date, new AlarmInterval(1,0,0));
Console.WriteLine("Success");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Failed");
Console.WriteLine("\n" + ex.Message);
}
}
/// <summary>
/// Disable the Alarm Clock
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void Disable(IAMTInstance amt)
{
try
{
Console.Write("Disable the alarm clock...\t");
amt.AlarmClock.DisableAll();
Console.WriteLine("Success");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Failed");
Console.WriteLine("\n" + ex.Message);
}
}
}
}

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
</ItemGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
</Project>

View File

@ -1,76 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2010-2014 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using Common.Utils;
using System.IO;
using System.Runtime.InteropServices;
namespace AlarmClockSample
{
class Program
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
static void Main(string[] args)
{
// set default dll lookup directory to system
SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32
IAMTInstance amt = null;
ConnectionInfoEX ci = null;
try
{
// Check if JSON path was provided as an argument. If not, default path would be used.
try
{
ci = ProgramInput.DeserializeJsonToStruct(args.Length > 0 ? args[0] : null);
}
catch (IOException e)
{
Console.WriteLine($"Could not read argument file: {e.Message}");
return;
}
amt = AMTInstanceFactory.CreateEX(ci);
}
catch (ManageabilityException e)
{
ci?.Dispose();
Console.WriteLine(e.Message);
return;
}
try
{
// Get the current alarm clock settings
AlarmClockFunctionality.DisplaySettings(amt);
// Set a recurring alarm
AlarmClockFunctionality.SetRecurringAlarm(amt);
// Set a single alarm
AlarmClockFunctionality.SetSingleAlarmTime(amt);
// Disable the alarm clock
AlarmClockFunctionality.Disable(amt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
amt?.Dispose();
}
}
}
}

View File

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("AlarmClockSample")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Intel Corporation")]
[assembly: AssemblyProduct("AlarmClockSample")]
[assembly: AssemblyCopyright("Copyright © 2020 Intel Corporation")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("84826e89-3928-4baf-a3ef-48c3bbf42bd1")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,215 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2009-2012 All Rights Reserved.
//
// File: BootControlFunctionality.cs
//
// Contents: Demonstrate the IBootControl interface.
//
//
//----------------------------------------------------------------------------
using System;
using Intel.Manageability;
using Intel.Manageability.BootControl;
using Intel.Manageability.Exceptions;
namespace BootControlSample
{
class BootControlFunctionality
{
/// <summary>
/// Prints the boot capabilities of the Intel AMT system.
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void GetCapabilities(IAMTInstance amt)
{
try
{
BootCapabilities bootCapabilities = amt.BootControl.BootCapabilities;
Console.WriteLine("Boot Capabilities:");
Console.WriteLine("BiosReflash: " + bootCapabilities.BiosReflash);
Console.WriteLine("BiosSetup: " + bootCapabilities.BiosSetup);
Console.WriteLine("BiosPause: " + bootCapabilities.BiosPause);
Console.WriteLine("LockPowerButton: " + bootCapabilities.LockPowerButton);
Console.WriteLine("LockResetButton: " + bootCapabilities.LockResetButton);
Console.WriteLine("LockKeyboard: " + bootCapabilities.LockKeyboard);
Console.WriteLine("LockSleepButton: " + bootCapabilities.LockSleepButton);
Console.WriteLine("UserPasswordBypass: " + bootCapabilities.UserPasswordBypass);
Console.WriteLine("ForceProgressEvents: " + bootCapabilities.ForceProgressEvents);
Console.WriteLine("ConfigurationDataReset: " + bootCapabilities.ConfigurationDataReset);
Console.WriteLine("IDER: " + bootCapabilities.IDER);
Console.WriteLine("SOL: " + bootCapabilities.SOL);
Console.WriteLine("SafeMode: " + bootCapabilities.SafeMode);
Console.WriteLine("HardDriveBoot: " + bootCapabilities.HardDriveBoot);
Console.WriteLine("CdOrDvdBoot: " + bootCapabilities.CdOrDvdBoot);
Console.WriteLine("PXEBoot: " + bootCapabilities.PXEBoot);
Console.WriteLine("DiagnosticsBoot: " + bootCapabilities.DiagnosticsBoot);
Console.WriteLine("FirmwareVerbosityScreenBlank: " + bootCapabilities.FirmwareVerbosityScreenBlank);
Console.WriteLine("FirmwareVerbosityVerbose: " + bootCapabilities.FirmwareVerbosityVerbose);
Console.WriteLine("FirmwareVerbosityQuiet: " + bootCapabilities.FirmwareVerbosityQuiet);
//The Enforce Secure Boot option is enabled in Intel AMT version 8.1 and above.
if (CompareVersions(amt.MajorVersion + "." + amt.MinorVersion, "8.0") > 0)
Console.WriteLine("BiosSecureBoot: " + bootCapabilities.BiosSecureBoot);
//The Enforce Secure Erase option is enabled in Intel AMT version 11.0 and above.
if (CompareVersions(amt.MajorVersion + "." + amt.MinorVersion, "11.0") >= 0)
Console.WriteLine("SecureErase: " + bootCapabilities.SecureErase);
}
catch (ManageabilityException ex)
{
Console.WriteLine("Get capabilities failed");
Console.WriteLine(ex.Message);
}
}
/// <summary>
/// Prints the current boot settings of the Intel AMT system.
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void GetCurrentSetting(IAMTInstance amt)
{
BootOptionsFlags bootOptions;
BootSource bootSource;
FirmwareVerbosityEnum FWVerbosity;
try
{
amt.BootControl.GetCurrentSettings(out bootSource, out bootOptions, out FWVerbosity);
Console.WriteLine("Current boot Options: " + bootOptions.ToString());
Console.Write("Current boot Source: " + bootSource.Source.ToString());
Console.WriteLine(". index: " + bootSource.Index.ToString());
Console.WriteLine("Current Firmware Verbosity: " + FWVerbosity.ToString());
}
catch (ManageabilityException ex)
{
Console.WriteLine("Get current settings failed");
Console.WriteLine(ex.Message);
}
}
/// <summary>
/// Sets the next boot to boot from a CD\DVD
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void SetNextBoot1(IAMTInstance amt)
{
try
{
BootSource bootSource = new BootSource(BootSourceEnum.CdOrDvdBoot, 1);
amt.BootControl.SetNextBoot(bootSource);
Console.WriteLine("Set next boot Succeed");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Set next boot failed");
Console.WriteLine(ex.Message);
}
}
/// <summary>
/// Set the next boot to use IDE-R, SOL, and boot to the BIOS according to the capabilities.
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void SetNextBoot2(IAMTInstance amt)
{
BootCapabilities bootCapabilities = amt.BootControl.BootCapabilities;
BootSource bootSource;
if (bootCapabilities.IDER)
bootSource = new BootSource(BootSourceEnum.IDERCD);
else
bootSource = new BootSource(BootSourceEnum.NONE);
BootOptionsFlags flags = BootOptionsFlags.NONE;
if (bootCapabilities.SOL)
flags |= BootOptionsFlags.UseSOL;
if (bootCapabilities.BiosSetup)
flags |= BootOptionsFlags.BiosSetup;
FirmwareVerbosityEnum FWverbosity = FirmwareVerbosityEnum.NONE;
if (bootCapabilities.FirmwareVerbosityVerbose)
FWverbosity = FirmwareVerbosityEnum.Verbose;
try
{
amt.BootControl.SetNextBoot(bootSource, flags, FWverbosity);
Console.WriteLine("Set next boot succeed");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Set next boot failed");
Console.WriteLine(ex.Message);
}
}
/// <summary>
/// Enforce Secure Boot for the next boot.
/// The Enforce Secure Boot ability is enabled in Intel AMT version 8.1 and above. It is enabled only on a machine that was burned specially with the BiosSecureBoot option.
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void SetNextBoot3(IAMTInstance amt)
{
BootCapabilities bootCapabilities = amt.BootControl.BootCapabilities;
BootOptionsFlags flags = BootOptionsFlags.NONE;
if(bootCapabilities.BiosSecureBoot)
flags |= BootOptionsFlags.EnforceSecureBoot;
try
{
amt.BootControl.SetNextBoot(flags);
Console.WriteLine("Enforce Secure Boot for next boot succeed");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Enforce Secure Boot for next boot failed");
Console.WriteLine(ex.Message);
}
}
/// <summary>
/// Clear the boot options for the next boot.
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void Clear(IAMTInstance amt)
{
try
{
amt.BootControl.ClearBootOptions();
Console.WriteLine("Clear boot options succeed");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Clear boot options failed");
Console.WriteLine(ex.Message);
}
}
/// <summary>
/// Compare versions of the Intel AMT instance.
/// </summary>
/// <param name="amtversion">The version of the Intel AMT.</param>
/// <param name="version">The version to compare with.</param>
/// <returns> Less than zero -The current Intel AMT version is a version before version.</returns>
/// <returns> Zero - The current Intel AMT version is the same version as version.</returns>
/// <returns> Greater than zero - The current Intel AMT Version is a version subsequent to version.</returns>
private static int CompareVersions(string amtversion, string version)
{
try
{
Version amtVersion = new Version(amtversion);
Version versionToCopmare = new Version(version);
return amtVersion.CompareTo(versionToCopmare);
}
catch (Exception e)
{
throw new Exception("Compare versions failed. "+e.Message);
}
}
}
}

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
</ItemGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
</Project>

View File

@ -1,82 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2010-2014 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using Common.Utils;
using System.IO;
using System.Runtime.InteropServices;
namespace BootControlSample
{
class Program
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
static void Main(string[] args)
{
// set default dll lookup directory to system
SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32
IAMTInstance amt = null;
ConnectionInfoEX ci = null;
try
{
// Check if JSON path was provided as an argument. If not, default path would be used.
try
{
ci = ProgramInput.DeserializeJsonToStruct(args.Length > 0 ? args[0] : null);
}
catch (IOException e)
{
Console.WriteLine($"Could not read argument file: {e.Message}");
return;
}
amt = AMTInstanceFactory.CreateEX(ci);
}
catch (ManageabilityException e)
{
ci?.Dispose();
Console.WriteLine(e.Message);
return;
}
try
{
//Get Boot Capabilities
BootControlFunctionality.GetCapabilities(amt);
//Get Current Setting
BootControlFunctionality.GetCurrentSetting(amt);
//Set next boot to boot from CD
BootControlFunctionality.SetNextBoot1(amt);
//Set the next boot to use IDER + SOL and boot to BIOS according to the capabilities.
BootControlFunctionality.SetNextBoot2(amt);
//Enforce Secure Boot
BootControlFunctionality.SetNextBoot3(amt);
//Clear the boot options
BootControlFunctionality.Clear(amt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
amt?.Dispose();
}
}
}
}

View File

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("BootControlSample")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Intel Corporation")]
[assembly: AssemblyProduct("BootControlSample")]
[assembly: AssemblyCopyright("Copyright © 2020 Intel Corporation")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("455b2575-5958-4771-97f3-d5bf53a24ca1")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,285 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2012 - 2013 All Rights Reserved.
//
// File: CertificateManagementFunctionality.cs
//
// Contents: Example that shows how to use CertificateManagement High Level API
//
//----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
namespace CertificateManagementSample
{
class CertificateManagementFunctionality
{
private const string LEAF_CERT = @"..\..\LeafCert.p12";
private const string ROOT_CA = @"..\..\rootCA.cer";
private const string ROOT_CERT = @"..\..\RootCert.cer";
public static void AddCertificate(IAMTInstance amt)
{
try
{
Console.WriteLine("\nAdd a certificate to Intel AMT:");
Console.WriteLine("===============================\n");
// Read certificate with X509Certificate2 from .p12 file. The given property X509KeyStorageFlags.Exportable
// gives the X509Certificate2 object the instruction to export also the private key.
using (X509Certificate2 certificate = new X509Certificate2(LEAF_CERT, "q", X509KeyStorageFlags.Exportable))
{
amt.Config.CertificateManagement.AddCertificate(certificate);
}
Console.WriteLine("A certificate including a private key added successfully.");
}
catch (CertificateManagementManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
catch(CryptographicException ex)
{
Console.WriteLine(ex.Message);
}
}
public static void AddTrustedRootCertificate(IAMTInstance amt)
{
try
{
Console.WriteLine("\nAdd a trusted root certificate to Intel AMT:");
Console.WriteLine("============================================\n");
// Read trusted root certificate with X509Certificate2 from .cer file.
using (X509Certificate2 certificate = new X509Certificate2(ROOT_CA))
{
amt.Config.CertificateManagement.AddCertificate(certificate);
}
Console.WriteLine("A trusted root certificate added successfully");
}
catch (CertificateManagementManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
catch (CryptographicException ex)
{
Console.WriteLine(ex.Message);
}
}
public static void AddCertificateChain(IAMTInstance amt)
{
try
{
Console.WriteLine("\nAdd a certificate chain to Intel AMT:");
Console.WriteLine("=====================================\n");
using (X509Certificate2 rootCertificate = new X509Certificate2(ROOT_CERT))
{
using (X509Certificate2 leafCertificate = new X509Certificate2(LEAF_CERT, "q", X509KeyStorageFlags.Exportable)) //*****
{
// Create X509Chain object.
using (X509Chain trustedChain = new X509Chain())
{
// Set to the X509Chain object an additional certificates store from which the chain will be built.
trustedChain.ChainPolicy.ExtraStore.Add(rootCertificate);
// Ignore when determining certificate verification invalid certificates like:
// expired certificates, certificate with invalid policy, etc.
// Set this policy to AllFlags is necessary to the attached certificates in this sample only (The
// attached certificates are not valid).
trustedChain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags;
// Build certificates chain.
trustedChain.Build(leafCertificate);
// Add the chain elements to the certificate store in the Intel AMT.
amt.Config.CertificateManagement.AddCertificate(trustedChain);
}
}
}
Console.WriteLine("Certificate chain added successfully.");
}
catch (CertificateManagementManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
catch (CryptographicException ex)
{
Console.WriteLine(ex.Message);
}
}
public static void GetAllCertificates(IAMTInstance amt)
{
try
{
Console.WriteLine("\nGet all certificates:");
Console.WriteLine("=====================\n");
List<X509Certificate2> certificates = amt.Config.CertificateManagement.GetAllCertificates();
foreach (X509Certificate2 certificate in certificates)
{
PrintCertificate(certificate);
}
Console.WriteLine("Get all certificates completed successfully.");
}
catch (CertificateManagementManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
public static void GetTrustedRootCertificates(IAMTInstance amt)
{
try
{
Console.WriteLine("\nGet all trusted root certificates:");
Console.WriteLine("==================================\n");
List<X509Certificate2> certificates = amt.Config.CertificateManagement.GetTrustedRootCertificates();
foreach (X509Certificate2 certificate in certificates)
{
PrintCertificate(certificate);
}
Console.WriteLine("Get all trusted root certificates completed successfully.");
}
catch (CertificateManagementManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
public static void GetNonTrustedRootCertificates(IAMTInstance amt)
{
try
{
Console.WriteLine("\nGet all non trusted root certificates:");
Console.WriteLine("======================================\n");
List<X509Certificate2> certificates = amt.Config.CertificateManagement.GetNonTrustedRootCertificates();
foreach (X509Certificate2 certificate in certificates)
{
PrintCertificate(certificate);
}
Console.WriteLine("Get all non trusted root certificates completed successfully.");
}
catch (CertificateManagementManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
public static void GetCertificateChain(IAMTInstance amt)
{
try
{
Console.WriteLine("\nGet certificates chain:");
Console.WriteLine("=======================\n");
// Get certificates chain of certificate leaf.
using (X509Certificate2 leaf = new X509Certificate2(LEAF_CERT, "q", X509KeyStorageFlags.Exportable))
{
X509Chain chain = amt.Config.CertificateManagement.GetChain(leaf);
foreach (X509ChainElement x509ChainElement in chain.ChainElements)
{
PrintCertificate(x509ChainElement.Certificate);
}
}
Console.WriteLine("Get certificates chain completed successfully.");
}
catch (CertificateManagementManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
catch (CryptographicException ex)
{
Console.WriteLine(ex.Message);
}
}
public static void RemoveCertificate(IAMTInstance amt)
{
try
{
Console.WriteLine("\nRemove certificate:");
Console.WriteLine("===================\n");
// Remove certificate including its private key.
using (X509Certificate2 certificate = new X509Certificate2(LEAF_CERT, "q", X509KeyStorageFlags.Exportable))
{
amt.Config.CertificateManagement.RemoveCertificate(certificate);
}
Console.WriteLine("Remove certificate including its private key completed successfully.");
}
catch (CertificateManagementManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
catch (CryptographicException ex)
{
Console.WriteLine(ex.Message);
}
}
public static void RemoveNonTrustedRootCertificates(IAMTInstance amt)
{
try
{
Console.WriteLine("\nRemove non trusted root certificates:");
Console.WriteLine("=====================================\n");
// Delete non trusted roots certificates including their private keys.
amt.Config.CertificateManagement.RemoveNonTrustedRootCertificates(true);
Console.WriteLine("Remove non trusted root certificates completed successfully.");
}
catch (CertificateManagementManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
public static void RemoveTrustedRootCertificates(IAMTInstance amt)
{
try
{
Console.WriteLine("\nRemove trusted root certificates:");
Console.WriteLine("=================================\n");
amt.Config.CertificateManagement.RemoveTrustedRootCertificates();
Console.WriteLine("Remove trusted root certificates completed successfully.");
}
catch (CertificateManagementManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
private static void PrintCertificate(X509Certificate2 certificate)
{
Console.WriteLine("Name : {0}", certificate.FriendlyName);
Console.WriteLine("Issuer : {0}", certificate.Issuer);
Console.WriteLine("Subject : {0}", certificate.Subject);
Console.WriteLine("Has Private Key : {0}", certificate.HasPrivateKey);
Console.WriteLine("=================================================\n");
}
}
}

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
</ItemGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
</Project>

View File

@ -1,85 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2012 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.IO;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using Common.Utils;
using System.Runtime.InteropServices;
namespace CertificateManagementSample
{
class Program
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
static void Main(string[] args)
{
// set default dll lookup directory to system
SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32
IAMTInstance amt = null;
ConnectionInfoEX ci = null;
try
{
// Check if JSON path was provided as an argument. If not, default path would be used.
try
{
ci = ProgramInput.DeserializeJsonToStruct(args.Length > 0 ? args[0] : null);
}
catch (IOException e)
{
Console.WriteLine($"Could not read argument file: {e.Message}");
return;
}
amt = AMTInstanceFactory.CreateEX(ci);
}
catch (ManageabilityException e)
{
ci?.Dispose();
Console.WriteLine(e.Message);
return;
}
try
{
// Add a certificate including a private key.
CertificateManagementFunctionality.AddCertificate(amt);
// Add a trusted root certificate.
CertificateManagementFunctionality.AddTrustedRootCertificate(amt);
// Add a certificate chain.
CertificateManagementFunctionality.AddCertificateChain(amt);
// Get All Certificates.
CertificateManagementFunctionality.GetAllCertificates(amt);
// Get Trusted Root Certificates.
CertificateManagementFunctionality.GetTrustedRootCertificates(amt);
// Get Non Trusted Root Certificates.
CertificateManagementFunctionality.GetNonTrustedRootCertificates(amt);
// Get certificate chain.
CertificateManagementFunctionality.GetCertificateChain(amt);
// Remove a certificate.
CertificateManagementFunctionality.RemoveCertificate(amt);
// Remove all NonTrustedRoot certificates.
CertificateManagementFunctionality.RemoveNonTrustedRootCertificates(amt);
// Remove all TrustedRoot certificates.
CertificateManagementFunctionality.RemoveTrustedRootCertificates(amt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
amt?.Dispose();
}
}
}
}

View File

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CertificateManagementSample")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("CertificateManagementSample")]
[assembly: AssemblyCopyright("Copyright © 2020 Intel Corporation")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("b6677e67-7999-4343-b231-20dc40e9c42c")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,81 +0,0 @@
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: CN=Demo Sub CA #5
Validity
Not Before: Nov 9 11:59:48 2011 GMT
Not After : Nov 8 11:59:48 2012 GMT
Subject: CN=Demo Sub CA #6
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:c9:78:1e:f2:c9:c9:fb:93:b3:f6:6f:31:1c:9a:
2a:f9:12:0b:23:7b:ca:ac:53:2c:fe:db:4d:7d:84:
91:f9:2b:19:cf:02:dc:fc:22:30:a6:51:09:17:58:
4c:d1:eb:65:38:b1:25:7a:29:16:35:3b:28:2e:27:
16:be:de:06:ef:10:8d:41:56:bd:99:5d:23:05:7b:
15:5c:dc:0f:b7:5d:e6:e2:3d:1f:9c:9b:69:6d:d9:
66:2d:b8:24:f5:c1:96:57:c7:49:2c:ee:1c:d9:c0:
0c:91:50:87:74:9b:72:e6:a8:c6:52:55:09:75:c0:
ff:72:2c:08:31:bf:db:62:35:67:48:c7:43:fa:7f:
c2:27:8d:19:7a:25:5b:66:96:03:f6:c4:8d:f8:87:
80:d2:fe:e5:d2:11:bb:0d:0b:86:39:e2:e8:06:ef:
be:43:14:aa:7b:3a:84:c3:c4:f5:14:37:40:5f:98:
89:c9:d4:c7:bb:01:c0:20:10:de:d2:68:d5:fb:45:
98:20:1b:59:43:cf:20:8c:94:1e:f2:50:8c:66:43:
e9:2e:fc:d0:0c:0f:2c:b4:dd:10:34:df:38:e0:84:
a3:ee:26:d7:83:48:6c:5d:89:14:b4:40:fd:d6:57:
e4:37:34:91:ee:37:33:b9:b7:75:e5:42:82:cd:ca:
aa:cd
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
20:CC:F1:DF:45:3D:7A:6A:D2:E1:E2:69:EA:96:FF:0C:AF:86:B0:8E
X509v3 Authority Key Identifier:
keyid:F6:0C:12:F6:5A:EA:33:E9:A7:84:B5:A8:57:B5:D4:3A:AF:BB:48:E1
DirName:/CN=Demo Sub CA #4
serial:01
X509v3 Key Usage:
Digital Signature, Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:1
Signature Algorithm: sha1WithRSAEncryption
38:3e:10:6f:27:0f:39:ca:9f:2b:10:6d:3f:1d:fb:49:97:ba:
bf:8c:ae:c6:d4:58:0f:16:92:f3:5a:61:31:72:f8:a3:60:04:
63:fb:27:64:18:aa:f5:3b:a5:12:4a:c2:1d:c6:c6:30:1c:5a:
a4:06:e6:60:41:42:06:8d:47:86:97:d8:38:79:c8:10:a9:91:
7a:14:7b:8e:97:f4:d2:15:ed:c1:7a:62:4b:cd:81:85:20:3d:
88:f8:b7:fc:66:b3:0b:f6:0b:b7:0e:70:c9:66:66:db:f4:ac:
5a:93:76:96:79:cd:55:d2:28:8a:31:17:ec:e5:f3:89:82:62:
d5:51:27:2f:b8:87:73:81:fc:24:84:11:3e:d5:42:15:d9:c8:
90:44:62:62:f7:b2:c6:a7:ed:12:2c:50:16:52:e7:da:63:36:
4e:3f:20:ec:16:e8:f3:fb:0d:87:a5:c4:c2:c1:dd:ec:91:6f:
6f:ff:3a:05:5a:dc:ca:fd:6d:81:5d:b9:e0:19:98:19:fb:48:
6a:06:6f:96:07:45:96:24:71:09:23:c7:72:3f:49:82:ad:31:
87:d9:c8:2b:20:81:32:e2:77:14:11:83:e5:f1:21:a5:84:28:
5a:64:67:55:4c:0c:63:0c:64:b3:e8:41:7f:e6:ab:89:3c:be:
2a:bf:94:14
-----BEGIN CERTIFICATE-----
MIIDNDCCAhygAwIBAgIBATANBgkqhkiG9w0BAQUFADAZMRcwFQYDVQQDFA5EZW1v
IFN1YiBDQSAjNTAeFw0xMTExMDkxMTU5NDhaFw0xMjExMDgxMTU5NDhaMBkxFzAV
BgNVBAMUDkRlbW8gU3ViIENBICM2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAyXge8snJ+5Oz9m8xHJoq+RILI3vKrFMs/ttNfYSR+SsZzwLc/CIwplEJ
F1hM0etlOLEleikWNTsoLicWvt4G7xCNQVa9mV0jBXsVXNwPt13m4j0fnJtpbdlm
Lbgk9cGWV8dJLO4c2cAMkVCHdJty5qjGUlUJdcD/ciwIMb/bYjVnSMdD+n/CJ40Z
eiVbZpYD9sSN+IeA0v7l0hG7DQuGOeLoBu++QxSqezqEw8T1FDdAX5iJydTHuwHA
IBDe0mjV+0WYIBtZQ88gjJQe8lCMZkPpLvzQDA8stN0QNN844ISj7ibXg0hsXYkU
tED91lfkNzSR7jczubd15UKCzcqqzQIDAQABo4GGMIGDMB0GA1UdDgQWBBQgzPHf
RT16atLh4mnqlv8Mr4awjjBBBgNVHSMEOjA4gBT2DBL2Wuoz6aeEtahXtdQ6r7tI
4aEdpBswGTEXMBUGA1UEAxQORGVtbyBTdWIgQ0EgIzSCAQEwCwYDVR0PBAQDAgGG
MBIGA1UdEwEB/wQIMAYBAf8CAQEwDQYJKoZIhvcNAQEFBQADggEBADg+EG8nDznK
nysQbT8d+0mXur+MrsbUWA8WkvNaYTFy+KNgBGP7J2QYqvU7pRJKwh3GxjAcWqQG
5mBBQgaNR4aX2Dh5yBCpkXoUe46X9NIV7cF6YkvNgYUgPYj4t/xmswv2C7cOcMlm
Ztv0rFqTdpZ5zVXSKIoxF+zl84mCYtVRJy+4h3OB/CSEET7VQhXZyJBEYmL3ssan
7RIsUBZS59pjNk4/IOwW6PP7DYelxMLB3eyRb2//OgVa3Mr9bYFdueAZmBn7SGoG
b5YHRZYkcQkjx3I/SYKtMYfZyCsggTLidxQRg+XxIaWEKFpkZ1VMDGMMZLPoQX/m
q4k8viq/lBQ=
-----END CERTIFICATE-----

View File

@ -1,19 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIDBzCCAe+gAwIBAgIJANOlD6v9jiMPMA0GCSqGSIb3DQEBCwUAMDIxFTATBgNV
BAMTDERlbW8gUm9vdCBDQTELMAkGA1UEBhMCSUwxDDAKBgNVBAsTA0ZUTDAeFw0x
MTA0MjUwODIwNDBaFw0xMTA0MjYwODIwNDBaMDIxFTATBgNVBAMTDERlbW8gUm9v
dCBDQTELMAkGA1UEBhMCSUwxDDAKBgNVBAsTA0ZUTDCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBANxI7o63gycb1+Cq6WpHtsJiFDC7mN620P+A+kBopTPy
z0WYLxK8827YwxTmi7zRN96SBYWMpS1SnJ8/rmNMILiVIXPyHn1E1usqGgxifckg
RwgZbzNdaO9mi/G/mP3EG/vvk7ERAPc9bB8xWtV+s7nVzLdt/Bayq2UIYZj6yvH0
1qFh6Mw6rQGPuVM+WUADOdv+y4+DF/WA88OjicOnhYaELJuW4mXZVz0DP8PoouPy
N15ePml7v+Iuj8TUcn1C8BpsfLDtOYsZVrOVkzfXrjO0mfgGJnop8pp1bn/GbSKF
G0ZlsXNoiJezXNq0f2ONUougC1JGdkWqWC2677OhfG0CAwEAAaMgMB4wDwYDVR0T
AQH/BAUwAwEB/zALBgNVHQ8EBAMCAbYwDQYJKoZIhvcNAQELBQADggEBAC+3TpES
wnlF+c/0L+Hf7z0huqMpTroadnBWjWNLBfcRAQnXI3iC7ANg6E6s/Evfc45A7ZyF
lGTmw2MVIj/GdCtRuf8kpVK9hNOaLK1nnByW8pWP1Mcg/Ai5JY6odvgcSHpsGUA4
4t9Xfg3a5vPV+tWyccHMknd3wzhTEwQqZ+Cxb5uD2jbA9JS5Jmhtdbk6sVbiusis
NV2Jx5zuhycVK9nc49kZNv6c8YnnSDxcw7B9a99NYKRo9TXJbCsnLnghkwRTMCbz
RcaFfjnFQCx85XeoNo2zLIYCZ6k93EhJz12FFYu1CR4vkYlINvhsFFPeuSEVdt+w
rx6KN5172jtMg+Y=
-----END CERTIFICATE-----

View File

@ -1,64 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2009-2011 All Rights Reserved.
//
// File: LogEventFunctionality.cs
//
// Contents: Example that shows how to use event log High Level API
//
// Notes:
//
//----------------------------------------------------------------------------
using System;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using HLAPI.GeneralInfo;
namespace DiscoverySample
{
public class DiscoveryFunctionality
{
public static void Discovery(IAMTInstance amt)
{
try
{
// Get SKU version.
SKU skuVersion = amt.GeneralInfo.GetSkuVersion();
// Get host + domain name.
string hostName = amt.GeneralInfo.GetFQDN(FQDN.Host);
// Print the FQDN and the SKU version for the AMT.
Console.WriteLine("The supported features in AMT platform for host {1} with {0} SKU:", skuVersion, hostName);
// Print AMT's supported features list.
foreach (AMTFeatures supportedFeature in amt.SupportedFeatures)
{
Console.WriteLine(" * {0}", supportedFeature);
}
}
catch (GeneralInfoException ex)
{
Console.WriteLine(ex.Message);
}
}
public static void CheckForSupportedFeature(IAMTInstance amt)
{
try
{
// If KVM feature is supported in this AMT, get KVM interface state.
if (true == amt.SupportedFeatures.Contains(AMTFeatures.KVM))
{
bool intefaceState = amt.KVMSetup.GetInterfaceState();
}
}
catch (ManageabilityException ex)
{
Console.WriteLine(ex.Message);
}
}
}
}

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
</ItemGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
</Project>

View File

@ -1,59 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.IO;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using Common.Utils;
using System.Runtime.InteropServices;
namespace DiscoverySample
{
class Program
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
static void Main(string[] args)
{
// set default dll lookup directory to system
SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32
IAMTInstance amt = null;
ConnectionInfoEX ci = null;
try
{
// Check if JSON path was provided as an argument. If not, default path would be used.
try
{
ci = ProgramInput.DeserializeJsonToStruct(args.Length > 0 ? args[0] : null);
}
catch (IOException e)
{
Console.WriteLine($"Could not read argument file: {e.Message}");
return;
}
amt = AMTInstanceFactory.CreateEX(ci);
}
catch (ManageabilityException e)
{
ci?.Dispose();
Console.WriteLine(e.Message);
return;
}
// Discovery on AMT platform.
DiscoveryFunctionality.Discovery(amt);
// Wake up AMT machine, only if Power feature is supported.
DiscoveryFunctionality.CheckForSupportedFeature(amt);
}
}
}

View File

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("PowerSample")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("PowerSample")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("c21e166e-42a8-4a39-b80f-db15769af506")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
</ItemGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
</Project>

View File

@ -1,355 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2009-2014 All Rights Reserved.
//
// File: LogEventFunctionality.cs
//
// Contents: Example that shows how to use event log High Level API
//
// Notes:
//
//----------------------------------------------------------------------------
using System;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using Intel.Manageability.Events;
using System.Collections.Generic;
using System.Linq;
namespace EventLogSample
{
public class LogEventFunctionality
{
public static void RegisterToLog(IAMTInstance amt)
{
try
{
//-----------------------------------------------------------------------------------------------------
// #1 - Register events so that they will be logged in the event log by using filter name (type string)
// Use a filter name from the "Event" class
//-----------------------------------------------------------------------------------------------------
//Register events using the event string from Events class, which contains strings of the filter names.
amt.Events.Log.RegisterToLog(Events.Battery.All_Battery_Events);
Console.WriteLine("\nFirst RegisterToLog operation completed successfully");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Attempt to register filter with filter's name (type string) failed.\n" +
"Failure reason: {0}", ex.Message);
}
try
{
//-----------------------------------------------------------------------------------------------
//#2 Register events using Filter object
//-----------------------------------------------------------------------------------------------
//Register events with Filter object, which contains the values that define
//the desired events to be logged to the event log.
//Create new filter:
Filter filter = new Filter(255, 4, 18, 254, 0, 150, 0, 0, 44, 255);
//Register events with the filter
amt.Events.Log.RegisterToLog(filter);
Console.WriteLine("\nSecond RegisterToLog operation completed successfully");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Attempt to register events with Filter object failed.\n" +
"Failure reason: {0}", ex.Message);
}
}
public static void UnRegisterToLog(IAMTInstance amt)
{
bool error = false;
try
{
//-----------------------------------------------------------------------------------------------
//Unegister events using filter name (type string) from the "Event" class (registered in step #1)
//-----------------------------------------------------------------------------------------------
//Unegister events with received event string from Events class, which contains strings of the filter names.
amt.Events.Log.UnRegisterToLog(Events.Battery.All_Battery_Events);
}
catch (ManageabilityException ex)
{
Console.WriteLine("Attempt to Unregister filter with filter's name (type string) failed.\n" +
"Failure reason: {0}", ex.Message);
error = true;
}
try
{
//-----------------------------------------------------------------------------------------------
//Unregister event policy, using PolicyId = 44, which was the policy defined in step #2
//-----------------------------------------------------------------------------------------------
//To register events with PolicyId, need to make sure that the Filter exists.
//If the filter with this PolicyId does not exist, create new Filter with the desired PolicyId.
//Unregister event policy, in case that the PolicyId of the filter is known to the user.
amt.Events.Log.UnRegisterToLog(44);
}
catch (ManageabilityException ex)
{
Console.WriteLine("Attempt to unregister event log policy with PolicyId failed.\n" +
"Failure reason: {0}", ex.Message);
error = true;
}
if(!error)
Console.WriteLine("\nUnRegisterToLog operation completed successfully");
}
public static void ClearLog(IAMTInstance amt)
{
int percentageLog;
try
{
//Get the percentage of log entries.
percentageLog = amt.Events.Log.GetPercentageLog();
}
catch (ManageabilityException ex)
{
throw ex;
}
if (percentageLog > 90)
{
//If the log is frozen, modifications are not allowed and log records cannot be deleted.
if (amt.Events.Log.IsLogFrozen() == false)
{
try
{
amt.Events.Log.ClearLog();
Console.WriteLine("\nClearLog operation completed successfully");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Attempt to clear the entire log failed.\n" +
"Failure reason: {0}", ex.Message);
}
}
else
{
Console.WriteLine("Can not clear the log when it is frozen.");
}
}
else
{
Console.WriteLine("There is no need to clear the log. Percentage of log entries is: {0}", percentageLog);
}
}
public static void FreezeLog(IAMTInstance amt)
{
try
{
//Freeze the event log.
amt.Events.Log.FreezeLog(true);
Console.WriteLine("\nFreezeLog operation completed successfully");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Attempt to Freeze the log failed.\n" +
"Failure reason: {0}", ex.Message);
}
}
public static void UnFreezeLog(IAMTInstance amt)
{
//Unfreeze the event log.
try
{
amt.Events.Log.FreezeLog(false);
Console.WriteLine("\nUnFreezeLog operation completed successfully");
}
catch (ManageabilityException ex)
{
Console.WriteLine("Attempt to unfreeze the log failed.\n" +
"Failure reason: {0}", ex.Message);
}
}
public static void GetRecords(IAMTInstance amt, uint identifier, uint num)
{
//Defined array from Record type.
IEnumerable<Record> log = new List<Record>();
try
{
//Get the all the records from the log into the array named "log".
log = amt.Events.Log.GetRecords(identifier, num);
}
catch (ManageabilityException ex)
{
Console.WriteLine("Attempt to get the specific records from the log failed.\n" + ex.Message);
}
parseLog(log, (int)identifier);
}
public static void GetAllRecords(IAMTInstance amt)
{
//Defined array from Record type.
IEnumerable<Record> log = new List<Record>();
try
{
//Get the all the records from the log into the array named "log".
log = (IEnumerable<Record>)amt.Events.Log.GetAllRecords();
}
catch (ManageabilityException ex)
{
Console.WriteLine("Attempt to get the records from the log failed.\n" +
"Failure reason: {0}", ex.Message);
}
parseLog(log, 0);
}
private static void parseLog(IEnumerable<Record> log, int start)
{
if (log.Count() != 0)
{
//------------------------------
//#1 Filter records, using LINQ, by timestamp.
//------------------------------
//Select the records from the last day.
IEnumerable<Record> query = from r in log
where DateTime.Compare(r.TimeStamp, DateTime.Today.AddDays(-1)) >= 0
select r;
//Print the records
PrintRecords(query, start);
//------------------------------
//#2 Filter records, using LINQ, by Severity.
//------------------------------
//Select the records where the severity is "Information",
//using the value in the id.
query = from r in log
where r.Severity.Id == 255
select r;
//Print the records
PrintRecords(query, start);
//------------------------------
//#3 Filter records, using LINQ, by Entity.
//------------------------------
//Select the records where the Entity is "Bios",
//using Entity.Description property.
query = from r in log
where r.Entity.Description == "Peripheral Bay"
select r;
//Print the records
PrintRecords(query, start);
//------------------------------
//#4 Filter records, using LINQ, by Sensor Type
//------------------------------
//Select the records where the Sensor Type is "AMT_Agent_Presence",
//using enum "Entity".
query = from r in log
where r.Entity.Id == 1
select r;
//Print the records.
PrintRecords(query, start);
//------------------------------
//#5 Filter records, using LINQ, by Message.
//------------------------------
//Select the records where the Message is "AMT_Password_Attack".
query = from r in log
where r.Message == "AMT_Password_Attack"
select r;
//Print the records
PrintRecords(query, start);
//------------------------------
//#6 Filter records, using LINQ, by EventOffset.Description property.
//------------------------------
//Select the records where the EventOffset.Description is "Lower Non-critical - going low".
//This value appears when EventType = 1 and EventOffset = 1.
query = from r in log
where r.EventOffset.Description == "Lower Non-critical - going low"
select r;
//Print the records
PrintRecords(query, start);
//------------------------------
//#7 Filter records, using LINQ, by SensorType.Id property.
//------------------------------
//Select the records where the EventOffset.Id is 3. (stands for "Voltage")
query = from r in log
where r.SensorType.Id == 3
select r;
//Print the records
PrintRecords(query, start);
}
else
{
Console.WriteLine("There are no records in the log");
}
}
public static void CurrentNumberOfRecord(IAMTInstance amt)
{
try
{
Console.WriteLine("Current number of records in the log: {0}", amt.Events.Log.GetCurrentNumberOfRecords());
}
catch (ManageabilityException ex)
{
Console.WriteLine("Failed to get current number of records. Failure reason: {0}", ex.Message);
}
}
private static void PrintRecords(IEnumerable<Record> query, int startFrom)
{
//Give template id to record.
int numRecord = startFrom;
//Print the records
foreach (Record record in query)
{
//Console.WriteLine("Record Id | Timestamp | Severity | Sensor Type | Entity | Message | ");
//string byteString = Convert.ToString(bytes[ctr], 2);
//byteString = new String('0', 8 - byteString.Length) + byteString;
//_binarString += byteString;
Console.WriteLine("record number: {0}", numRecord++);
Console.WriteLine("Timestamp: {0}", record.TimeStamp);
Console.WriteLine("Severity: {0}", record.Severity.Description);
Console.WriteLine("Sensor Type: {0}", record.SensorType.Description);
Console.WriteLine("Sensor Number: {0}", record.SensorNumber);
Console.WriteLine("Entity: {0}", record.Entity);
Console.WriteLine("Entity Instance: {0}", record.EntityInstance);
Console.WriteLine("Message: {0}", record.Message);
Console.WriteLine("Event Type: {0}", record.EventType.Description);
Console.WriteLine("Event Source: {0}", record.EventSource);
Console.WriteLine("Device Address: {0}", record.DeviceAddress);
Console.WriteLine("------------------------------------------------------------");
}
}
}
}

View File

@ -1,92 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 - 2014 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using System.Collections;
using System.Security;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using Common.Utils;
using System.IO;
using System.Runtime.InteropServices;
namespace EventLogSample
{
class Program
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
static void Main(string[] args)
{
// set default dll lookup directory to system
SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32
IAMTInstance amt = null;
ConnectionInfoEX ci = null;
try
{
// check if JSON path was provided in CMD. If empty, default directory file will be selected
try
{
ci = ProgramInput.DeserializeJsonToStruct(args.Length > 0 ? args[0] : null);
}
catch (IOException e)
{
Console.WriteLine($"Could not read argument file: {e.Message}");
return;
}
amt = AMTInstanceFactory.CreateEX(ci);
}
catch (ManageabilityException e)
{
ci?.Dispose();
Console.WriteLine(e.Message);
return;
}
try
{
//Getting the current number of record in the log.
LogEventFunctionality.CurrentNumberOfRecord(amt);
//Getting existing records in the log.
LogEventFunctionality.GetAllRecords(amt);
//Getting existing specific records in the log.
LogEventFunctionality.GetRecords(amt, 3, 20);
//Register Event Filter to recorded in the log.
LogEventFunctionality.RegisterToLog(amt);
//Unegister Event Filter that recorded in the log.
LogEventFunctionality.UnRegisterToLog(amt);
//Freeze the log. so, modifications in the log, are not allowed
LogEventFunctionality.FreezeLog(amt);
////Unfreeze the log. so, modifications in the log, are allowed
LogEventFunctionality.UnFreezeLog(amt);
//Delete all records from the log.
LogEventFunctionality.ClearLog(amt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
amt?.Dispose();
}
}
}
}

View File

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("EventLogSample")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Intel Corporation")]
[assembly: AssemblyProduct("EventLogSample")]
[assembly: AssemblyCopyright("Copyright © 2020 Intel Corporation")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("c21e166e-42a8-4a39-b80f-db15769af506")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,95 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using Intel.Manageability.Events;
using Intel.Manageability.Exceptions;
using Intel.Manageability;
namespace PETEventsSample
{
class GeneralEventsFunctionality
{
/// <summary>
/// Subscribe for events
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void Subscribe(IAMTInstance amt)
{
try
{
//Subscribe for Power_Supply_Failed event
GeneralSubscription subscription = new GeneralSubscription("http://192.168.0.1:16997", Events.Power_Supply.Power_Supply_Failed, SenderIDType.UUID);
amt.Events.Subscribe(subscription);
Console.WriteLine("\nSubscription operation completed successfully");
}
catch (EventsManageabilityException e)
{
PrintException("Subscribe", e);
}
try
{
//Subscribe for Battery_added event
GeneralSubscription subscription = new GeneralSubscription("http://192.168.0.1:16997", Events.Battery.Battery_Added, "MyAMT");
amt.Events.Subscribe(subscription);
Console.WriteLine("\nSubscription operation completed successfully");
}
catch (EventsManageabilityException e)
{
PrintException("Subscribe", e);
}
}
/// <summary>
/// UnSubscribe for Power_Supply_Failed event
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void UnSubscribe(IAMTInstance amt)
{
try
{
GeneralSubscription subscription = new GeneralSubscription("http://192.168.0.1:16997", Events.Power_Supply.Power_Supply_Failed, SenderIDType.UUID);
amt.Events.UnSubscribe(subscription);
Console.WriteLine("\nUnSubscribe operation completed successfully");
}
catch (EventsManageabilityException e)
{
PrintException("UnSubscribe", e);
}
}
/// <summary>
/// Unsubscribe all existing subscriptions
/// </summary>
/// <param name="amt">The Intel AMT instance</param>
public static void UnSubscribeAll(IAMTInstance amt)
{
try
{
amt.Events.UnSubscribeAll();
Console.WriteLine("\nUnSubscribe all subscribers completed successfully");
}
catch (EventsManageabilityException e)
{
PrintException("UnSubscribeAll", e);
}
}
static void PrintException(string methodName, EventsManageabilityException e)
{
Console.WriteLine(methodName + " throw: " + e.Message);
Console.WriteLine("Details:");
Console.WriteLine("========");
Console.WriteLine("\t- Machine Origin : {0}", e.MachineOrigin);
Console.WriteLine("\t- HLAPI Source Function: {0}", e.Source);
if (e.PT_STATUS != null)
Console.WriteLine("\t- Return Value : {0}", e.PT_STATUS);
if (e.Tip != string.Empty)
Console.WriteLine("\t- Counsel : {0}", e.Tip);
}
}
}

View File

@ -1,28 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
</ItemGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
</Project>

View File

@ -1,73 +0,0 @@
//----------------------------------------------------------------------------
//
// Copyright (c) Intel Corporation, 2011 - 2014 All Rights Reserved.
//
//----------------------------------------------------------------------------
using System;
using Intel.Manageability;
using Intel.Manageability.Exceptions;
using Common.Utils;
using System.IO;
using System.Runtime.InteropServices;
namespace PETEventsSample
{
class Program
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
static void Main(string[] args)
{
// set default dll lookup directory to system
SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32
IAMTInstance amt = null;
ConnectionInfoEX ci = null;
try
{
// Check if JSON path was provided as an argument. If not, default path would be used.
try
{
ci = ProgramInput.DeserializeJsonToStruct(args.Length > 0 ? args[0] : null);
}
catch (IOException e)
{
Console.WriteLine($"Could not read argument file: {e.Message}");
return;
}
amt = AMTInstanceFactory.CreateEX(ci);
}
catch (ManageabilityException e)
{
ci?.Dispose();
Console.WriteLine(e.Message);
return;
}
try
{
//Subscribe for an event
GeneralEventsFunctionality.Subscribe(amt);
//UnSubscribe for specific event
GeneralEventsFunctionality.UnSubscribe(amt);
//Un subscribe all existing subscriptions.
GeneralEventsFunctionality.UnSubscribeAll(amt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
amt?.Dispose();
}
}
}
}

View File

@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("GeneralEventsSample")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Intel Corporation")]
[assembly: AssemblyProduct("GeneralEventsSample")]
[assembly: AssemblyCopyright("Copyright © 2020 Intel Corporation")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("45b7bc9a-43d7-467a-b05e-755bfac0950d")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -1,27 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Exe</OutputType>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Label="Kit">
<Kit>$([System.Convert]::ToBoolean(true))</Kit>
<Bin />
<Bin Condition="Exists('..\..\..\Bin')">..\..\..\Bin</Bin>
</PropertyGroup>
<ItemGroup Condition="$(Kit)" Label="Kit References">
<Reference Include="HLAPI">
<HintPath>$(Bin)\HLAPI.dll</HintPath>
</Reference>
<Compile Include="..\..\Common\ProgramInput.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
</ItemGroup>
</Project>

Some files were not shown because too many files have changed in this diff Show More