0

HKEY_USERS\UserSID の下のレジストリを変更して、ユーザー名を入力し、そのユーザーの既定のプリンターを切り替えることができるアプリケーションを作成しようとしています。ただし、レジストリのそのセクションに値を書き込むことはできないようです。おそらくそれはWindowsの制限ですか?ここに私がこれまで持っているコードがあります。

    Dim strComputer = "."
    Dim objWMIService As Object = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Dim theUsername As String = TextBox1.Text
    Dim theDomain As String = TextBox2.Text

    Dim objAccount As Object = objWMIService.Get("Win32_UserAccount.Name='" & theUsername & "',Domain='" & theDomain & "'")

    Dim theport As RegistryKey
    theport = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows NT\\CurrentVersion\\Devices")
    Dim val As Object = theport.GetValue(ListBox1.SelectedItem)
    theport.Close()
    Dim theSid As String = objAccount.sid
    Dim theKey As RegistryKey = Registry.Users.OpenSubKey(theSid + "\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows", True)
4

1 に答える 1

0

HKEY_USERS\SIDs に何度も書き込みを行ったので、Windows の制限があるとは思いません。しかし、私はこの目的のために vbscript を使用しました。また、ログに記録されている場合にのみ、ユーザー レジストリに読み書きできることを警告する必要があります。ログインしていないユーザーの場合 - ActiveSetup を使用します。

ログに記録されたすべてのユーザーにいくつかのレジストリを書き込む vbs のスクリプトがあります。VB.NETに適応させていただければ幸いです。

Option Explicit

Const HKEY_USERS = &H80000003
Dim objReg, objWMI, colSessions, objSession, colList, colUsers, objUser, Domain, UserName, objUserAccount, SID, WshShell

Set WshShell = CreateObject("WScript.Shell")
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 

Set colSessions = objWMI.ExecQuery("Select * from Win32_LogonSession Where LogonType = 2 Or LogonType = 10") 
If colSessions.Count <> 0 Then 
    For Each objSession in colSessions 
        Set colUsers = objWMI.ExecQuery("Associators of " & "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " & "Where AssocClass=Win32_LoggedOnUser Role=Dependent" )
        For Each objUser in colUsers 
            Domain = objUser.Domain : UserName = objUser.Name
            Set objUserAccount = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2:Win32_UserAccount.Domain='" & Domain & "',Name='" & UserName & "'")
            SID = objUserAccount.SID
            objReg.CreateKey HKEY_USERS, SID & "\Control Panel\Desktop"
            objReg.SetStringValue HKEY_USERS, SID & "\Control Panel\Desktop", "Example", "1"
            objReg.SetDwordValue HKEY_USERS, SID & "\Control Panel\Desktop", "Example", "2"         

        Next 
    Next 
End If 
于 2012-10-30T13:36:05.800 に答える