функция обратного вызова FREE_FUNCTION_EX (wdm.h)
Подпрограмма LookasideListFreeEx освобождает хранилище для записи lookaside-list, когда клиент пытается вставить запись в список lookaside, полный.
Синтаксис
FREE_FUNCTION_EX FreeFunctionEx;
void FreeFunctionEx(
[in] PVOID Buffer,
[in, out] PLOOKASIDE_LIST_EX Lookaside
)
{...}
Параметры
[in] Buffer
Указатель на запись lookaside-list, которая должна быть освобождена.
[in, out] Lookaside
Указатель на структуру LOOKASIDE_LIST_EX, описывающую список lookaside. Эта структура была инициализирована подпрограммой ExInitializeLookasideListEx.
Возвращаемое значение
Никакой
Замечания
Драйвер, создающий список lookaside, может реализовать процедуру LookasideListFreeEx, чтобы освободить ранее выделенные буферы, когда список становится полным и не может содержать больше буферов. Буфер, который не используется, хранится в качестве записи в списке. Все записи в списке lookaside являются буферами единообразного размера, который драйвер указывает при инициализации списка.
Драйвер предоставляет указатель на пользовательский LookasideListFreeEx в качестве входного параметра в вызове ExInitializeLookasideListEx, который инициализирует список lookaside. Если драйвер задает этому параметру значение NULL, то в списке lookaside используется подпрограмма размещения сделки по умолчанию.
Драйвер вызывает подпрограмму ExFreeToLookasideListEx, чтобы вставить ранее выделенную запись в список lookaside. Если список заполнен (то есть если список уже содержит системное максимальное количество записей), ExFreeToLookasideListEx вызывает LookasideListFreeEx, чтобы освободить хранилище для записи.
Подпрограмма LookasideListFreeEx может использовать параметр Lookaside для доступа к данным частного контекста, связанным с списком lookaside. Дополнительные сведения см. в примере кода в ExInitializeLookasideListEx.
Дополнительные сведения о списках lookaside см. в разделе Using Lookaside Lists.
Подпрограмма LookasideListFreeEx вызывается в том же irQL, что и вызов ExFreeToLookasideListEx, который освобождает запись. Для вызова бесплатной записи, которая находится в страничной памяти, вызывающий объект должен запускать IRQL <= APC_LEVEL. Для вызова бесплатной записи, которая находится в непагрепленной памяти, вызывающий объект должен запускать IRQL <= DISPATCH_LEVEL.
Примеры
Чтобы определить подпрограмму обратного вызова LookasideListFreeEx, необходимо сначала указать объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализ кода для драйверов, статический проверяющий драйвер (SDV) и другие средства проверки подлинности, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить подпрограмму обратного вызова LookasideListFreeEx с именем MyLookasideListFreeEx
, используйте тип FREE_FUNCTION_EX, как показано в этом примере кода:
FREE_FUNCTION_EX MyLookasideListFreeEx;
Затем реализуйте подпрограмму обратного вызова следующим образом:
_Use_decl_annotations_
VOID
MyLookasideListFreeEx(
PVOID Buffer,
PLOOKASIDE_LIST_EX Lookaside
)
{
// Function body
}
Тип функции FREE_FUNCTION_EX определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте в определение функции _Use_decl_annotations_
заметку. Заметка _Use_decl_annotations_
гарантирует, что используются заметки, применяемые к типу функции FREE_FUNCTION_EX в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в объявлении функций с помощью типов ролей функций для драйверов WDM. Сведения о _Use_decl_annotations_
см. в поведению функции.
Требования
Требование | Ценность |
---|---|
целевая платформа | Настольный |
заголовка | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | См. раздел "Примечания". |