Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #75, МАРТ 2005 г.

Компонент для хакера

gh05t

Хакер, номер #075, стр. 075-106-3


Теперь в разделе public допиши следующее:

Раздел public

public

{ Public declarations }

constructor Create (AOwner: TComponent); override;

destructor Destroy; override;

procedure GetShutdownPrivileges;

procedure GetLoadDriverPrivileges;

procedure GetSetPrivileges;

Здесь у нашего класса появляются методы, отвечающие за его функциональность. Сразу бросается в глаза наличие, помимо обычных процедур, специфических единиц: constructor и destructor. К тому же, судя по ключевому слову override, они перекрывают одноименные методы родителя. Это не что иное, как конструктор и деструктор объекта нашего класса. В них инициализируются и уничтожаются переменные, устанавливаются некоторые дефолтные значения. Давай создадим обработчики для них. Нажимай Ctrl+Shift+C, и Delphi создаст заголовок для каждой процедуры. Обрати внимание: стандартный обработчик конструктора/деструктора несколько отличается. В нем появилось еще одно ключевое слово «inherited». После этого слова ты можешь вызывать методы родителя компонента. Например в конструкторе, как правило, пишут так:

inherited Create(AOwner);

в деструкторе:

inherited Destroy;

Этими строками мы вызываем методы класса-родителя, чтобы он инициализировал свои переменные в конструкторе и уничтожил их в деструкторе. Важно заметить, что вызов этих методов класса-родителя должен производиться в строго определенных местах: в начале конструктора и в конце деструктора твоего компонента. Преждевременный или запоздалый вызов этих методов может вызвать обращение к несуществующей переменной и, как следствие, ошибку доступа к памяти. Так что всегда следи за вызовами методов родителя.

Вот полный код конструктора нашего компонента:

Переопределенный конструктор

inherited Create(AOwner);

if Win32Platform = VER_PLATFORM_WIN32_NT then isNT:=true;

В первой строке, как уже говорилось, вызов конструктора родителя. Во второй проверяем, работаем ли мы под NT-системой. Наш компонент действует только в NT.

Так как в конструкторе мы ничего не создаем, то и в деструкторе нам разрушать особо нечего, поэтому там, кроме строки «inherited Destroy», ничего нет.

Листинг двух следующих функции целиком я приводить не буду - он очень объемен и не сильно связан с нашей темой. Обращу внимание лишь на одну строку:

Генерирование события

if Assigned(FOnGetLoadDriverPrivileges) then FOnGetLoadDriverPrivileges(Self);

Это выдержка из листинга функции GetLoadDriverPrivileges. В GetShutdownPrivileges строка выглядит практически так же, за исключением FOnGetLoadDriverPrivileges, измененного на FOnGetShutdownPrivileges. Как я уже говорил, это переменные-события, а этой строкой мы генерируем события, предварительно проверяя, существует ли для них обработчик (Assigned(FOnGetLoadDriverPrivileges)).

Назад на стр. 075-106-2  Содержание  Вперед на стр. 075-106-4