如何使用 python 使 USB 只读?
how to make a usb read-only with python?
我正在尝试使用 pycharm 将 USB 设置为只读。
我尝试使用我发现的代码,尽管它们适用于常规文件夹,但不适用于 usb 目录。请帮助我:)
import win32security
import ntsecuritycon as con
import getpass
file_name = r'F:\' #THE USB
sd = win32security.GetFileSecurity(file_name, win32security.DACL_SECURITY_INFORMATION)
dacl = sd.GetSecurityDescriptorDacl()
ace_count = dacl.GetAceCount()
print('Ace count:', ace_count)
for i in range(0, ace_count):
dacl.DeleteAce(0)
userx, domain, type = win32security.LookupAccountName("", "my.user")
dacl.AddAccessAllowedAceEx(win32security.ACL_REVISION, 3, 1179785, userx) # Read only
sd.SetSecurityDescriptorDacl(1, dacl, 0) # may not be necessary
win32security.SetFileSecurity(file_name, win32security.DACL_SECURITY_INFORMATION, sd)
因此,在网上进行了更多挖掘并完全改变了我解决这个问题的方法之后,我终于能够让我的 usb 只读,反之亦然。希望您会发现我的解决方案有用。
我找到了不同的来源,所以这不是真的 "my soultion",它的不同代码根据我的需要进行了编辑和调整。
import _winreg
import usb
REG_PATH = r"SYSTEM\CurrentControlSet\Control\StorageDevicePolicies"
# Equivalent of the _IO('U', 20) constant in the linux kernel.
USBDEVFS_RESET = ord('U') << (4 * 2) | 20
def set_reg(name, value):
try:
_winreg.CreateKey(_winreg.HKEY_LOCAL_MACHINE, REG_PATH)
print "1"
registry_key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, REG_PATH,0, _winreg.KEY_SET_VALUE)
_winreg.SetValueEx(registry_key, name, 0, _winreg.REG_DWORD, value)
_winreg.CloseKey(registry_key)
return True
except:
"oops"
name = "WriteProtect"
value = 1 # 1 is read only 0 is also writable
x = set_reg(name,value) # make the usb read only or writable
print x
#reseting the usb device
my_device = usb.core.find()
my_device.reset() # reset the usb to apply the effect
一些重要说明:
1.this 代码可以分为两部分,第一部分使 USB 只读,反之亦然,第二部分 reloads/resets 来自计算机内部的 USB。
2.you 可能需要在注册表中创建 "StorageDevicePolicies" 项。
3.you 可能需要安装 libusb-win32-devel-filter-1.2.6。0.exe 以便在 USB 设备上创建后端。
4.this解决办法让电脑上的所有usb设备只读(或可写)
我正在尝试使用 pycharm 将 USB 设置为只读。 我尝试使用我发现的代码,尽管它们适用于常规文件夹,但不适用于 usb 目录。请帮助我:)
import win32security
import ntsecuritycon as con
import getpass
file_name = r'F:\' #THE USB
sd = win32security.GetFileSecurity(file_name, win32security.DACL_SECURITY_INFORMATION)
dacl = sd.GetSecurityDescriptorDacl()
ace_count = dacl.GetAceCount()
print('Ace count:', ace_count)
for i in range(0, ace_count):
dacl.DeleteAce(0)
userx, domain, type = win32security.LookupAccountName("", "my.user")
dacl.AddAccessAllowedAceEx(win32security.ACL_REVISION, 3, 1179785, userx) # Read only
sd.SetSecurityDescriptorDacl(1, dacl, 0) # may not be necessary
win32security.SetFileSecurity(file_name, win32security.DACL_SECURITY_INFORMATION, sd)
因此,在网上进行了更多挖掘并完全改变了我解决这个问题的方法之后,我终于能够让我的 usb 只读,反之亦然。希望您会发现我的解决方案有用。 我找到了不同的来源,所以这不是真的 "my soultion",它的不同代码根据我的需要进行了编辑和调整。
import _winreg
import usb
REG_PATH = r"SYSTEM\CurrentControlSet\Control\StorageDevicePolicies"
# Equivalent of the _IO('U', 20) constant in the linux kernel.
USBDEVFS_RESET = ord('U') << (4 * 2) | 20
def set_reg(name, value):
try:
_winreg.CreateKey(_winreg.HKEY_LOCAL_MACHINE, REG_PATH)
print "1"
registry_key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, REG_PATH,0, _winreg.KEY_SET_VALUE)
_winreg.SetValueEx(registry_key, name, 0, _winreg.REG_DWORD, value)
_winreg.CloseKey(registry_key)
return True
except:
"oops"
name = "WriteProtect"
value = 1 # 1 is read only 0 is also writable
x = set_reg(name,value) # make the usb read only or writable
print x
#reseting the usb device
my_device = usb.core.find()
my_device.reset() # reset the usb to apply the effect
一些重要说明:
1.this 代码可以分为两部分,第一部分使 USB 只读,反之亦然,第二部分 reloads/resets 来自计算机内部的 USB。
2.you 可能需要在注册表中创建 "StorageDevicePolicies" 项。
3.you 可能需要安装 libusb-win32-devel-filter-1.2.6。0.exe 以便在 USB 设备上创建后端。
4.this解决办法让电脑上的所有usb设备只读(或可写)