Функция 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.
Возвращаемое значение
Никакой
Замечания
Текущий IRQL сохраняется в OldIrql. Затем текущий IRQL сбрасывается на DISPATCH_LEVEL, а указанная блокировка спина приобретается.
Значение OldIrql необходимо указать при выпуске блокировки спина с VideoPortReleaseSpinLock.
Замки спина могут вызвать серьезные проблемы, если не используется разумно. В частности, защита от взаимоблокировки не выполняется, а диспетчеризация отключена во время блокировки спина. Следовательно:
- Код в критическом регионе, защищенном блокировкой спина, не должен быть разыгрываемым и не выполнять ссылки на страницы данных.
- Код в критическом регионе, защищенном блокировкой спина, не может вызывать любую внешнюю функцию, которая может получить доступ к страничных данных или вызвать исключение, а также не может создавать исключения.
- Вызывающий объект должен освободить блокировку спина с VideoPortReleaseSpinLock как можно быстрее.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно в Windows XP и более поздних версиях операционных систем Windows. |
целевая платформа | Настольный |
заголовка | video.h (include Video.h) |
библиотеки | Videoprt.lib |
DLL | Videoprt.sys |
IRQL | <=DISPATCH_LEVEL |