代码:
My.Computer.FileSystem.RenameFile("C:\Windows\INF\usbstor.inf", "usbstop.inf")
本意为修改 C:\Windows\INF\usbstor.inf
的文件名,提示错误“对路径的访问被拒绝”
理解为权限问题,但是程序权限修改为 requireAdministrator
或者highestAvailable
都不行,google 没解决
ps: 手动修改该文件名系统也会提示你需要
trustedinstaller提供的权限才能对此文件进行更改
,无法修改
尝试如下代码给C:\Windows\INF\usbstor.inf
文件赋给读取和写入权限,但是并不生效,执行My.Computer.FileSystem.RenameFile("C:\Windows\INF\usbstor.inf", "usbstop.inf")
时仍然提示被访问的路径被拒绝
Dim f2 As New FileIOPermission(FileIOPermissionAccess.Write Or FileIOPermissionAccess.Read, "C:\Windows\INF\usbstor.inf")
Try
f2.Demand()
My.Computer.FileSystem.RenameFile("C:\Windows\INF\usbstor.inf", "usbstop.inf")
Catch s As SecurityException
MsgBox(s.Message, MsgBoxStyle.Information)
End Try
抱歉,题目确实提的有点问题,没说清楚整个问题。
我最终想要实现的是禁用 usb 存储的功能。目前的方案是将注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR\Start
的值设置为 4,当本次设置后,当前目的会生效。但是电脑重启后,虽然该值任然是 4,但是 usb 存储设备依然能被识别。
为此我在网上找到以上方法, 修改 C:\Windows\INF\usbstor.inf 文件名让系统读不到,则不会出现这个 usb 存储设备依然被识别的问题,于是出现了题目的问题。
但是,在我尝试修改该文件名后,重启电脑能查到注册表值为 4,usbstor.inf
文件名已经被修改,但是系统仍然能识别 usb 存储设备。
对此请问有人有好的建议么?
1
ho121 2021-04-13 15:22:17 +08:00
Windows 文件夹下的东西就是被系统保护的,不能随意修改。如果一定要作死修改,可以把文件的权限和拥有者改掉。
|
2
typetraits 2021-04-13 15:26:36 +08:00 1
有两种方法
1. 以管理员身份运行你的程序,通过代码获取该文件所有权,然后更改权限允许你的账户读写,之后修改文件,修改完毕后再恢复权限 2. 使用网上的各种提权工具,让你的程序直接以 System 或 TrustedInstaller 用户权限运行,这样你的代码就不用修改,但是缺点是必须通过提权工具才能执行 |
3
vitozyf OP @ho121 有没有办法从应用级别直接申请最高的权限?否则使用者要自己手动更改目录权限的话很麻烦。尝试申请的 requireAdministrator 或者 highestAvailable 权限貌似都没法 =_=
|
4
vitozyf OP @typetraits 我没有写过 VB,因此在网上找到以下代码以尝试方法 1 中`通过代码获取该文件所有权`,但是并未成功。这段代码是 C#的例子[https://docs.microsoft.com/zh-tw/dotnet/api/system.security.permissions.fileiopermission?view=net-5.0]( https://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); } ``` |
5
typetraits 2021-04-13 18:39:05 +08:00
@vitozyf #4 因为这个文件所有者是 NT SERVICE\TrustedInstaller,你要先修改文件所有者才行
|
6
ysc3839 2021-04-13 21:33:48 +08:00 via Android
怀疑是 X-Y Problem https://coolshell.cn/articles/10804.html
你最终要实现什么? |
7
wevsty 2021-04-13 22:59:11 +08:00
应该是需要 TrustedInstaller 权限来操作
|
8
vitozyf OP @ysc3839 抱歉,确实提的有点问题。
我最终想要实现的是禁用 usb 存储的功能。目前的方案是将注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR\Start 的值设置为 4,当前目的会生效。但是电脑重启后,虽然该值任然是 4,但是 usb 存储设备依然能被识别。 为此我在网上找到以上方法, 修改 C:\Windows\INF\usbstor.inf 文件名让系统读不到,则不会出现这个 usb 存储设备依然被识别的问题。但是,在我尝试修改该文件名后,重启电脑能查到注册表值为 4,usbstor.inf 文件名已经被修改,但是系统仍然能识别 usb 存储设备。 对此您有什么建议么? |
9
no1xsyzy 2021-04-14 09:41:07 +08:00
TrustedInstaller > SYSTEM > Admin
你这样提权似乎是提不到 TrustedInstaller 的 搜索了一下,重启电脑的问题似乎是 BIOS 中将 USB 存储启动了(为了检查启动介质?) Windows 内除了弹出以外没有办法,你考虑下做个移除可移动存储的工具放 shell:startup 里去吧 |
10
g00001 2021-04-14 11:51:44 +08:00
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") |
11
vitozyf OP |