串口连接修复
This commit is contained in:
@@ -9,7 +9,6 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ncalc" Version="1.3.8" />
|
<PackageReference Include="ncalc" Version="1.3.8" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.5-beta1" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.5-beta1" />
|
||||||
<PackageReference Include="System.IO.Ports" Version="11.0.0-preview.4.26230.115" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using DeviceCommand.Base;
|
using DeviceCommand.Base;
|
||||||
|
using Model.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -12,6 +13,8 @@ namespace DeviceCommand.Devices
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class MCc06U:ModbusTcp
|
public class MCc06U:ModbusTcp
|
||||||
{
|
{
|
||||||
|
public MCc06U(TcpConfig config) : base(config)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using Common;
|
using Common;
|
||||||
using Common.Attributes;
|
using Common.Attributes;
|
||||||
using DeviceCommand.Base;
|
using DeviceCommand.Base;
|
||||||
|
using Model.Models;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
@@ -15,9 +16,8 @@ namespace DeviceCommand.Device
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 构造函数:SCPI 通信使用端口 23
|
/// 构造函数:SCPI 通信使用端口 23
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public PW8001()
|
public PW8001(TcpConfig config) : base(config)
|
||||||
{
|
{
|
||||||
Port = 23;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using Common.Attributes;
|
using Common.Attributes;
|
||||||
using DeviceCommand.Base;
|
using DeviceCommand.Base;
|
||||||
|
using Model.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@@ -12,6 +13,9 @@ namespace DeviceCommand.Devices
|
|||||||
[ACPCommand]
|
[ACPCommand]
|
||||||
public class RLT1000 : ModbusTcp
|
public class RLT1000 : ModbusTcp
|
||||||
{
|
{
|
||||||
|
public RLT1000(TcpConfig config) : base(config)
|
||||||
|
{
|
||||||
|
}
|
||||||
private const byte SlaveId = 1;
|
private const byte SlaveId = 1;
|
||||||
|
|
||||||
#region 读取
|
#region 读取
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="SqlSugarCore" Version="5.1.4.215-preview13" />
|
<PackageReference Include="SqlSugarCore" Version="5.1.4.215-preview13" />
|
||||||
<PackageReference Include="System.IO.Ports" Version="11.0.0-preview.4.26230.115" />
|
<PackageReference Include="System.IO.Ports" Version="8.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
BIN
加密狗/ViKey.dll
BIN
加密狗/ViKey.dll
Binary file not shown.
Binary file not shown.
@@ -1,16 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<!-- 配置 ViKey.dll 复制到输出目录 -->
|
|
||||||
<None Include="ViKey.dll">
|
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
|
||||||
</None>
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
252
加密狗/加密狗API类.cs
252
加密狗/加密狗API类.cs
@@ -1,252 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace 加密狗
|
|
||||||
{
|
|
||||||
public enum VikeyType
|
|
||||||
{
|
|
||||||
ViKeyAPP = 0, //实用型加密狗
|
|
||||||
ViKeySTD = 1, //标准型加密狗
|
|
||||||
ViKeyNET = 2, //网络型加密狗
|
|
||||||
ViKeyPRO = 3, //专业型加密狗
|
|
||||||
ViKeyWEB = 4, //身份认证型加密狗
|
|
||||||
ViKeyTIME = 5, //时钟型加密狗,内部独立时钟
|
|
||||||
ViKeyMultiFunctional = 0x0A, //多功能加密狗 支持软件加密 支持文档加密
|
|
||||||
ViKeyMultiFunctionalTime = 0x0B, //多功能时钟加密狗
|
|
||||||
ViKeyInvalid //无效类型
|
|
||||||
};
|
|
||||||
public enum 返回值 : uint
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 成功
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_SUCCESS = 0x00000000,
|
|
||||||
/// <summary>
|
|
||||||
/// 没有找到ViKey加密锁
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_NO_VIKEY = 0x80000001,
|
|
||||||
/// <summary>
|
|
||||||
/// 密码错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_INVALID_PASSWORD = 0x80000002,
|
|
||||||
/// <summary>
|
|
||||||
/// 请先查找加密锁
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_NEED_FIND = 0x80000003,
|
|
||||||
/// <summary>
|
|
||||||
/// 无效的句柄
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_INVALID_INDEX = 0x80000004,
|
|
||||||
/// <summary>
|
|
||||||
/// 数值错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_INVALID_VALUE = 0x80000005,
|
|
||||||
/// <summary>
|
|
||||||
/// 秘钥无效
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_INVALID_KEY = 0x80000006,
|
|
||||||
/// <summary>
|
|
||||||
/// 读取信息错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_GET_VALUE = 0x80000007,
|
|
||||||
/// <summary>
|
|
||||||
/// 设置信息错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_SET_VALUE = 0x80000008,
|
|
||||||
/// <summary>
|
|
||||||
/// 没有机会
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_NO_CHANCE = 0x80000009,
|
|
||||||
/// <summary>
|
|
||||||
/// 权限不足
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_NO_TAUTHORITY = 0x8000000A,
|
|
||||||
/// <summary>
|
|
||||||
/// 地址或长度错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_INVALID_ADDR_OR_SIZE = 0x8000000B,
|
|
||||||
/// <summary>
|
|
||||||
/// 获取随机数错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_RANDOM = 0x8000000C,
|
|
||||||
/// <summary>
|
|
||||||
/// 获取种子错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_SEED = 0x8000000D,
|
|
||||||
/// <summary>
|
|
||||||
/// 通信错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_CONNECTION = 0x8000000E,
|
|
||||||
/// <summary>
|
|
||||||
/// 算法或计算错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_CALCULATE = 0x8000000F,
|
|
||||||
/// <summary>
|
|
||||||
/// 计数器错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_MODULE = 0x80000010,
|
|
||||||
/// <summary>
|
|
||||||
/// 产生密码错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_GENERATE_NEW_PASSWORD = 0x80000011,
|
|
||||||
/// <summary>
|
|
||||||
/// 加密数据错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_ENCRYPT_FAILED = 0x80000012,
|
|
||||||
/// <summary>
|
|
||||||
/// 解密数据错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_DECRYPT_FAILED = 0x80000013,
|
|
||||||
/// <summary>
|
|
||||||
/// ViKey加密锁已经被锁定
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_ALREADY_LOCKED = 0x80000014,
|
|
||||||
/// <summary>
|
|
||||||
/// 无效的命令
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_UNKNOWN_COMMAND = 0x80000015,
|
|
||||||
/// <summary>
|
|
||||||
/// 当前ViKey加密锁不支持此功能
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_NO_SUPPORT = 0x80000016,
|
|
||||||
/// <summary>
|
|
||||||
/// 发生异常
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_CATCH = 0x80000017,
|
|
||||||
/// <summary>
|
|
||||||
/// 未知错误
|
|
||||||
/// </summary>
|
|
||||||
VIKEY_ERROR_UNKNOWN_ERROR = 0xFFFFFFFF,
|
|
||||||
}
|
|
||||||
|
|
||||||
public class 加密狗API类
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 查找加密锁。使用其他API前必须先调用次函数。
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pdwCount">[out] 如果查找到系统中存在加密狗,返回查找到加密狗的个数</param>
|
|
||||||
/// <returns>0表示系统中存在ViKey加密狗。</returns>
|
|
||||||
[DllImport("ViKey.dll")]
|
|
||||||
public static extern uint VikeyFind(ref uint pdwCount);
|
|
||||||
/// <summary>
|
|
||||||
/// 获取加密狗的硬件ID,加密狗的硬件ID是加密狗的唯一标识,每个加密狗的硬件ID都不一样。
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Index">[in]指定要操作加密狗的序号</param>
|
|
||||||
/// <param name="pdwHID">[out]返回加密狗的硬件ID</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[DllImport("ViKey.dll")]
|
|
||||||
public static extern uint VikeyGetHID(ushort Index, out uint pdwHID);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取加密狗的当前权限
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Index">指定要操作加密狗的序号</param>
|
|
||||||
/// <param name="pLevel">返回加密狗的当前权限 0表示加密狗尚未登录 1表示加密狗是用户权限 2表示加密狗是管理员权限</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)]
|
|
||||||
public static extern uint VikeyGetLevel(ushort Index, out byte pLevel);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 以用户权限登录加密狗
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Index"></param>
|
|
||||||
/// <param name="pUserPassushort"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
|
|
||||||
public static extern uint VikeyUserLogin(ushort Index, Byte[] pUserPassword);
|
|
||||||
/// <summary>
|
|
||||||
/// 以管理员权限登录加密狗
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Index"></param>
|
|
||||||
/// <param name="pAdminPassword"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
|
|
||||||
public static extern uint VikeyAdminLogin(ushort Index, Byte[] pAdminPassword);
|
|
||||||
/// <summary>
|
|
||||||
/// 注销登录加密狗 注销后的加密狗权限为0
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Index">[in]指定要操作加密狗的序号</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
|
|
||||||
public static extern uint VikeyLogoff(ushort Index);
|
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
|
||||||
public struct SVikeyTime
|
|
||||||
{
|
|
||||||
public byte cYear;
|
|
||||||
public byte cMonth;
|
|
||||||
public byte cDay;
|
|
||||||
public byte cHour;
|
|
||||||
public byte cMinute;
|
|
||||||
public byte cSecond;
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// 获取时钟型加密狗中的内部独立时间
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Index"></param>
|
|
||||||
/// <param name="pTime"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)]
|
|
||||||
public static extern uint VikeyGetTime(ushort Index, out SVikeyTime pTime);
|
|
||||||
/// <summary>
|
|
||||||
/// 获取时钟型加密狗中的到期时间
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Index"></param>
|
|
||||||
/// <param name="pTime"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)]
|
|
||||||
public static extern uint VikeyGetValidTime(ushort Index, out SVikeyTime pTime);
|
|
||||||
/// <summary>
|
|
||||||
/// 检测时钟型加密狗的时钟功能是否到期
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Index">[in]指定要操作加密狗的序号</param>
|
|
||||||
/// <param name="pIsValid">[out]返回是否到期结果 1表示没有到期 0表示已经到期</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)]
|
|
||||||
public static extern uint VikeyCheckValidTime(ushort Index, out byte pIsValid);
|
|
||||||
/// <summary>
|
|
||||||
/// 从加密狗中的获取4个双字的随机数数据
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Index">指定要操作加密狗的序号</param>
|
|
||||||
/// <param name="pwRandom1"></param>
|
|
||||||
/// <param name="pwRandom2"></param>
|
|
||||||
/// <param name="pwRandom3"></param>
|
|
||||||
/// <param name="pwRandom4"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)]
|
|
||||||
public static extern uint ViKeyRandom(ushort Index,
|
|
||||||
out ushort pwRandom1, out ushort pwRandom2, out ushort pwRandom3, out ushort pwRandom4);
|
|
||||||
[DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)]
|
|
||||||
public static extern uint VikeyReadData(ushort Index, ushort Addr, ushort Length, byte[] buffer);
|
|
||||||
[DllImport("ViKey.dll", CallingConvention = CallingConvention.StdCall)]
|
|
||||||
public static extern uint VikeyWriteData(ushort Index, ushort Addr, ushort Length, byte[] buffer);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// // 7.4.6版本(含)以后的加密狗必须在查找加密狗前调用VikeySetUserSN并输入正确的UserSN后面才能查找到所属用户的加密狗
|
|
||||||
// 7.4.6版本以前的加密狗可以忽略此函数 不用调用此函数
|
|
||||||
// UserSN在ViKey加密管理工具的->帮助中心页面->复制出来
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pUserSN"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[DllImport("ViKey")]
|
|
||||||
public static extern uint VikeySetUserSN(Byte[] pUserSN);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// //设置加密狗ApiKey 硬件版本为7.4.5(含)以后的加密狗必须要调用此接口才能登录
|
|
||||||
//ApiKey 是由ViKey加密管理工具的->加密狗管理->密钥设置页面 通过Api密钥种子生成的
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Index"></param>
|
|
||||||
/// <param name="pApiKey"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[DllImport("ViKey")]
|
|
||||||
public static extern uint VikeySetApiKey(ushort Index, Byte[] pApiKey);
|
|
||||||
|
|
||||||
[DllImport("ViKey")]
|
|
||||||
public static extern uint VikeyUninitialization();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
145
加密狗/加密狗驱动类.cs
145
加密狗/加密狗驱动类.cs
@@ -1,145 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace 加密狗
|
|
||||||
{
|
|
||||||
public class 加密狗驱动类
|
|
||||||
{
|
|
||||||
public static void Uninitialization()
|
|
||||||
{
|
|
||||||
加密狗API类.VikeyUninitialization();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 保留原有方法,但添加新方法
|
|
||||||
public static int 写入加密狗(ushort Index, string 管理密码, string 校验密码)
|
|
||||||
{
|
|
||||||
// 保持不变
|
|
||||||
uint 加密狗数量 = 0;
|
|
||||||
var re = 加密狗API类.VikeyFind(ref 加密狗数量);
|
|
||||||
if (re != 0) return -1;
|
|
||||||
加密狗API类.VikeyAdminLogin(Index, Encoding.Default.GetBytes(管理密码));
|
|
||||||
SHA256 sHA256 = SHA256.Create();
|
|
||||||
加密狗API类.VikeyGetHID(Index, out uint pid);
|
|
||||||
byte[] HID = BitConverter.GetBytes(pid);
|
|
||||||
var pswd = Encoding.UTF8.GetBytes(校验密码);
|
|
||||||
byte[] 校验数组 = HID.Concat(pswd).ToArray();
|
|
||||||
var 校验值 = sHA256.ComputeHash(校验数组);
|
|
||||||
加密狗API类.VikeyWriteData(Index, 0, 32, 校验值);
|
|
||||||
byte[] randomBytes = new byte[96];
|
|
||||||
Random random = new Random();
|
|
||||||
random.NextBytes(randomBytes);
|
|
||||||
加密狗API类.VikeyWriteData(Index, 32, 96, randomBytes);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 新方法:仅检查加密狗时间,不验证密码和数据
|
|
||||||
/// </summary>
|
|
||||||
public static int 寻找加密狗仅检查时间()
|
|
||||||
{
|
|
||||||
uint 加密狗数量 = 0;
|
|
||||||
var re = 加密狗API类.VikeyFind(ref 加密狗数量);
|
|
||||||
if (re != 0 || 加密狗数量 == 0) return -1;
|
|
||||||
|
|
||||||
// 直接返回第一个找到的加密狗
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 原有方法:寻找加密狗并进行完整验证
|
|
||||||
/// </summary>
|
|
||||||
public static int 寻找加密狗(string 用户密码,string 校验密码)
|
|
||||||
{
|
|
||||||
uint 加密狗数量 = 0;
|
|
||||||
var re = 加密狗API类.VikeyFind(ref 加密狗数量);
|
|
||||||
if (re != 0) return -1;
|
|
||||||
int 找到的加密狗 = -1;
|
|
||||||
for (ushort i = 0; i < 加密狗数量; i++)
|
|
||||||
{
|
|
||||||
re = 加密狗API类.VikeyUserLogin(i, Encoding.Default.GetBytes(用户密码));
|
|
||||||
if (检查加密狗数据(i, 校验密码)) return i;
|
|
||||||
}
|
|
||||||
return (int)加密狗数量;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool 检查加密狗数据(ushort Index, string 校验密码)
|
|
||||||
{
|
|
||||||
// 保持不变
|
|
||||||
SHA256 sHA256 = SHA256.Create();
|
|
||||||
加密狗API类.VikeyGetHID(Index, out uint pid);
|
|
||||||
byte[] HID = BitConverter.GetBytes(pid);
|
|
||||||
var pswd = Encoding.UTF8.GetBytes(校验密码);
|
|
||||||
|
|
||||||
byte[] 校验数组 = HID.Concat(pswd).ToArray();
|
|
||||||
var 校验值 = sHA256.ComputeHash(校验数组);
|
|
||||||
var buffer = new byte[32];
|
|
||||||
加密狗API类.VikeyReadData(Index, 0, 32, buffer);
|
|
||||||
|
|
||||||
return buffer.SequenceEqual(校验值);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static TimeSpan 检查剩余时间(int 加密狗)
|
|
||||||
{
|
|
||||||
ushort 序号 = (ushort)加密狗;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// 读时间前必须先登录(用户权限即可)
|
|
||||||
uint re = 加密狗API类.VikeyUserLogin(序号, Encoding.Default.GetBytes("11111111"));
|
|
||||||
if (re != 0)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"VikeyUserLogin 失败: 0x{re:X}");
|
|
||||||
return TimeSpan.Zero;
|
|
||||||
}
|
|
||||||
|
|
||||||
re = 加密狗API类.VikeyGetTime(序号, out 加密狗API类.SVikeyTime 现在时间);
|
|
||||||
if (re != 0)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"VikeyGetTime 失败: 0x{re:X}");
|
|
||||||
return TimeSpan.Zero;
|
|
||||||
}
|
|
||||||
|
|
||||||
re = 加密狗API类.VikeyGetValidTime(序号, out 加密狗API类.SVikeyTime 到期时间);
|
|
||||||
if (re != 0)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"VikeyGetValidTime 失败: 0x{re:X}");
|
|
||||||
return TimeSpan.Zero;
|
|
||||||
}
|
|
||||||
|
|
||||||
re = 加密狗API类.VikeyCheckValidTime(序号, out byte isValid);
|
|
||||||
Console.WriteLine($"VikeyCheckValidTime: ret=0x{re:X}, isValid={isValid}");
|
|
||||||
|
|
||||||
// cYear 是 byte,ViKey 用距 2000 年的偏移量
|
|
||||||
DateTime _现在时间 = new DateTime(现在时间.cYear + 2000, 现在时间.cMonth, 现在时间.cDay,
|
|
||||||
现在时间.cHour, 现在时间.cMinute, 现在时间.cSecond);
|
|
||||||
DateTime _到期时间 = new DateTime(到期时间.cYear + 2000, 到期时间.cMonth, 到期时间.cDay,
|
|
||||||
到期时间.cHour, 到期时间.cMinute, 到期时间.cSecond);
|
|
||||||
|
|
||||||
Console.WriteLine($"加密狗当前时间: {_现在时间:yyyy-MM-dd HH:mm:ss}");
|
|
||||||
Console.WriteLine($"加密狗到期时间: {_到期时间:yyyy-MM-dd HH:mm:ss}");
|
|
||||||
|
|
||||||
return _到期时间 - _现在时间;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"检查剩余时间异常: {ex.Message}");
|
|
||||||
return TimeSpan.Zero;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static uint 验证加密狗SN(Byte[] buffer)
|
|
||||||
{
|
|
||||||
return 加密狗API类.VikeySetUserSN(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static uint 验证加密狗APIkey(ushort index, Byte[] buffer)
|
|
||||||
{
|
|
||||||
return 加密狗API类.VikeySetApiKey(index, buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
using System;
|
|
||||||
using 加密狗;
|
|
||||||
|
|
||||||
// ═══════════════════════════════════════════════════════
|
|
||||||
// 刷入脚本(独立运行,不属于 ACP 主程序流程)
|
|
||||||
// 使用前请先用 ViKey 管理工具设置好密码和到期时间
|
|
||||||
// ═══════════════════════════════════════════════════════
|
|
||||||
public class Program
|
|
||||||
{
|
|
||||||
public static void Main(string[] args)
|
|
||||||
{
|
|
||||||
//写入加密狗(需管理员密码)
|
|
||||||
加密狗驱动类.写入加密狗(0, "00000000", "ACP项目");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user