1

別の資格情報を使用して以下のコードを実行すると、アクセスが拒否されます (「アクセスが拒否されました (HRESULT からの例外: 0x80070005 (E_ACCESSDENIED))」)。

プログラム全体を標準の資格情報で実行し、管理者のユーザー名とパスワードを WMI 接続オプションに渡すと、アクセスが拒否されます。ただし、プログラムを右クリックして「RunAs」を選択し、管理者のユーザー名とパスワードを入力すると (資格情報を WMI オプションに渡さずに)、機能します。このことから、アカウントには必要な権限があり、必要なすべてのポートが開いていることがわかります。これは DCOM の問題ではないと思います。

wbemtest プログラムも試してみましたが、ユーザー名とパスワードを入力するだけでリモート PC に接続できます。なりすましと認証レベルでどのオプションを選択しても、いつでも接続できます。プログラムでは、これらのオプションにさまざまなパラメーターを設定して実験し (コメント行を参照)、.EnablePrivileges オプションも試しましたが、これらを組み合わせてプログラムを動作させることはできません。ここで何が欠けていますか?

    Sub Main()
    Dim myConnectionOptions As New System.Management.ConnectionOptions
    With myConnectionOptions
        '.EnablePrivileges = True
        '.Impersonation = System.Management.ImpersonationLevel.Impersonate
        '.Authentication = System.Management.AuthenticationLevel.PacketPrivacy
        If TextBoxUserName.Text <> "" Then
            .Username = TextBoxUserName.Text
            .Password = TextBoxPassword.Text
        End If
    End With
    'Establish connection
    Try
        Dim myManagementScope As System.Management.ManagementScope
        myManagementScope = New System.Management.ManagementScope( _
            "\\" & TextBoxComputerName.Text & "\root\cimv2", myConnectionOptions)
        'Connect to WMI namespace
        myManagementScope.Connect()
        Dim myObjectSearcher As New ManagementObjectSearcher( _
            myManagementScope.Path.ToString, "Select * From Win32_ComputerSystem")
        Dim myCollection As ManagementObjectCollection
        Dim myObject As ManagementObject
        'Execute query
        myCollection = myObjectSearcher.Get()
        For Each myObject In myCollection
            If myObject.GetPropertyValue("UserName") Is Nothing Then
                MsgBox("Ctrl-Alt-Del")
            Else
                MsgBox(myObject.GetPropertyValue("UserName").ToString)
            End If
        Next
    Catch e As Exception
        MsgBox("_Connection Error" & e.Message)
    End Try
End Sub
4

1 に答える 1