Функция 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.
Обычная доставка 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) |
См. также раздел
ExAcquireSharedWaitForExclusive
ExConvertExclusiveToSharedLite