Библиотека Рефераты Курсовые Дипломы Поиск
Библиотека Рефераты Курсовые Дипломы Поиск
сделать стартовой добавить в избранное
Кефирный гриб на сайте www.za4et.net.ru

Компьютеры, Программирование Компьютеры, Программирование     Программное обеспечение Программное обеспечение

Перехват методов интерфейса Iunknown

Брелок LED "Лампочка" классическая.
Брелок работает в двух автоматических режимах и горит в разных цветовых гаммах. Материал: металл, акрил. Для работы нужны 3 батарейки
131 руб
Раздел: Металлические брелоки
Карабин, 6x60 мм.
Размеры: 6x60 мм. Материал: металл. Упаковка: блистер.
44 руб
Раздел: Карабины для ошейников и поводков
Совок №5.
Длина совка: 22 см. Цвет в ассортименте, без возможности выбора.
18 руб
Раздел: Совки

Алексей Остапенко Введение В этой статье рассматривается технология, позволяющая перехватывать вызовы методов интерфейса IU k ow COM-объекта. Кроме исследовательских целей, эта технология может иметь и практическое применение. Она позволяет осуществлять такие полезные действия, как почти прозрачная подмена контекста пользователя, “под которым” производятся вызовы методов удаленного объекта, “агрегирование” удаленных объектов, агрегирование объектов, не поддерживающих агрегацию и т.п. С исследовательской точки зрения перехват вызовов IU k ow позволяет заглянуть во внутренности взаимодействия приложения и используемых им COM-объектов. Например, отлаживая приведенный в статье пример, я обнаружил, что вызов функции Crea eObjec скриптового рантайма приводит к запросу четырех (!) интерфейсов вместо одного у создаваемого объекта. :) Немного теории Интерфейс IU k ow является основополагающим элементом COM. Он имеет 3 метода, управляющих доступом к другим интерфейсам объекта: QueryI erface. AddRef. Release. Перехватив вызовы методов IU k ow , можно управлять набором интерфейсов, предоставляемых объектом “наружу” (например, можно спрятать некоторые из них или добавить свои интерфейсы, сделав вид, что они тоже предоставляются объектом), а также управлять некоторыми параметрами вызова методов интерфейсов (например, proxy bla ke ’ом). Любой другой интерфейс, наследуемый от IU k ow , соответственно, наследует и эти три метода. Работа с любым интерфейсом осуществляется через указатель на этот интерфейс. Физически указатель на интерфейс – это указатель на переменную, которая, в свою очередь, указывает на таблицу указателей на методы этого интерфейса (V BL, см. рисунок 1).   Рисунок 1. Несколько интерфейсов могут ссылаться как на одну и ту же V BL, так и на разные – для клиента это не имеет значения. Кроме того, физически разные экземпляры COM-класса имеют разные указатели на интерфейсы (так как из них при вызове выводится his, см. ниже), но могут иметь (а объекты, реализованные с помощью A L - имеют) одни и те же V BL. Интерфейс может использоваться клиентом напрямую, если COM-объект создавался внутри процесса (i -proc) клиента и в том же апартаменте (apar me ), из которого происходит вызов. В противном случае (внепроцессный (ou -of-proc) объект или другой апартамент) клиент вместо реального интерфейса будет использовать его прокси. Однако в обоих случаях указатель на интерфейс ссылается на указатель на V BL, содержащую указатели на методы. Таким образом, в обоих случаях V BL интерфейса (или его прокси) напрямую доступна в процессе клиента для чтения, и может быть сделана доступной для записи. ПРИМЕЧАНИЕ Компилятор C может разместить V BL в константном сегменте данных, который может быть загружен в страницу памяти с атрибутами защиты “только для чтения” (PAGE READO LY) (за это замечание отдельное спасибо Николаю Меркину и Алексею Ширшову). В этом случае просто так писать в V BL не получится. Но, поскольку V BL находится в адресном пространстве процесса, можно поменять атрибуты защиты страницы на “для чтения и записи” (PAGE READWRI E) с помощью функции Vir ualPro ec .

Кроме этих кратких сведений об устройстве указателей на интерфейс нам понадобится понимание того, как именно происходит вызов и передача параметров в метод интерфейса, реализованного как метод C класса, унаследованного от интерфейса: Клиент вызывает метод QueryI erface: pU k ow ->QueryI erface(IID IDispa ch, rei erpre cas &l ;void >(&pDispa ch)); Этот вызов транслируется примерно в такой: ((V BL )pU k ow )->v bl->QueryI erface(pU k ow , IID IDispa ch,  rei erpre cas &l ;void >(&pDispa ch)); т.е. указатель на интерфейс передается первым параметром для метода. Формат вызова фактически соответствует формату вызова нестатического метода класса в конвенции s dcall. В начале метода указатель на интерфейс заменяется указателем на his (на самом деле через V BL вызывается не сам метод, а сгенерированный компилятором переходник, который корректирует указатель на интерфейс и передает управление собственно методу). Принцип перехвата Для перехвата IU k ow потребуется подменить указатели на методы QueryI erface, AddRef и Release в V BL всех интерфейсов COM-объекта указателями на нашу реализацию этих методов. Другими словами, необходимо установить хук на вызовы этих методов. Методы-перехватчики не могут быть нестатическими методами класса, так как передаваемый в метод указатель на интерфейс никак не связан с his объекта-перехватчика. Кроме того, по полученному указателю на интерфейс нужно уметь определять указатели на оригинальные методы QueryI erface, AddRef и Release перехваченного интерфейса. Эту задачу можно легко решить с помощью статического экземпляра контейнера s d::map (или hash map), позволяющего по указателю на V BL получить структуру (или класс), содержащую указатели на оригинальные реализации QueryI erface и т.п. Наша реализация QueryI erface, помимо делегирования вызовов оригинальному QueryI erface, должна также осуществлять перехват запрашиваемых интерфейсов (если они не были перехвачены ранее) и добавлять соответствующие пары в map. AddRef и Release должны заниматься дополнительным подсчетом ссылок, чтобы отследить момент, когда необходимо снять с интерфейса ранее установленный хук. Реализация перехвата Большая часть действий по перехвату возложена на вспомогательный класс HookE ry. Изначальный перехват интерфейса осуществляется в статическом методе HookI eface: Метод HookI erface RPC AU H IDE I Y HA DLE HookE ry::HookI erface(IU k ow pI f, co s Crede ialsHolder::Crede ialsP r& pCrede ials) {  {  void mp = rei erpre cas &l ;void >(pI f);  CComCri SecLock&l ;CComAu oCri icalSec io > lock(m csHooks);  HookMap::i era or i = m hooks.lower bou d( mp);  if (i == m hooks.e d() ( i ).firs != mp) //а нет ли уже такого хука?  {  // ставим новый хук  // по хорошему, тут бы стоило еще проверять, не вернул ли ew 0  HookP r p ewHook( ew HookE ry()); //  if (p ewHook->Hook(pI f))  {  m hooks.i ser (i , HookMap::value ype( mp, p ewHook));  //предотвращаем преждевременную выгрузку dll  if ( m o alRefCou == 1)   Module.Lock();  }  else  re ur ULL;  }  else  ( i ).seco d->AddRef(); //хук уже есть. просто добавляем ссылку  } //lock.U lock();  //добавляем или достаем crede ials  CComCri SecLock&l ;CComAu oCri icalSec io > lock2(m csCrede ials);  Crede ialsMap::i era or i c = m crede ials.l

ower bou d(pI f);  //такого элемента еще нет – придется добавить  if (i c == m crede ials.e d() ( i c).firs != pI f)  {  m crede ials.i ser (i c, Crede ialsMap::value ype(pI f, pCrede ials));  re ur pCrede ials->Ge Crede ials();  }  else  re ur ( i c).seco d->Ge Crede ials(); } В дальнейшем этот же метод вызывается из перехватчика QueryI erface: Метод QueryI erfaceHook //хук QueryI erface S DME HODIMP HookE ry::QueryI erfaceHook(void pI f, REFIID iid, void ppvObjec ) {  //добываем хелпер-объект  HookE ry pHook =  if (pHook == ULL)  //хук уже кто-то снял :(  re ur ((IU k ow )pI f)->QueryI erface(iid, ppvObjec );  //IClie Securi y должен проходить мимо  if (::I li eIsEqualGUID(iid, IID IClie Securi y))  re ur pHook->m oldQI(pI f, iid, ppvObjec );  //собственно QueryI erface  CComP r&l ;IU k ow > spU k ow ;  HRESUL hr = pHook->m oldQI(pI f, iid, (void )&spU k ow .p);  if (FAILED(hr))  re ur hr;  //добываем пары «логин-пароль»  Crede ialsHolder::Crede ialsP r pCrede ials =  if (pCrede ials != ULL)  {  // устанавливаем хук на интерфейс  RPC AU H IDE I Y HA DLE ide = HookI erface(spU k ow .p, pCrede ials);  if (ide )  {  //и устанавливаем на интерфейс proxy bla ke  hr = ::CoSe ProxyBla ke (spU k ow .p, RPC C AU H WI ,  RPC C AU HZ O E, ULL, RPC C AU H LEVEL DEFAUL ,  RPC C IMP LEVEL IMPERSO A E, ide , EOAC O E);  if (FAILED(hr) && hr != E OI ERFACE)  re ur hr;  }  }   ppvObjec = rei erpre cas &l ;void >(spU k ow .De ach());  re ur S OK; } Подсчет ссылок для подправленных V BL реализован непосредственно в классе HookE ry. ПРЕДУПРЕЖДЕНИЕ Первый вызов HookI erface должен быть произведен сразу после получения первого указателя на любой интерфейс COM-объекта. В противном случае в дальнейшем может возникнуть ситуация, когда хук будет снят, но объект все еще будет жить. Полезная нагрузка В качестве полезной нагрузки рассматриваемый пример осуществляет подмену контекста пользователя. Таким образом, пример раcсчитан на работу с удаленными COM-объектами (CLSC X REMO E SERVER). Контекст пользователя подменяется при помощи вызова CoSe ProxyBla ke с указанием нового RPC AU H IDE I Y HA DLE. ПРИМЕЧАНИЕ Довольно интересный момент - в MSD практически отсутствует информация о том, как правильно создавать RPC AU H IDE I Y HA DLE. Написано, что при определенных условиях он является просто указателем на структуру SEC WI AU H IDE I Y( EX). Однако эксперименты показали, что простое создание такой структуры и подсовывание указателя на нее в CoSe ProxyBla ke не приводит ни к чему, кроме ошибки (в то же время с CoCrea eI s a seEx такой фокус проходит). Опытным путем было установлено, что правильную структуру можно создать вызовом DsMakePasswordCrede ials. Увы, этот API специфичен для ОС Wi 2k и далее, и пример не будет работать под 4. В итоге, для “борьбы” с RPC AU H IDE I Y HA DLE был создан отдельный хелпер-класс Crede ialsHolder. Для хранения соответствия crede ials конкретным интерфейсам используется еще один контейнер s d::map. Стоит отдельно заметить, что в контейнере хранятся не экземпляры классов Crede ialsHolder, а “умные” (smar ) указатели shared p r, реализующие подсчет ссылок.

Например, следующий синтаксис недопустим. // Нет! Это недопустимо. public class Line: Shape, IDraw3D { Ppublic void IDraw3D.Draw() { // = Ошибка! P Console.WriteLine("Отображение 3D-линии"); P} P } Главной причиной использования явной реализации метода интерфейса является необходимость "привязки" соответствующего метода интерфейса к уровню интерфейса. Если добавить ключевое слово public, то это будет означать, что данный метод является членом открытого сектора класса, и "привязка" будет отменена. Тогда вызывающая сторона сможет вызывать только метод Draw(), определенный базовым классом Shape на объектном уровне. // Здесь вызывается переопределенный метод Shape.Draw(). Line myLine = new Line(); myLine.Draw(); Чтобы вызвать метод Draw(), определенный с помощью IDraw3D, мы должны явно получить интерфейсную ссылку, используя любой из ранее указанных подходов. Например: // Это обеспечит вызов метода IDraw3D.Draw(). Line myLine = new Line(); IDraw3D i3d = (IDraw3D) myLine; i3d.Draw(); Разрешение конфликтов имен Явная

1. Методы перехвата API-вызовов в Win32

2. Исследование природных ресурсов планеты с помощью космических методов

3. Исследование клеточного цикла методом проточной цитометрии

4. ОСНОВНЫЕ МЕТОДЫ ГЕНЕТИКИ

5. Методы психогенетики

6. Обзор методов и способов измерения физико-механических параметров рыбы
7. Новейшие методы селекции: клеточная инженерия, генная инженерия, хромосомная инженерия
8. Зажигательные смеси, состав, средства применения и доставки, вызываемые повреждения, методы лечения и защиты

9. Методы и модели демографических процессов

10. Гидрохимический, атмохический и биогеохимический методы поисков

11. Добыча золота методами геотехнологии

12. Государственное регулирование экономики: формы и методы

13. Сущность, методы и формы государственного регулирования внешнеэкономической деятельности Российской Федерации

14. Нелегальная миграция в России и методы борьбы с ней

15. Предмет и метод гражданского права

16. Предмет, метод и система гражданского процессуального права /Украина/

Коляска-трость Everflo "Simple pink".
Коляска-трость - идеальный вариант для путешествий и поездок в общественном транспорте. Характеристики: - Стальная рама. - Одно положение
1300 руб
Раздел: Коляски-трость
Стиральный порошок Attack "BioEX", концентрированный, 0,9 кг.
Концентрированный стиральный порошок Attack "BioEX" подходит для стирки белого, цветного, темного и черного белья. Запасной блок
342 руб
Раздел: Стиральные порошки
Звуковой плакат "Говорящая азбука".
Представляем Вашему вниманию уникальную новинку — развивающие звуковые плакаты, которые содержат стихотворения, занимательные и
849 руб
Раздел: Электронные и звуковые плакаты

17. Корпорация BBC. Формы и методы государственного контроля вещания

18. Формы и методы выхода предприятий на внешний рынок

19. Финансовый контроль: формы, методы, органы

20. Эффективные методы изучения иностранных языков

21. Метод действенного анализа в режиссуре театра, кино и телевидения

22. Соцреализм как метод искусства
23. Дидактические возможности отдельных методов обучения на уроках литературы в старших классах
24. Методы изучения музыкальных произведений крупной формы в старших классах общеобразовательной школы

25. Цивилизационные методы в изучении истории

26. Методы компьютерной обработки статистических данных

27. Решение транспортной задачи методом потенциалов

28. Решение дифференциальных уравнений 1 порядка методом Эйлера

29. Оценка методов и средств обеспечения безошибочности передачи данных в сетях

30. Параллельный интерфейс: LPT-порт

31. Обзор возможных методов защиты

32. Интерфейсы, порты ПК

Игровой надувной цилиндр "Gymex".
Игровой надувной цилиндр GYMEX – очень полезная игрушка для физического развития малыша! Состоит он из трёх прозрачных надувных секций,
419 руб
Раздел: Батуты, надувные центры
Набор разделочных досок на подставке (4 штуки ).
Материал: пластик. Количество: 4 штуки. Каждая доска для определенных продуктов.
2090 руб
Раздел: Пластиковые
Стиральный порошок "INDEX", универсал, 4500 грамм.
Предназначение: для стирки изделий из хлопчатобумажных, льняных, синтетических тканей, а также тканей из смешанных волокон (кроме изделий
786 руб
Раздел: Стиральные порошки

33. Интерфейс SCSI

34. Метод Дэвидона-Флетчера-Пауэлла

35. Защита информации от несанкционированного доступа методом криптопреобразования /ГОСТ/

36. Сравнение эффективности методов сортировки массивов: Метод прямого выбора и метод сортировки с помощью дерева

37. Обучение начальных курсов методам программирования на языке Turbo Pascal

38. Применение методов линейного программирования в военном деле. Симплекс-метод
39. Вычисление площади сложной фигуры методом имитационного моделирования (Windows)
40. Математические методы и языки программирования: симплекс метод

41. Разработка Интерфейса Пользователя АСУ в Среде Delphi

42. Билеты, решения и методичка по Информатике (2.0)

43. Вычисление определённого интеграла с помощью метода трапеций на компьютере

44. Интегрирование методом Симпсона

45. Возможности системы программирования Delphi для создания пользовательского интерфейса

46. Компьютерные вирусы, типы вирусов, методы борьбы с вирусами

47. Анализ криптостойкости методов защиты информации в операционных системах Microsoft Window 9x

48. Виды интерфейсов

Пепельница S.Quire круглая, сталь, 110 мм.
Металлическая круглая пепельница S.QUIRE станет хорошим подарком курящим людям. Глубокий контейнер для пепла снабжен съемной крышкой,
361 руб
Раздел: Пепельницы
Конверт почтовый "Куда-Кому", С4 (229х324 мм), стрип, 50 штук.
Конверт выполнен из офсета, имеет клеевое нанесение типа стрип (отрывная силиконовая лента) и почтовый подсказ "Куда-Кому".
316 руб
Раздел: Прочее
Каталка-автомобиль "Sokol" (с ручкой).
Каталка-автомобиль "Sokol" рекомендуется для малышей, которые пока еще неуверенно сидят и часто падают. Эта модель каталки
2249 руб
Раздел: Каталки

49. Применение метода частотных диаграмм к исследованиям устойчивости систем с логическими алгоритмами управления

50. Лабораторная работа №2 по "Основам теории систем" (Решение задач линейного программирования симплекс-методом. Варианты разрешимости задач линейного программирования)

51. Численные методы. Двойной интеграл по формуле Симпсона

52. Численные методы

53. Метод Зойтендейка

54. Метод конечных разностей или метод сеток
55. "Комплект" заданий по численным методам
56. Аксиоматический метод. Логическое строение геометрии

57. Расчет дифференциального уравнения первого, второго и третьего порядка методом Эйлера

58. Сетевые методы в планировании

59. Вычисление интеграла фукции f (x) (методом Симпсона WinWord)

60. НАХОЖДЕНИЕ ВСЕХ ДЕЙСТВИТЕЛЬНЫХ КОРНЕЙ АЛГЕБРАИЧЕСКОГО МНОГОЧЛЕНА МЕТОДОМ ДЕЛЕНИЯ ОТРЕЗКА ПОПОЛАМ (БИСЕКЦИИ) И МЕТОДОМ ХОРД И КАСАТЕЛЬНЫХ С УКАЗАННОЙ ТОЧНОСТЬЮ И УЧЕТОМ ВОЗМОЖНОЙ КРАТНОСТИ КОРНЕЙ

61. РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ ПЯТИТОЧЕЧНЫМ МЕТОДОМ АДАМСА – БАШФОРТА

62. Вычисление интегралов методом Монте-Карло

63. Построение решения задачи Гурса для телеграфного уравнения методом Римана

64. СИНГУЛЯРНОЕ РАЗЛОЖЕНИЕ В ЛИНЕЙНОЙ ЗАДАЧЕ МЕТОДА НАИМЕНЬШИХ КВАДРАТОВ

Машина-каталка "Лидер", цвет: бордовый.
Игрушечный автомобиль снабжен рулем, фарами, зеркалами заднего вида и звуковыми модулями, а его корпус оформлен в приятном бордовом цвете.
2947 руб
Раздел: Каталки
Игрушка-плита со звуком и подсветкой"Miele".
Все как у мамы! Точная игрушечная копия фирменной плиты MIELE. Игрушка функциональная: конфорки и духовка светятся, издает реалистичные
1680 руб
Раздел: Плиты
Брошюровщик "Heidi Swapp. The Cinch".
Брошюровщик делает квадратные отверстия и предназначен для создания календарей, блокнотов, альбомом и много другого в домашних условиях.
8099 руб
Раздел: Прочее

65. Методы и приемы решения задач

66. Приближенный метод решения интегралов. Метод прямоугольников (правых, средних, левых)

67. Вычислительные методы алгебры (лекции)

68. Решение транспортной задачи методом потенциалов

69. Составление и решение нестандартных уравнений графоаналитическим методом

70. Некоторые дополнительные вычислительные методы
71. Метод прогонки решения систем с трехдиагональными матрицами коэффициентов
72. Итерационные методы решения систем линейных уравнений с неединственными коэффициентами

73. Формула Алексея Юрьевича Виноградова для начала вычислений по методу прогонки Годунова для краевых условий любой сложности

74. Электрографический метод - метод регистрации и анализа биоэлектрических процессов человека и животных

75. Механические и хирургические методы контрацепции

76. Карл Леонгард: методы диагностики личности

77. Стафилококки. Выявление резистентности к метициллину и другим b-лактамным антибиотикам методом скрининга

78. МЕТОДЫ НАРОДНОЙ МЕДИЦИНЫ. ЗАКАЛИВАНИЕ ОРГАНИЗМА

79. Основные методы обследования больного

80. Детский травматизм и методы самостоятельной помощи

Фоторамка на 4 фотографии С34-016 "Alparaisa", 44x32,5 см (белый).
Размеры рамки: 44x32,5х1,5 cм. Размеры фото: - 10х15 см, 1 штука, - 10х10 см, 2 штуки, - 13х18 см, 1 штука. Фоторамка-коллаж для 4-х
388 руб
Раздел: Мультирамки
Подушка для младенца "Selby".
Известно, что необходимое количество здорового сна является условием гармоничного физического и эмоционального развития. Когда малыш спит,
814 руб
Раздел: Подушки для детей
Комплект детского постельного белья "Хоккей".
Постельное белье из бязи выполнено из высококачественного хлопка, что гарантирует крепкий и здоровый сон. Комплект не требует особого
1498 руб
Раздел: Детское, подростковое

81. Современные методы электрокардиостимуляции

82. Современные методы лечения псориаза у детей

83. ДЭНС-ТЕРАПИЯ как новый и современный метод лечения в медицине

84. Русская здрава (методы оздоровления на Руси)

85. Методичка по экспериментальной хирургии (МБФ РГМУ)

86. Современные методы контрацепции
87. Использование криминалистических средств и методов в установлении лица совершившего преступление
88. Криминалистическое исследование документов. Новые и перспективные методы исследования письменной речи

89. Методы и фотоматериалы, применяемые при съемки следов орудий взлома и инструментов

90. Методы очистки сточных вод

91. Экономические методы охраны окружающей среды и особенности их использования в России

92. Проект очистки масло-шламовых сточных вод завода "Топливная аппаратура" электрохимическим методом

93. Загрязнение гидросферы. Методы её защиты

94. Методы очистки сточных вод от нефтепродуктов

95. Частная школа и новые методы образования

96. Классификация методов обучения

Велосипед трехколесный.
Велосипед трехколесный (пластмассовые колеса, с широкой шинкой, без кузова, без передней панели, без гудка). Велосипед рассчитан для детей
935 руб
Раздел: Трехколесные
Магнитная мозаика "Техника".
Количество элементов различной формы - 235 штук. Дополнительных элементов - 15 штук. Количество цветов - 5. Игровое поле - 1. Средний
494 руб
Раздел: Магнитная
Магнитная мозаика "Веселый городок".
Магнитная мозаика "Веселый городок", из которой можно собрать не только городок, но и множество других картинок. В набор входят:
519 руб
Раздел: Магнитная

97. Психологический метод обучения чтению

98. Проблема методов обучения

99. Методы поиска и исследований в преподавании физики


Поиск Рефератов на сайте za4eti.ru Вы студент, и у Вас нет времени на выполнение письменных работ (рефератов, курсовых и дипломов)? Мы сможем Вам в этом помочь. Возможно, Вам подойдет что-то из ПЕРЕЧНЯ ПРЕДМЕТОВ И ДИСЦИПЛИН, ПО КОТОРЫМ ВЫПОЛНЯЮТСЯ РЕФЕРАТЫ, КУРСОВЫЕ И ДИПЛОМНЫЕ РАБОТЫ. 
Вы можете поискать нужную Вам работу в КОЛЛЕКЦИИ ГОТОВЫХ РЕФЕРАТОВ, КУРСОВЫХ И ДИПЛОМНЫХ РАБОТ, выполненных преподавателями московских ВУЗов за период более чем 10-летней работы. Эти работы Вы можете бесплатно СКАЧАТЬ.