Ресурсы Исполнительной системы
Ресурсы Исполнительной системы
Ресурсы являются вариантом быстрого мьютекса. Ресурсы не являются диспетчерскими объектами, поэтому они не могут иметь имя и использоваться в функции
KeWaitForSingleObject() или KeWaitForMultipleObjects(). Ресурсы предоставляют две формы захвата:
Ресурсы идеально подходят для защиты структур данных, которые могут одновременно читаться несколькими потоками, но должны модифицироваться в каждый момент времени только одним потоком.
Для работы с ресурсами существуют функции запроса эксклюзивного доступа, неэксклюзивного доступа и преобразования уже полученного неэксклюзивного доступа в эксклюзивный и, наоборот, без промежуточных операций освобождения ресурса и запроса нового режима доступа. Все функции должны вызываться на уровне IRQL меньшем DISPATCH_LEVEL.
Функции работы с ресурсами:
2. VOID ExReinitializeResourceLite(IN PERESOURCE Resource);
3. BOOLEAN ExAcquireResourceExclusiveLite(IN PERESOURCE Resource IN BOOLEAN Wait);
4. BOOLEAN ExTryToAcquireResourceExclusiveLite(IN PERESOURCE Resource);
5. BOOLEAN ExAcquireResourceSharedLite(IN PERESOURCE Resource IN BOOLEAN Wait);
6. BOOLEAN ExAcquireSharedStarveExclusive(IN PERESOURCE Resource IN BOOLEAN Waif);
7. BOOLEAN ExAcquireSharedWaitForExclusive(IN PERESOURCE Resource,IN BOOLEAN Waif);
8. VOID ExConvertExclusiveToSharedLite(IN PERESOURCE Resource);
9. BOOLEAN ExIsResourceAcquiredExclusiveLite(IN PERESOURCE Resource);
10. USHORT ExIsResourceAcquiredSharedLite(IN PERESOURCE Resource);
11. ULONG ExGetExclusiveWaiterCount(IN PERESOURCE Resource);
12. ULONG ExGetSharedWaiterCount(IN PERESOURCE Resource);
13. NTSTATUS ExDeleteResourceLite(IN PERESOURCE Resource);
14. VOID ExReleaseResourceForThreadLite(IN PERESOURCE Resource;
15. IN ERESOURCEJTHREAD ResourceThreadld).