技术解析

求解一个 VB 代码修改文件名的问题
0
2021-06-03 19:47:47
idczone

代码:

My.Com美国服务器puter.FileSystem.RenameFile("C:\Windows\INF\usbstor.inf", "usbstop.inf")

本意为修改 C:\Windows\INF\usbstor.inf 的文件名,提示错误“对路径的访问被拒绝”

理解为权限问题,但是程序权限修改为 requireAdministrator或者highestAvailable都不行,google 没解决

ps: 手动修改该文件名系统也会提示你需要trustedinstaller提供的权限才能对此文件进行更改,无法修改


Windows 文件夹下的东西就是被系统保护的,不能随意修改。如果一定要作死修改,可以把文件的权限和拥有者改掉。

有两种方法
1. 以管理员身份运行你的程序,通过代码获取该文件所有权,然后更改权限允许你的账户读写,之后修改文件,修改完毕后再恢复权限
2. 使用网上的各种提权工具,让你的程序直接以 System 或 TrustedInstaller 用户权限运行,这样你的代码就不用修改,但是缺点是必须通过提权工具才能执行

有没有办法从应用级别直接申请最高的权限?否则使用者要自己手动更改目录权限的话很麻烦。尝试申请的 requireAdministrator 或者 highestAvailable 权限貌似都没法 =_=

我没有写过 VB,因此在网上找到以下代码以尝试方法 1 中`通过代码获取该文件所有权`,但是并未成功。这段代码是 Chttps://docs.microsoft.com/zh-tw/dotnet/api/system.security.permissions.fileiopermission?view=net-5.0)
```
FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.Read, "C:\\test_r");
f2.AddPathList(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, "C:\\example\\out.txt");
try
{
f2.Demand();
}
catch (SecurityException s)
{
Console.WriteLine(s.Message);
}
```

因为这个文件所有者是 NT SERVICE\TrustedInstaller,你要先修改文件所有者才行

怀疑是 X-Y Problem https://coolshell.cn/articles/10804.html
你最终要实现什么?

应该是需要 TrustedInstaller 权限来操作

抱歉,确实提的有点问题。
我最终想要实现的是禁用 usb 存储的功能。目前的方案是将注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR\Start 的值设置为 4,当前目的会生效。但是电脑重启后,虽然该值任然是 4,但是 usb 存储设备依然能被识别。
为此我在网上找到以上方法, 修改 C:\Windows\INF\usbstor.inf 文件名让系统读不到,则不会出现这个 usb 存储设备依然被识别的问题。但是,在我尝试修改该文件名后,重启电脑能查到注册表值为 4,usbstor.inf 文件名已经被修改,但是系统仍然能识别 usb 存储设备。
对此您有什么建议么?

TrustedInstaller > SYSTEM > Admin
你这样提权似乎是提不到 TrustedInstaller 的
搜索了一下,重启电脑的问题似乎是 BIOS 中将 USB 存储启动了(为了检查启动介质?)
Windows 内除了弹出以外没有办法,你考虑下做个移除可移动存储的工具放 shell:startup 里去吧

VB 不会,用 aardio 试了一下提权以后可以改名,代码如下:
//RUNAS//
import fsys;
import fsys.acl;

//获取权限
fsys.acl.takeOwn("C:\Windows\INF\usbstor.inf")
fsys.acl.icacls("C:\Windows\INF\usbstor.inf","/grant","Administrators:(F)")
//先备份为 usbstor2.inf
string.save("C:\Windows\INF\usbstor2.inf",string.load("C:\Windows\INF\usbstor.inf") )
//移除系统属性
fsys.attrib("C:\Windows\INF\usbstor.inf",4/*_FILE_ATTRIBUTE_SYSTEM*/)

//删除文件实现改名效果
fsys.delete("C:\Windows\INF\usbstor.inf")

非常感谢
对于最终目的来说,修改文件 /删除文件,在电脑重启后对 usb 的禁用修改,仍然失效了。目前看一下其他办法

那不就验证的了 的说法?
因为你对 Windows 做的任何操作都必须在进入 Windows 之后才会起作用
但是重启时 BIOS/UEFI 会先启用此 USB 存储,之后 Windows 会继承此继承情况。
重启后重新拔插 USB 存储就不会出现了吧
你要么进 BIOS 设置关掉,要么 RunService 里塞个自动弹出所有 USB 存储的工具。

s/之后 Windows 会继承此继承情况 /之后 Windows 会继承此启用情况 /

测试了一下大势至管理软件的做法,好像只在设备管理器层面做的处理,不过要一直挂在后台保护

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服