В системах до Windows Vista, Windows 2008, Windows 7 функциональность ограничена
CREATE_ELEVATED_OBJECT(ProgID: STRING[];
[ RunLevel: STRING[] ]
): OBJECT;
Функция создает объект COM автоматизации и возвращает ссылку на него. Кокласс объекта определяется исходя из программного идентификатора ProgID. Вместо ProgID можно указать CLSID, заключенный в фигурные скобки. На самом деле, первое, что выполнит функция - получит CLSID из ProgID по информации из системного реестра, для чего выполняется поиск ProgID в разделе реестра HKCR.
Параметр RunLevel задает уровень требуемых привилегий. Допустимы следующие уровни.
По умолчанию используется уровень "Administrator".
Далеко не любой
объект может быть создан на неограниченном маркере безопасности локального администратора.
Во-первых, кокласс должен быть соответственным образом зарегистрирован. Строковым параметром "HKCR\CLSID\{CLSID}\LocalizedString"
должно
быть задано дружественное имя,
иначе функция выбросит исключение 868. Повышение
уровня привилегий должно быть разрешено установкой числового параметра "HKCR\CLSID\{CLSID}\Elevation\Enabled"
в 1, иначе функция выбросит исключение 869.
Во-вторых, класс должен быть сконфигурирован (dcomcnfg) для запуска от имени
запускающего пользователя (это установка по умолчанию для большинства настольных
приложений), иначе функция выбросит исключение 867.
Сервер автоматизации ASB ("ASB.Application") соответствует перечисленным
требованиям.
Под Windows Vista при выключенном UAC объект будет создан на прежнем маркере безопасности, т.е. администратор останется неограниченным администратором, а обычный пользователь - обычным пользователем. Фактически при выключенном UAC функция работает аналогично CREATE_OBJECT.
Под предшествующими версиями Windows функция также работает аналогично CREATE_OBJECT.
При работе с элевированным объектом автоматизации следует помнить, что сервер автоматизации возможно запущен от имени другого пользователя, соответственно с другим профилем. Поэтому не следует пытаться модифицировать элевированным объектом раздел HKCU и файлы в профиле. Создаваемые в процессе работы экземпляра ASL-интерпретатора (IASLEngine) объекты автоматизации унаследуют этот (возможно чужой) профиль. Если на этом профиле ни разу не запускался, например, Microsoft Word, создание объекта "Word.Application" приведет к запуску инсталлятора MS Office, что может быть весьма неожиданным для пользователя.
Фактически под Windows Vista и выше функция пользуется моникером
элевации Windows (elevation moniker) и представляет собой некую модификацию приведенного
ниже вызова.
GET_OBJECT("Elevation:RunLevel!new:{CLSID}")
В режиме терминального клиента ASB объект безусловно создается на стороне терминального клиента.
До версии 14.136.020 процедура называлась CreateElevatedOBJECT. В настоящее время допустимы оба варианта имени.
Не найдена одна из OLE-библиотек | Исключение 164 |
Не удалось загрузить OLE-библиотеки | Исключение 138 |
Одна из нужных точек входа в OLE-библиотеках не найдена | Исключение 165 |
Не удалось инициализировать OLE-библиотеки | Исключение 139 |
ProgID или CLSID не найден в реестре | Исключение 140 |
Кокласс не поддерживает интерфейс COM автоматизации IDispatch | Исключение 141 |
Кокласс сконфигурирован неверно | Исключение 867 |
Для кокласса не зарегистрировано дружественное имя | Исключение 868 |
Для кокласса не разрешена элевация | Исключение 869 |
Не удалось создание объекта COM автоматизации | Исключение 142 |
Ошибка компонента | Исключение класса Exc_Object |
VAR
objXL: OBJECT;
BEGIN
objXL := GET_OBJECT(, "Excel.Application");
(* Получили объект кокласса Excel.Application (первый
попавшийся) *)
END.
VAR
objXL: OBJECT;
BEGIN
objXL := GET_OBJECT("c:\Test.xls");
(* Получили ссылку на объект кокласса
Excel.Workbook, *)
(* загруженный из c:\Test.xls *)
(* .................................................. *)
END.