Путеводитель по написанию вирусов под Win32


Мультитредность - часть 2


• lpStartAddress: стартовый адрес нового треда. Обычно это адрес функции, имеющая соглашение о вызове WinAPI, которая принимает 32-х битный указатель в качестве аргумента и возвращает 32-х битный код возврата. Ее прототипом является:

DWORD WINAPI ThreadFunc( LPVOID );

• lpParameter: задает 32-х битное значение, которое будет передано треду в качестве аргумента.

• dwCreationFlags: задает дополнительные флаги, контролирующие создание треда. Если задан флаг CREATE_SUSPENDED, тред создается в замороженном состоянии и начнет свое выполнение только тогда, когда будет вызвана функция ResumeThread. Если это значение равно нулю, тред начинает выполняться немедленно после создания. На данный момент другие значения не поддерживаются.

• lpThreadId: указывает на 32-х битную переменную, которая получает идентификатор треда.

Возвращаемые значения ---------------------

• Если вызов функции прошел успешно, возвращаемое значение является хэндлом нового треда.

• Если вызов функции не удастся, возвращаемое значение будет равно NULL. Чтобы получить дополнительную информацию об ошибке, вызовите GetLastError.

Windows 95: CreateThread успешно выполняется только тогда, когда она вызывается в контексте 32-х битной программы. 32-х битная DLL не может создать дополнительный тред, если эта DLL была вызвана 16-ти битной программой.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Функция WaitForSingleObject возвращает управление программе, когда случается одно из следующего:

• Указанный объект находится в сигнализирующем состоянии.

• Закончился заданный интервал времени

DWORD WaitForSingleObject( HANDLE hHandle, // хэндл ожидаемого объекта DWORD dwMilliseconds // интервал таймаута в миллисекундах );

Параметры ---------

• hHandle: идентифицирует объект.

Windows NT: хэндл должен иметь доступ типа SYNCHRONIZE.

• dwMilliseconds: задает интервал таймаута в миллисекундах. Функция возвращает управление, если заданное время закончилось, даже если объект находится в несигнализирующем состоянии. Если dwMilliseconds равно нулю, функция тестирует состояние объекта и возвращает управление немедленно. Если dwMilliseconds равно INFINITE, интервал таймаута бесконечен.




Начало  Назад  Вперед



Книжный магазин