Тема: VBScript: некоторые интересные объекты Automation
Просматривая наличествующие у себя объекты, обратил внимание на некоторые из них.
Library «OLEPRNLib» (%systemroot%\system32\oleprn.dll). Из интересных методов:
* .ToUtf8(): конвертирование строки в UTF-8;
* .ToUnicode(): конвертирование строки из указанной кодировки в Unicode (в результате получается обычная строка VBScript);
* .DecodeUnicodeName()/.EncodeUnicodeName(): пара взаимно дополняющих друг друга методов, что именно получается в результате «.Encode…», пока не очень понял.
Образец кода (из-за особенностей движка форума) находится во вложенном файле «OleCvtDemo.zip».
Library «COMPATUILib» (%systemroot%\system32\compatui.dll). Часть комплекса Мастера совместимости программ. Из вкусного меня заинтересовало:
* .CheckAdminPrivileges(): проверка наличия административных привилегий у текущего пользователя, возвращает «1»/«0» (не True/False!); меня сие заинтересовало аналогично этому: CMD/BAT: наличие административных привилегий у текущего пользователя;
* .IsExecutableFile(): определение является ли указанный файл исполняемым; определение, похоже, ведётся по сигнатурам в заголовке файла; может сгодиться при борьбе с маскирующимися исполняемыми файлами (вместо использования внешних утилит, наподобие trid.exe, PEiD.exe и т.п.);
* .RunApplication(): запуск файла; для чего может сгодиться — пока не знаю .
Образец кода:
Option Explicit
Dim objUtil
Dim objFSO
Dim intProcessID
Set objUtil = WScript.CreateObject("CompatUI.Util.1")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
With objUtil
WScript.Echo ".CheckAdminPrivileges():", .CheckAdminPrivileges()
WScript.Echo
WScript.Echo ".IsExecutableFile():"
WScript.Echo "---------------------------"
WScript.Echo "c:\boot.ini :", .IsExecutableFile("c:\boot.ini")
WScript.Echo "c:\WINDOWS\system32\more.com :", .IsExecutableFile("c:\WINDOWS\system32\more.com")
WScript.Echo "c:\WINDOWS\system32\notepad.exe :", .IsExecutableFile("c:\WINDOWS\system32\notepad.exe")
WScript.Echo "c:\WINDOWS\system32\eventquery.vbs:", .IsExecutableFile("c:\WINDOWS\system32\eventquery.vbs")
WScript.Echo "c:\WINDOWS\system32\shell32.dll :", .IsExecutableFile("c:\WINDOWS\system32\shell32.dll")
' Несуществующие файлы
WScript.Echo "Несуществующий файл c:\qww.txt :", .IsExecutableFile("c:\qww.txt")
WScript.Echo "Несуществующий файл c:\qww.exe :", .IsExecutableFile("c:\qww.exe")
' Определение происходит не по расширению файла, а, похоже, по сигнатурам
' в заголовке файла — удобно будет отлавливать заразу.
'
' Скопируем calc.exe в c:\MyFile.txt
objFSO.CopyFile "C:\WINDOWS\system32\calc.exe", "c:\MyFile.txt"
' Демонстрируем, что c:\MyFile.txt действительно исполняемый файл, запуская его:
With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
.Get("Win32_Process").Create "c:\MyFile.txt", Null, Null, intProcessID
WScript.Echo "ProcessID :", intProcessID
WScript.Sleep 3000
.Get("Win32_Process='" & CStr(intProcessID) & "'").Terminate
End With
' Проверим, исполняемый ли файл c:\MyFile.txt?
WScript.Echo "c:\MyFile.txt (он же calc.exe) :", .IsExecutableFile("c:\MyFile.txt")
' Удаляем скопированный файл c:\MyFile.txt
objFSO.DeleteFile "c:\MyFile.txt", True
WScript.Echo "---------------------------"
WScript.Echo
WScript.Echo ".RunApplication(), notepad.exe"
.RunApplication "", "notepad.exe", False
End With
Set objFSO = Nothing
Set objUtil = Nothing
WScript.Quit 0
Из плюсов — насколько я понял, обе библиотеки в XP SP2/SP3 присутствуют «из коробки». Из минусов — информации по ним практически никакой нет.