Программирование систем защиты
508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.

 

Структура NDIS-пакетов

Драйвер протокола выделяет ресурсы под NDIS-пакеты, заполняет их данными и посылает вниз следующему NDIS-драйверу. Драйверы сетевых карт выделяют ресурсы под NDIS-пакеты, чтобы поместить в них полученные из сети данные и передать наверх соответствующим драйверам. Иногда драйвер протокола размещает NDIS-na-кет и передает его драйверу сетевой карты с требованием, чтобы драйвер сетевой карты скопировал полученные из сети данные в этот пакет. NDIS обеспечивает функции, размещающие и обрабатывающие структуры, из которых состоит NDIS-пакет.
Описатель NDIS-пакета является структурой NDIS_PACKET, содержащей, помимо прочих, следующие поля (см. рис. 28):

  1. 1. закрытые области данных для драйвера минипорта и драйвера протокола;
    2. флаги;
    3. число физических страниц, содержащих пакет;
    4. полную длину пакета;
    5. указатели на описатели первого и последнего буфера пакета.

Описатель буфера является структурой NDIS_BUFFER (в действительности, NDIS_BUFFER определяется как тип MDL), содержащей, помимо всего прочего, следующее:

  1. 1. начальный виртуальный адрес буфера;
    2. смещение буфера относительно страницы;
    3. длину буфера в байтах;
    4. указатель на описатель следующего буфера (или NULL, если его нет).

Основные функции для работы с NDIS-пакетами и NDIS-буферами:

  1. 1) NdisAllocatePacketPool - размещает и инициализирует пространство для пула описателей пакетов;
    2) NdisAllocatePacket - размещает и инициализирует описатель пакета;
    3) NdisReinitializePacket - удаляет все присоединенные буфера из пакета и инициализирует его для повторного использования;
    4) NdisCopyFromPacketToPacket;
    5) NdisQueryPacket - возвращает информацию о «шкете;
    6) NdisFreePacket;
    7) NdisAllocateBufferPool - возвращает указатель, с помощью которого затем можно разместить описатели буферов, вызвав NdisAllocateBufFer;
    8) NdisAllocateBuffer-создает описатель буфера;
    9) NdisChainBufferAtBack (NdisChainBufferAtFront) - присоединяет описатель буфера в хвост (в начало) цепи описателей буферов, присоединенных к пакету;
    10) NdisCopyBuffer; И) NdisFreeBuffer;
    12) NdisGetFirstBufferFromPacket - возвращает указатель на буфер первый в цепи буферов пакета;
    13) NdisUnchainBufferAtBack, NdisUnchainBufferAtFront.

Рис. 28. Структура NDIS-пакета и NDIS-буфера

 
Назад Содержание Вперед


508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.