我正在使用我的c#应用程序中的一个文件,我需要检查每次访问它时的合法性。有没有什么方法可以找到这个文件是来自另一台计算机还是已经在同一台机器上进行了创建? 我觉得有一种标志或其他指示文件从另一台电脑来了,像下面的截图:
如何找到一个文件是否在同一台机器上创建?
0
A
回答
3
此信息存储在NTFS Zone.Identifier
Alternate Data Stream。您可以访问备用数据流非常像普通的文件数据(这本身也是一个流 - 一个无名数据流):
在命令提示符窗口,你必须追加流的名称,由前缀
:
文件路径:more < some_file.exe:Zone.Identifier
在PowerShell中它是这样的:
Get-Content -Path some_file.exe -Stream Zone.Identifier
在这两种情况下,如果从外部位置下载的文件被标记它输出:的ZoneId
[ZoneTransfer]
ZoneId=3
可能的有效值和它们的含义是(from blog entry about ADS):
0 My Computer
1 Local Intranet Zone
2 Trusted sites Zone
3 Internet Zone
4 Restricted Sites Zone
不幸的是,没有CLR类为ADS提供支持(至少没有我知道的)。您可以考虑使用these classes或命令行工具Streams提供给我的Microsoft访问它们。
编辑: 当然,你可以很容易地调用从C#PowerShell命令,但是这将迫使你的应用程序的用户至少有PowerShell 2.0和可能的.NET 4.0或更高版本(不知道后者):
public static void Main(string[] args)
{
using (PowerShell powerShellInstance = PowerShell.Create())
{
powerShellInstance.AddCommand("Get-Content");
powerShellInstance.AddParameter("-Path", @"C:\Path\To\File.exe");
powerShellInstance.AddParameter("-Stream", "Zone.Identifier");
Collection<PSObject> output = powerShellInstance.Invoke();
foreach (PSObject obj in output)
{
if (obj != null && obj.ToString().StartsWith("ZoneId"))
Console.WriteLine(obj);
}
}
}
相关问题
- 1. Java查找两台服务器是否在同一台机器上运行
- 2. 从另一台机器上的服务器创建文件夹
- 3. 如何在同一台机器上创建2个火花大师/工人?
- 4. autotools为什么在一台机器上创建project-File.o,在另一台机器上创建File.o?
- 5. 在同一台机器上安装rails和vb.net是否安全?
- 6. 如何将文件从一台机器传输到另一台机器
- 7. 如何在同一台服务器上创建重复报告
- 8. 如何在同一台机器
- 9. PHP:如何创建和ftp文件到另一台服务器?
- 10. HBase和Hive是否需要共置于同一台机器上?
- 11. iOS4.2和iOS4.1在同一台机器上?
- 12. Liferay在同一台机器上集群
- 13. 同一台机器
- 14. 如何创建一个bat文件以在我的机器中创建一个文件夹?
- 15. 在一台机器上获取JDOMException,但同一个xml在另一台机器上正常工作
- 16. 是否可以在同一台机器上运行多个SQL Server实例
- 17. 是否有可能将多个版本的Oracle.DataAccess.dll放在同一台机器上?
- 18. 在一台计算机上找不到Qt平台插件“windows”
- 19. 如何在一台服务器上创建多个客户端?
- 20. 组播报文在同一台机器
- 21. 如何使用单一平台创建多个Facebook机器人?
- 22. PostgreSQL:如何在同一个窗口机器上创建两个实例?
- 23. 在同一个过程中在同一个文件上创建2个FileStream
- 24. 多台Informatica Powercenter客户机在同一台机器上?
- 25. 检查目标机器上是否存在rpm的安装文件夹,然后创建另一个文件夹
- 26. 在一台机器上获取JDOMException,但是相同的xml在另一台机器上正常工作
- 27. 在另一台服务器上创建文件
- 28. 是否有可能使用git来找出在哪个计算机上创建了一个文件?
- 29. 将同一台机器上的所有数据从一个SQLServer数据库复制到另一个机器上
- 30. 如何在同一台机器上跟踪另一个存储库的分支?
该文件是如何创建的?另一种方法是对文件进行加密签名,以便验证其来源。 – muddymess
“其他机器”如何创建文件?我认为,操作系统只在自己的机器上创建时才跟踪它。也许你可以跟踪创建的用户或所有者,但不是机器CMIIW。尽管操作系统不支持它,但也可以创建自己的自定义应用程序来解决您的问题。也许filewatcher是一个很好的解决方案来匹配你的问题。您可以跟踪和匹配该文件的上次访问和上次修改时间。 –
我认为文件系统中有一些东西显示了这一点。请看[这个截图](http://i60.tinypic.com/30xdav7.jpg) –