C# 如何限制应用程序仅从已知的USB闪存驱动器运行?
我需要一个应用程序只从一个特定的USB闪存驱动器运行。我用WMIWin32\U Diskdrive类和PNPdeviceID属性做了一些测试。使用此数据将应用程序注册到许可证服务器(web服务)是一个非常好的主意,但我正在寻找第二种方法来重新强制此方法,以使此过程更难中断 我正在考虑在驱动器中创建第二个小的隐藏分区,并将PNPdeviceID获取的序列号或其他信息作为名称定位在其中。接受任何其他想法、方法或建议 提前谢谢C# 如何限制应用程序仅从已知的USB闪存驱动器运行?,c#,security,wmi,usb-drive,C#,Security,Wmi,Usb Drive,我需要一个应用程序只从一个特定的USB闪存驱动器运行。我用WMIWin32\U Diskdrive类和PNPdeviceID属性做了一些测试。使用此数据将应用程序注册到许可证服务器(web服务)是一个非常好的主意,但我正在寻找第二种方法来重新强制此方法,以使此过程更难中断 我正在考虑在驱动器中创建第二个小的隐藏分区,并将PNPdeviceID获取的序列号或其他信息作为名称定位在其中。接受任何其他想法、方法或建议 提前谢谢 编辑:我已经从USB闪存驱动器中知道了一个唯一的ID,应用程序可以检查In
编辑:我已经从USB闪存驱动器中知道了一个唯一的ID,应用程序可以检查Interfacetype属性是否为“USB”。我在web服务支持的许可证管理器中使用PNPDeviceID的哈希值注册应用程序。我正在搜索另一种验证方法。您可以检查卷序列号,这将捕获到临时复制到新格式化的卷,但它不会检测到完整字节的精确卷副本。
您可以检查运行程序的驱动器类型:
string path = Process.GetCurrentProcess().MainModule.FileName;
FileInfo fileInfo = new FileInfo(path);
string driveRoot = fileInfo.Directory.Root.Name;
DriveInfo driveInfo = new DriveInfo(driveRoot);
if (driveInfo.DriveType != DriveType.Removable)
{
MessageBox.Show("Must run from removable drive");
Application.Exit();
}
在你的问题中加入一个问题:一些像Gunbood这样的反作弊软件知道它的文件是由安装程序/更新程序创建的还是由用户复制的。文件中一个字节都没有更改,但不知怎么的,它感觉到了差异,并说安装“被破坏了”。怎么做的我正在使用Win32_drive类中的WMI属性PNPDeviceID,它在任何USB闪存驱动器中都是不同的,即使格式化驱动器,它也会保持不变。我已经知道使用WMI Win32_drive类是否可以移除驱动器。属性InterfaceType返回“USB”。如果应用程序被复制到另一个可移动介质中,又会怎样呢?