Поделиться через


Функция 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

См. также раздел

VideoPortAcquireSpinLockAtDpcLevel

VideoPortReleaseSpinLock