Программирование драйверов Windows

Группа функций (Ex)InterlockedXxx


В том случае, если разработчика драйвера устраивает то, что размер охраняемых данных составит размер sizeof(LONG) или sizeof(PVOID), то тогда в его распоряжении оказывается набор вызовов InterlockedXxx, например, InterlockedExchange. Эти вызовы реализуют доступ к переменной типа LONG и некоторые операции над ней в эксклюзивном (атомарном) режиме, например, операции увеличения и уменьшения на единицу, сравнения и т.п., хотя многие из них не документированы в DDK. Операции безопасного доступа и сравнения имеются и для указателей.

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

Похожие действия выполняет набор функций ExInterlockedXxx, который позволяет также безопасно работать и со списками. Вызовы InterlockedXxx

являются более быстрыми, если сравнивать их с функционально соответствующими вызовами ExInterlockedXxx.



Содержание раздела