Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何限制应用程序仅从已知的USB闪存驱动器运行?_C#_Security_Wmi_Usb Drive - Fatal编程技术网

C# 如何限制应用程序仅从已知的USB闪存驱动器运行?

C# 如何限制应用程序仅从已知的USB闪存驱动器运行?,c#,security,wmi,usb-drive,C#,Security,Wmi,Usb Drive,我需要一个应用程序只从一个特定的USB闪存驱动器运行。我用WMIWin32\U Diskdrive类和PNPdeviceID属性做了一些测试。使用此数据将应用程序注册到许可证服务器(web服务)是一个非常好的主意,但我正在寻找第二种方法来重新强制此方法,以使此过程更难中断 我正在考虑在驱动器中创建第二个小的隐藏分区,并将PNPdeviceID获取的序列号或其他信息作为名称定位在其中。接受任何其他想法、方法或建议 提前谢谢 编辑:我已经从USB闪存驱动器中知道了一个唯一的ID,应用程序可以检查In

我需要一个应用程序只从一个特定的USB闪存驱动器运行。我用WMIWin32\U Diskdrive类和PNPdeviceID属性做了一些测试。使用此数据将应用程序注册到许可证服务器(web服务)是一个非常好的主意,但我正在寻找第二种方法来重新强制此方法,以使此过程更难中断

我正在考虑在驱动器中创建第二个小的隐藏分区,并将PNPdeviceID获取的序列号或其他信息作为名称定位在其中。接受任何其他想法、方法或建议

提前谢谢


编辑:我已经从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”。如果应用程序被复制到另一个可移动介质中,又会怎样呢?