| Summary: | Тест на работу WMI моникеров | ||
|---|---|---|---|
| Product: | WINE@Etersoft | Reporter: | Константин Кондратюк <kondratyuk> |
| Component: | OLE / DDE / RPC | Assignee: | BUGS@Etersoft <bugs> |
| Status: | DEFERRED --- | QA Contact: | |
| Severity: | minor | ||
| Priority: | P4 | CC: | kondratyuk, lav |
| Version: | 1.0.10 | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | All | ||
| URL: | http://www.script-coding.info/WMI_Processes.html | ||
| Whiteboard: | |||
| Заявки RT: | Связано с: | ||
| Дата напоминания: | |||
| Bug Depends on: | |||
| Bug Blocks: | 3761 | ||
Страница, посвящённая vbs-сценариям для работы с WMI: http://www.script-coding.info/WMI_Processes.html Простой сценарий, запускающий блокнот. Работает на win2k3, в wine возвращает ошибку из-за невозможности создать моникер. On Error Resume Next Set objClass = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2:Win32_Process") If Err.Number <> 0 Then WScript.Echo Err.Number & ": " & Err.Description WScript.Quit End If Res = objClass.Create("notepad.exe", Null, Null, PID) If Res <> 0 Then WScript.Echo "Код ошибки: " & Res End If Из трейса по +ole:
trace:ole:MkParseDisplayName (0x133ad0, L"winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\CIMV2:Win32_Process", 0x32ee
dc, 0x32eee8)
warn:ole:CLSIDFromProgID couldn't open key for ProgID L"winmgmts"
В коде:
strcpyW( buf, progid );
strcatW( buf, clsidW );
if (RegOpenKeyW(HKEY_CLASSES_ROOT,buf,&xhkey))
{
HeapFree(GetProcessHeap(),0,buf);
WARN("couldn't open key for ProgID %s\n", debugstr_w(progid));
return CO_E_CLASSSTRING;
}
Связь WMI-моникера "WinMgmts:" с библиотекой поддержки сценариев WMI осуществляется с помощью раздела HKEY_CLASSES_ROOT\WINMGMTS, в подразделе CLSID которого записан идентификатор, указывающий, в свою очередь, на раздел HKEY_CLASSES_ROOT\CLSID\{172BDDF8-CEEA-11D1-8B05-00600806D9B6}. Раздел же HKEY_CLASSES_ROOT\CLSID\{172BDDF8-CEEA-11D1-8B05-00600806D9B6} содержит подраздел InProcserver32, значением которого по умолчанию является полный путь к файлу wbemdisp.dll, содержащему библиотеку поддержки сценариев WMI и реализующему объект SWbemServices.
http://www.intuit.ru/department/os/compromtwin/12/2.html
Указанные разделы в реестре отсутствуют. Объект WinMgmts не может быть создан, что подтверждается тестом. После добавления записей в реестр появилась необходимость в реализации IParseDisplayName. Добавил сам интерфейс и возможность его получения через IClassFactory_QueryInterface. Теперь тест вызывает метод ParseDisplayName у полученного интерфейса. Видимо, нужно реализовывать. http://msdn.microsoft.com/en-us/library/ms692594(VS.85).aspx IParseDisplayName работает, IMoniker создаётся (ещё появился IMoniker). Теперь очередь за реализацией метода IMoniker::BindToObject #6 не в ту багу :) Тест сократил до вида
On Error Resume Next
Set objClass =
GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number <> 0 Then
WScript.Echo Err.Number & ": " & Err.Description
WScript.Quit
End If
Пока хватает для того, чтобы поведение совпадало с 1С
Больше не поручаем заданий bugs@. Больше не поручаем заданий bugs@. |
Нужен тест на создание моникеров в Windows и wine. intuit.ru: Формат строки WMI-моникера похож на стандартный путь к объектам WMI. При этом моникеры могут состоять из трех частей: * обязательный префикс "WinMgmts:"; * необязательные параметры, определяющие настройки безопасности при работе с WMI ; * необязательный путь к нужному объекту WMI.