Функция ExAcquireResourceExclusiveLite (wdm.h)

Подпрограмма ExAcquireResourceExclusiveLite получает указанный ресурс для монопольного доступа вызывающего потока.

Синтаксис

BOOLEAN ExAcquireResourceExclusiveLite(
  [in, out] PERESOURCE Resource,
  [in]      BOOLEAN    Wait
);

Параметры

[in, out] Resource

Указатель на ресурс, который требуется получить.

[in] Wait

Указывает поведение подпрограммы всякий раз, когда ресурс не может быть получен немедленно. Если задано значение TRUE, вызывающий объект переводится в состояние ожидания, пока ресурс не будет получен. Если значение FALSE, подпрограмма немедленно возвращается независимо от того, можно ли получить ресурс.

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

ExAcquireResourceExclusiveLite возвращает значение TRUE , если ресурс получен. Эта подпрограмма возвращает значение FALSE , если входной параметр Wait имеет значение FALSE и монопольный доступ не может быть предоставлен немедленно.

Комментарии

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

  • Если ресурс в настоящее время не принадлежит, монопольный доступ предоставляется немедленно к текущему потоку.

  • Если вызывающий объект уже приобрел ресурс для монопольного доступа, текущий поток получает тот же тип доступа рекурсивно.-

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

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

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

Вызывающий объект может освободить ресурс, вызвав ExReleaseResourceLite или ExReleaseResourceForThreadLite.

Обычная доставка ядра APC должна быть отключена перед вызовом этой подпрограммы. Отключите обычную доставку APC ядра, вызвав KeEnterCriticalRegion. Доставка должна оставаться отключенной до тех пор, пока ресурс не будет освобожден, после чего его можно повторно включить, вызвав KeLeaveCriticalRegion. Дополнительные сведения см. в разделе Отключение APC.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
Правила соответствия DDI ExclusiveResourceAccess(wdm), HwStorPortProhibitedDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

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

ExAcquireResourceSharedLite

ExGetExclusiveWaiterCount

ExGetSharedWaiterCount

ExInitializeResourceLite

ExIsResourceAcquiredExclusiveLite

ExReinitializeResourceLite

ExReleaseResourceForThreadLite

ExReleaseResourceLite

KeEnterCriticalRegion

KeLeaveCriticalRegion