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 |
Description
Константин Кондратюк
2009-04-01 11:26:47 MSD
Страница, посвящённая 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@. |