Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода Процессы и потоки.doc
Скачиваний:
7
Добавлен:
14.07.2019
Размер:
401.92 Кб
Скачать

Защита процесса от нереентрабельного кода

В связи с тем что глобальные данные процесса разделяются среди всех нитей, по­требуется принять меры предосторожности во избежание конфликтов при доступе к данным, которые могли бы привести к сбою программы. Одним из средств, реализо­ванных в Win32 API для защиты от нереентрабельного кода, является объект крити­ческого участка кода. Критический участок кода (critical section) представляет собой такой объект, который используется только для синхронизации нитей одного процесса. Объект критического участка кода создается с помощью функции InitializeCriticalSection.

После создания объекта критического участка кода для получения доступа к защи­щенному коду в нити необходимо использовать функцию EnterCriticalSection интер­фейса API. Если в пределах критического участка кода выполняется другая нить, тог­да нить, запрашивающая доступ к критическому участку кода, должна ожидать до тех пор, пока нить, владеющая данным объектом, не уступит свои права на него, обра­тившись для этого к LeaveCriticalSection.

Описание функций управления процессами, нитями и волокнами

Все функции интерфейса Win32 API, предназначенные для управления процесса­ми, нитями и волокнами, перечислены в табл. 3.

Таблица 3. Сводка функций управления процессами, нитями и волокнами

Функция

Назначение

Attach Threadlnput

Переадресует ввод из одной нити в другую нить

CancelWartableTimer

Отменяет таймер ожидания, устанавливая его в неактивное состояние

CovertThreadToFiber

Преобразует текущую нить в волокно

CreateEvent

Создает объект события

CreateFiber

Создает объект волокна

CreafeMutex

Создает объект мьютекса

CreateProcess

Создает объект процесса и нити и запускает процесс

CreateProcessAsUser

Создает объект процесса и нити в контексте защиты, установленной для данного пользователя

CreateRemoteThread

Создает нить, которая выполняется в адресном пространстве другого процесса

CreateSemaphore

Создает объект семафора

CreateThread

Создает объект нити и запускает нить

Create WaitableTimer

Создает объект таймера ожидания

DeleteCriticalSection

Удаляет неактивный объект критического участка кода

DeleteFiber

Удаляет объект волокна

DuplicateHandle

Копирует дескриптор любого объекта с тем, чтобы он мог использоваться другим процессом

EnterCriticalSection

Проверяет логическое состояние критического участка кода, и если им никто не владеет, осуществляется вход в этот участок кода

ExitProcess

Завершает процесс и все нити процесса и возвращает код завершения

ExitThread

Завершает одну нить процесса

GetCurrentFiber

Возвращает текущее волокно нити

GetCurrentProcess

Возвращает дескриптор текущего процесса

GetCurrentProcessID

Возвращает идентификатор текущего процесса

GetCurrentThread

Возвращает дескриптор текущей нити

GetCurrentThreadID

Возвращает идентификатор текущей нити

GetExitCodeProcess

Возвращает код завершения указанного процесса. Эта функция может также использоваться для установления факта завершения процесса

GetExitCodeThread

Возвращает код завершения указанной нити. Эта функция может также использоваться для установления факта завершения нити

GetFiberData

Возвращает данные, связанные с объектом волокна

GelPriorityClass

Определяет класс приоритета процесса

GetProcessAffinityMask

Возвращает маску родства процесса

GetProcessHeap

Возвращает дескриптор кучи вызывающего процесса

GetProcessHeaps

Возвращает массив дескрипторов, которые содержат все кучи, принадлежащие вызывающему процессу

GetProcessPriorityBoost

Возвращает повышение приоритета для процесса

GetProcessShutdownParameters

Возвращает параметры закрытия процесса

GetProcessTimes

Возвращает временные характеристики выполнения процесса

GetProcessVersion

Возвращает ожидаемую процессом версию Windows

GetProcessWorkingSetSize

Возвращает размер рабочего множества для процесса

GetQueueStatus

Возвращает входное состояние очереди нити

Функция

Назначение

GetThreadContext

Используется отладчиком для сохранения машинного контекста нити

GetThreadPriority

Возвращает класс приоритета данной нити

GetThreadPriorityBoost

Возвращает повышение приоритета нити

GetThreadSelectorEntry

Используется отладчиком для возврата элемента локальной таблицы дескрипторов (LDT) по заданному адресу сегмента указанной нити

GetThreadTimes

Возвращает временные характеристики выполнения нити

InitializeCrrticalSection

Создает объект критического участка кода для защиты части мультинитевого процесса от одновременного выполнения нескольких нитей

InterlockedCompareExchange

Сравнивает длинные значения синхронизированных переменных

InterlockedDecrement

Уменьшает длинное значение синхронизированной переменной

InterlockedExchange

Меняет местами указанное значение и длинное значение синхронизированной переменной

InterlockedExchangeAdd

Прибавляет указанное значение к длинному значению синхронизированной переменной

Interlockedlncrement

Увеличивает длинное значение синхронизированной переменной

LeaveCriticalSection

Отмечает конец кода, защищенного объектом критического участка кода

MsgWaitForMultipleObjects

Выполняет возврат, когда любые или все объекты переходят в сигнальное состояние, конкретный тип входных данных появляется во входной очереди указанной нити либо истекает время ожидания

MsgWaitForMultipieObjectsEx

То же, что и функция MsgWaitForMuitipleObjects, за исключением того, что к возврату из данной функции приводит также завершение ввода-вывода или асинхронный вызов процедуры (АРС)

OpenEvent

Возвращает дескриптор именованного объекта события

OpenMutex

Возвращает дескриптор именованного объекта мьютекса

OpenProcess

Возвращает дескриптор указанного объекта

OpenSemaphore

Возвращает дескриптор поименованного объекта семафора

OpenWaitableTimer

Возвращает дескриптор объекта таймера ожидания

PulseEvent

Переводит событие из несигнального в сигнальное состояние, а затем опять в несигнальное состояние. Эта функция применяется для освобождения ожидающих нитей и повторной установки блока событий

QueueUserAPC

Размещает в очереди АРС указанной нити объект асинхронного вызова процедуры (АРС) из пользовательского режима

RaiseException

Сигнализирует нити о программно формируемом исключении, которое может быть обработано приложением. Функция RaiseException применяется также в качестве канала связи с отладчиком

ReadProcessMemory

Читает содержимое памяти из адресного пространства процесса

RegisterHotKey

Создает оперативную клавишу для данной нити

ReleaseMutex

Возвращает мьютекс в сигнальное состояние

ReleaseSemaphore

Увеличивает счетчик семафора

ResetEvent

Переводит событие в несигнальное состояние

ResumeThread

Возобновляет выполнение приостановленной нити

SetEvent

Переводит событие в сигнальное состояние

SetPriorityClass

Устанавливает класс приоритета процесса

SetProcessAffinityMask

Устанавливает маску родства процесса

SetProcessPriorityBoost

Устанавливает повышение приоритета для процесса

SetProcessShufdownParameters

Устанавливает параметры закрытия процесса

SetProcessWorkingSetSize

Устанавливает размер рабочего множества для процесса

SetThreadAffinityMask

Устанавливает маску родства нити

SetThreadContext

Устанавливает контекст нити

SetThreadldealProcessor

Устанавливает идеальный процессор для нити

SetThreadPriority

Устанавливает класс приоритета нити

SetThreadPriorityBoost

Устанавливает повышение приоритета для нити

SetUnhandledExceptionFilter

Разрешает приложению установить процедуру перехвата необработанных исключений

SetWartableTimer

Активизирует объект таймера ожидания

SignalObjectAndWait

Переводит один объект в сигнальное состояние и ожидает перехода в сигнальное состояние другого объекта

Sleep

Приостанавливает выполнение нити на заданный промежуток в миллисекундах. При этом может быть запланировано выполнение другой нити

SleepEx

То же что и Sleep за исключением того, что к возврату из данной функции может также привести завершение ввода-вывода или асинхронный вызов процедуры (АРС)

SuspendThread

Приостанавливает выполнение процесса

SwitchToFiber

Планирует запуск волокна

TerminateProcess

Завершает процесс

TerminateThread

Завершает выполнение нити

TIsAlloc

Выделяет индекс локальной памяти нити

TIsFree

Освобождает индекс локальной памяти нити

TIsGetValue

Возвращает объект памяти, назначенный для локальной памяти нити по указанному индексу

TIsGetValue

Устанавливает объект памяти, назначенный для локальной памяти нити по указанному индексу

Функция

Назначение

TryEnterCrrticalSection

Пытается войти в критический участок кода, и если это удается, то приобретает права владения критическим участком кода

UnhandledExceptionFiter

Вызывает используемый по умолчанию фильтр необработанных сообщений или отладчик, если данная программа отлаживается

UnregisteredHotKey

Удаляет оперативную клавишу нити

WattForlnputldle

Ожидает до тех пор, пока для нити не завершится ввод

WaitForMultipleObjects

Ожидает перехода в сигнальное состояние одного или более указанных объектов синхронизации

WaitForMultipleObjectsEx

То же, что и функция WaitForMultipleObjects, за исключением того, что к возврату из данной функции может также привести завершение ввода-вывода или асинхронный вызов процедуры (АРС)

WaitForSingleObject

Ожидает перехода в сигнальное состояние одного объекта синхронизации

WaitForSingleObjectEx

То же, что и функция WaitForSingleObject, за исключением того, что к возврату из данной функции может также привести завершение ввода-вывода или асинхронный вызов процедуры (АРС)

WriteProcessMemory

Используется, главным образом, отладчиком для непосредственной записи данных в память процесса