Сообщений 1    Оценка 0        Оценить  
Система Orphus

Runtime определение аппартмента из кода

Автор: Alexey Shirshov
Источник: RSDN Magazine #4-2004
Опубликовано: 28.10.2004
Исправлено: 10.12.2016
Версия текста: 1.0

Q. Как можно в коде MTS/COM+-компонента найти, в каком апартменте он создан, причем для STA – в каком именно STA – host, main или ином, и как-то идентифицировать апартмент (по хендлу окна?) нельзя ли?

A. По смещению 0F80h в TEB находится адрес структуры, которая определяет параметры апартамента. Если указатель равен нулю, СОМ не инициализирован. Если инициализирован, по смещению 12 в этой структуре находится переменная, по значению которой можно определить тип аппартамента.

Пример кода:

      int k;
    __asm{
        mov eax,fs:[18h];
        mov eax,[eax+0F80h];
        mov ebx,[eax+0Ch];
        mov k,ebx
    }
if (k == 0x81){
   //STA
}
elseif (k == 0x141){
   //MTA
}

см. также http://www.rsdn.ru/Forum/?mid=114989


Эта статья опубликована в журнале RSDN Magazine #4-2004. Информацию о журнале можно найти здесь
    Сообщений 1    Оценка 0        Оценить