Функция VideoPortAcquireSpinLock (video.h)
Функция VideoPortAcquireSpinLock получает указанную блокировку спина.
Синтаксис
VIDEOPORT_API VOID VideoPortAcquireSpinLock(
[in, out] PVOID HwDeviceExtension,
[in] PSPIN_LOCK SpinLock,
[out] PUCHAR OldIrql
);
Параметры
[in, out] HwDeviceExtension
Указатель на расширение устройства драйвера мини-порта.
[in] SpinLock
Указатель на расположение памяти, содержащее спин-блокировку.
[out] OldIrql
Указатель на расположение памяти, которое получит текущий IRQL.
Возвращаемое значение
None
Remarks
Текущий IRQL сохраняется в OldIrql. Затем текущий код IRQL сбрасывается на DISPATCH_LEVEL и получается указанная блокировка спина.
Значение OldIrql необходимо указать при снятии блокировки спина с помощью VideoPortReleaseSpinLock.
Спин-блокировки могут вызвать серьезные проблемы, если не использовать их разумно. В частности, защита от взаимоблокировки не выполняется, а диспетчеризация отключается во время блокировки спина. Таким образом:
- Код в критической области, защищенной спин-блокировкой, не должен ни быть страничной, ни содержать ссылки на страничные данные.
- Код в критической области, защищенной блокировкой спина, не может ни вызывать внешние функции, которые могут обращаться к страничных данным или вызывать исключение, ни создавать исключения.
- Вызывающий объект должен как можно быстрее освободить спин-блокировку с помощью VideoPortReleaseSpinLock .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно в Windows XP и более поздних версиях операционных систем Windows. |
Целевая платформа | Персональный компьютер |
Верхняя часть | video.h (включить Video.h) |
Библиотека | Videoprt.lib |
DLL | Videoprt.sys |
IRQL | <=DISPATCH_LEVEL |