WMI USB启用和禁用

时间:2012-01-12 11:47:17

标签: wmi

您好我正在使用WMI更改USBSTOR的远程注册表值。我想将start属性的值更改为4或3以启用和禁用。 但是注册表中Start属性的数据类型是DWORD,如果我可以将数据类型调整为不起作用。 我需要将数据类型保持为DWORD。有人可以告诉我如何使用WMI setDWORDValue,以下是我尝试的一段代码,它成功运行但仍然在注册表中start字段的值保持不变。

const uint HKEY_LOCAL_MACHINE = 0x80000002;

ManagementBaseObject methodParams = registryTask.GetMethodParameters(typeOfValue);

methodParams["hDefKey"] = HKEY_LOCAL_MACHINE;// BaseKey;
methodParams["sSubKeyName"] = @"SYSTEM\\CurrentControlSet\\Servic\\USBSTOR";
methodParams["sValueName"] = "Start";

try
{
    methodParams["sValue"] = "3";
}
catch
{
    methodParams["uValue"] = (UInt32)Convert.ToInt32("3");
}

ManagementBaseObject exitValue = registryTask.InvokeMethod(typeOfValue, methodParams, null);

2 个答案:

答案 0 :(得分:0)

使用python的简单解决方案。

import wmi
import win32api,_winreg

c = wmi.WMI()

# To get the binary value of particular subkey
# Please note that 0x80000002 represents HKEY_LOCAL_MACHINE 
ReturnValue, uValue = c.StdRegProv.GetBinaryValue(0x80000002,"AFD","SYSTEM\CurrentControlSet\Services")

# To get the list of all the subkeys available in particular key
ret, subKeys = c.StdRegProv.EnumKey (0x80000002, "SYSTEM\CurrentControlSet\Services")
print ret
for key in subKeys:
  print key

ReturnValue=c.StdRegProv.SetDWORDValue(0x80000002,"Type","SYSTEM\CurrentControlSet\Services\USBSTOR",0x4)

#HKEY_CLASSES_ROOT (2147483648 (0x80000000))
#HKEY_CURRENT_USER (2147483649 (0x80000001))
#HKEY_LOCAL_MACHINE (2147483650 (0x80000002))
#HKEY_USERS (2147483651 (0x80000003))
#HKEY_CURRENT_CONFIG (2147483653 (0x80000005))
#HKEY_DYN_DATA (2147483654 (0x80000006))

答案 1 :(得分:0)

是的,可以做到。以下是引用此Microsoft linkthis的代码。将3389替换为您要使用的新值,并根据需要更改密钥:

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
'Set StdOut = WScript.StdOut
Set oReg=GetObject( _
    "winmgmts:{impersonationLevel=impersonate}!\\" &_ 
    strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp"
strValueName = "PortNumber"

' Display old value
oReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
WScript.Echo "Old RDP value=" & dwValue

' Set new value
dwValue= 3389
oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
If Err = 0 Then
   oReg.GetDWORDValue _
       HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue
   WScript.Echo "New RDP Value =" & dwValue
Else 
   WScript.Echo "Error in creating key" & _
       " and DWORD value = " & Err.Number
End If