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

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

Синтаксис

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

Параметры

[in, out] Resource

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

[in] Wait

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

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

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

Комментарии

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

  • Если ресурс в настоящее время не является владельцем, общий доступ предоставляется немедленно к текущему потоку.
  • Если вызывающий объект уже получил ресурс (для общего или монопольного доступа), текущий поток получает тот же тип доступа рекурсивно. Обратите внимание, что выполнение этого вызова не преобразует монопольный доступ вызывающего объекта к данному ресурсу в общий доступ.
  • Если ресурс в настоящее время принадлежит как общий другому потоку, общий доступ предоставляется вызывающему объекту немедленно, даже если другой поток ожидает монопольного доступа к данному ресурсу.
  • Если ресурс в настоящее время принадлежит как монопольный другому потоку, вызывающий объект либо переводится в состояние ожидания (для параметра Ожидания установлено значение TRUE), либо exAcquireSharedStarveExclusive возвращает значение FALSE.
Абонентам ExAcquireSharedStarveExclusive обычно требуется быстрый доступ к общему ресурсу, чтобы сохранить монопольный метод доступа от выполнения избыточной работы. Например, файловая система может вызвать эту подпрограмму для изменения кэшированного ресурса, например BCB, закрепленного в кэше, прежде чем диспетчер кэша сможет получить эксклюзивный доступ к ресурсу и записать кэш на диск.

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

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

Требования

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

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

ExAcquireResourceSharedLite

ExAcquireSharedWaitForExclusive

ExConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite