別の資格情報を使用して以下のコードを実行すると、アクセスが拒否されます (「アクセスが拒否されました (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