WMI - обновить настройки DCOM программно - PullRequest
2 голосов
/ 04 февраля 2011

Я создал небольшой exe для изменения некоторых настроек DCOM.Exe работает нормально, когда я пытаюсь изменить настройки на другом сервере, где работает exe, но не работает, когда я пытаюсь изменить настройки на том же сервере, где работает exe

Кодниже

Если я задаю strComputer имя другого удаленного компьютера, код работает и обновляет правильные настройки на удаленном компьютере

Ошибка, возникающая при запуске этого обновления при попытке обновить тот же серверэто ошибка, которую я выбрасываю: - «Не удалось получить дескриптор безопасности» с кодом возврата -2147023582

Любая помощь будет принята с благодарностью.Некоторое время я бился головой об стену из-за этого

Dim strComputer As String = "."   'localhost
Dim objWMIService As Object = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

' Get an instance of Win32_SecurityDescriptorHelper
Dim objHelper = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2:Win32_SecurityDescriptorHelper")


' Obtain an instance of the the class using a key property value.
Dim objApp As Object = objWMIService.Get("Win32_DCOMApplicationSetting.AppID='{E9E35B75-5B49-4C13-B928-239F78D695A6}'")


' Get the existing security descriptor for the App
Dim objSD As Object
Dim ret = objApp.GetLaunchSecurityDescriptor(objSD)
If ret <> 0 Then
  Throw new ApplicationException("Could not get security descriptor: " & ret)
End If


' Convert file security descriptor from Win32_SecurityDescriptor format to SDDL format
Dim SDDLstring As String
ret = objHelper.Win32SDToSDDL(objSD, SDDLstring)
If ret <> 0 Then
  Throw new ApplicationException("Could not convert to SDDL: " & ret)
End If


' Set the Launch security descriptor for the App
SDDLstring = SDDLstring & "(A;;CCDCLCSWRP;;;NS)"  
ret = objHelper.SDDLToWin32SD(SDDLstring, objSD)
If ret <> 0 Then
  Throw new ApplicationException("Could not translate SDDL String to Win32SD: " & ret)
End If

ret = objApp.SetLaunchSecurityDescriptor(objSD)
If ret <> 0 Then
  Throw new ApplicationException("Could not set security descriptor: " & ret)
End If

1 Ответ

0 голосов
/ 04 февраля 2011

Я попытался запустить вашу программу в Windows 7 и столкнулся с той же проблемой. Сначала я думал, что добавление параметра Security в строку Moniker решит проблему, но это не так. Затем я запустил вашу программу как администратор, и она сработала. Похоже, что некоторые привилегии безопасности отсутствуют.

...