функция обратного вызова NDK_FN_BUILD_LAM (ndkpi.h)
Функция NdkBuildLam (NDK_FN_BUILD_LAM) получает сопоставление логических адресов адаптера (LAM) от поставщика NDK для практически непрерывной области памяти.
Синтаксис
NDK_FN_BUILD_LAM NdkFnBuildLam;
NTSTATUS NdkFnBuildLam(
[in] NDK_ADAPTER *pNdkAdapter,
[in] MDL *Mdl,
[in] SIZE_T Length,
[in] NDK_FN_REQUEST_COMPLETION RequestCompletion,
[in, optional] PVOID RequestContext,
NDK_LOGICAL_ADDRESS_MAPPING *pNdkLAM,
ULONG *pLAMSize,
[out] ULONG *pFBO
)
{...}
Параметры
[in] pNdkAdapter
Указатель на объект адаптера NDK (NDK_ADAPTER).
[in] Mdl
Список дескрипторов памяти (MDL) или цепочка mdl. Часть цепочки MDL от начального виртуального адреса до количества байтов в параметре Length должна представлять практически непрерывную область памяти.
[in] Length
Число байтов для сопоставления, начиная с виртуального адреса первого MDL. Виртуальный адрес MDL можно получить с помощью макроса MmGetMdlVirtualAddress . Длина не должна превышать общее количество байтов, представленных цепочкой MDL.
[in] RequestCompletion
Указатель на функцию обратного вызова NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION).
[in, optional] RequestContext
Значение контекста для поставщика, передаваемое обратно функции обратного вызова NdkRequestCompletion , указанной в параметре RequestCompletion .
pNdkLAM
Указатель на буфер, который будет содержать структуру NDK_LOGICAL_ADDRESS_MAPPING , содержащую массив страниц адаптера. Массив страниц адаптера хранится в элементе AdapterPageArray , а элемент AdapterPageCount содержит количество элементов страницы адаптера.
pLAMSize
Размер (в байтах) буфера в параметре pNdkLAM для входных данных или фактическое число байтов, записанных для вывода.
[out] pFBO
В этом расположении возвращается первое значение смещения байтов (FBO). FBO — это начальное смещение первой страницы адаптера.
Возвращаемое значение
Функция NdkBuildLam возвращает один из следующих кодов NTSTATUS.
Код возврата | Описание |
---|---|
|
Операция выполнена успешно. |
|
Запрос находится в состоянии ожидания, функция, указанная в параметре RequestCompletion (NDK_FN_REQUEST_COMPLETION), будет вызываться после завершения операции сборки LAM. |
|
Часть цепочки MDL от начального виртуального адреса до количества байтов, указанного в параметре Length , не представляет практически непрерывную область памяти. |
|
Запрос завершился сбоем из-за нехватки ресурсов.
Важно Запрос может завершиться как встроенным, так и асинхронным с этим кодом состояния.
|
|
Размер буфера, указанный параметром *pLAMSize , слишком мал для хранения LAM. В этом случае значение *pLAMSize обновляется с учетом требуемого размера буфера. |
|
Произошла ошибка. |
Комментарии
Часть цепочки MDL от начального виртуального адреса до количества байтов, указанного в параметре Length , должна представлять практически непрерывную область памяти. В противном случае поставщик NDK должен завершить запрос ошибкой. Потребитель NDK отвечает за блокировку цепочки MDL. То есть страницы изменения MDL закрепляются в физической памяти.
Потребитель NDK может вызвать функцию NdkGetPrivilegedMemoryRegionToken (NDK_FN_GET_PRIVILEGED_MEMORY_REGION_TOKEN), чтобы получить маркер привилегированного региона памяти от поставщика NDK.
Все страницы адаптера, возвращаемые поставщиком NDK, должны иметь длину PAGE_SIZE байт, где PAGE_SIZE — это размер страницы памяти, поддерживаемый платформой узла, как определено в wdm.h.
Поставщик должен рассматривать значение виртуального адреса, возвращаемое макросом MmGetMdlVirtualAddress для MDL, как индекс в начале сопоставляемой области памяти. Поставщик не должен использовать значение виртуального адреса в качестве допустимого виртуального адреса для чтения или записи содержимого буфера.
Если поставщик имеет ошибку при обработке запроса NdkBuildLam , поставщик должен освободить все частичные сопоставления, созданные им на данный момент, прежде чем завершить запрос с ошибкой.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Не поддерживается, поддерживается в NDIS 6.30 и более поздних версиях. |
Минимальная версия сервера | Windows Server 2012 |
Целевая платформа | Windows |
Header | ndkpi.h (включая Ndkpi.h) |
IRQL | <=DISPATCH_LEVEL |
См. также раздел
Требования к времени существования объекта NDKPI