Главная. Учебники по программам для графики и дизайна!! Главная страница сайта.
 

Ресурсы Исполнительной системы

Ресурсы являются вариантом быстрого мьютекса. Ресурсы не являются диспетчерскими объектами, поэтому они не могут иметь имя и использоваться в функции
KeWaitForSingleObject() или KeWaitForMultipleObjects(). Ресурсы предоставляют две формы захвата:

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

Ресурсы идеально подходят для защиты структур данных, которые могут одновременно читаться несколькими потоками, но должны модифицироваться в каждый момент времени только одним потоком.
Для работы с ресурсами существуют функции запроса эксклюзивного доступа, неэксклюзивного доступа и преобразования уже полученного неэксклюзивного доступа в эксклюзивный и, наоборот, без промежуточных операций освобождения ресурса и запроса нового режима доступа. Все функции должны вызываться на уровне IRQL меньшем DISPATCH_LEVEL.
Функции работы с ресурсами:

  1. 1. NTSTATUS ExInitializeResourceLite(IN PERESOURCE Resource);
    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).
 
Hosted by uCoz
Google Scholar
Web Informer Button Web Informer Button