Поделиться через


функция обратного вызова PROTOCOL_CL_INCOMING_CLOSE_CALL (ndis.h)

Функция ProtocolClIncomingCloseCall используется всеми клиентами NDIS, ориентированными на подключение. Все такие клиенты должны иметь полностью функциональные функции ProtocolClIncomingCloseCall .

Примечание Функцию необходимо объявить с помощью типа PROTOCOL_CL_INCOMING_CLOSE_CALL . Дополнительные сведения см. в следующем разделе Примеры.
 

Синтаксис

PROTOCOL_CL_INCOMING_CLOSE_CALL ProtocolClIncomingCloseCall;

void ProtocolClIncomingCloseCall(
  [in] NDIS_STATUS CloseStatus,
  [in] NDIS_HANDLE ProtocolVcContext,
  [in] PVOID CloseData,
  [in] UINT Size
)
{...}

Параметры

[in] CloseStatus

Указывает состояние, указывающее причину разрыва подключения, которое обычно NDIS_STATUS_SUCCESS, чтобы указать, что удаленная сторона вызова запросил закрытие подключения. Любое другое значение указывает на то, что проблемы в сети привели к тому, что диспетчер вызовов прервал подключение.

[in] ProtocolVcContext

Указывает дескриптор контекстной области клиента для каждого виртуального клиента для виртуального клиента, в котором закрывается подключение. Независимо от значения CloseStatus, клиент не может ни отправлять, ни получать данные в VC, указанном NdisVcHandle , который он хранит в этой области контекста.

[in] CloseData

Указатель на буфер, содержащий сообщение о закрытии по определенному протоколу, возможно, предоставленное удаленным клиентом, которое диспетчер вызовов получил по сети, или этот параметр может иметь значение NULL.

Если параметр CloseStatus NDIS_STATUS_SUCCESS, этот параметр имеет значение NULL , если базовый сетевой носитель не поддерживает передачу данных при закрытии подключения. Однако любой конкретный диспетчер вызовов может определить структуру для передачи дополнительных диагностических сведений своим клиентам при разрыве вызовов, вызванных проблемами в сети.

[in] Size

Указывает размер буфера в байтах в CloseData, ноль, если CloseData имеет значение NULL.

Возвращаемое значение

None

Remarks

Вызов ProtocolClIncomingCloseCall указывает, что произошло одно из следующих действий:

  • Диспетчер вызовов получил запрос по сети на закрытие установленного подключения, определяемого NdisVcHandle , который клиент хранит в своей области контекста для каждого VC в ProtocolVcContext .
  • Диспетчер звонков обнаружил, что сетевые проблемы препятствуют дальнейшей передаче данных по установленному подключению.
В любом случае ProtocolClIncomingCloseCall должен выполнять любые операции, определяемые протоколом, например уведомлять собственных клиентов клиента о разрыве соединения. Например, если закрываемый вызов является многоточечным VC, созданным клиентом, ProtocolClIncomingCloseCall должен вызывать NdisClDropParty один или несколько раз, пока только одна сторона не останется в многоточительном VC.

Независимо от того, является ли данный VC одноточечным или многоточечным подключением, ProtocolClIncomingCloseCall должен вызвать NdisClCloseCall , чтобы подтвердить, что клиент не будет ни пытаться отправлять, ни ожидать получения данных по этому конкретному VC. Если диспетчер вызовов создал этот VC, ProtocolClIncomingCloseCall должен вернуть управление после вызова NdisClCloseCall. Диспетчер вызовов несет ответственность за уничтожение или повторное использование всех созданных им VC.

Если клиент изначально создал этот VC для исходящего вызова, ProtocolClIncomingCloseCall может выполнить одно из следующих действий после вызова NdisClDropParty столько раз, сколько потребуется, и NdisClCloseCall:

  • Если параметр CloseStatus NDIS_STATUS_SUCCESS, удалите VC с помощью NdisCoDeleteVc и либо освободите область контекста клиента для каждого VC, либо подготовьте ее для повторного использования при последующем вызове NdisCoCreateVc.
  • Если параметр CloseStatus NDIS_STATUS_SUCCESS, сохраните созданный клиентом виртуальный сервер и подготовьте область контекста для каждого VC для повторного использования при последующем вызове NdisClMakeCall.
  • В противном случае снимите VC с помощью NdisCoDeleteVc и освободите его контекстную область для каждого VC, если диспетчер вызовов указал, что сеть стала неработоспособной.

Примеры

Чтобы определить функцию ProtocolClIncomingCloseCall , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить функцию ProtocolClIncomingCloseCall с именем MyClIncomingCloseCall, используйте тип PROTOCOL_CL_INCOMING_CLOSE_CALL , как показано в следующем примере кода:

PROTOCOL_CL_INCOMING_CLOSE_CALL MyClIncomingCloseCall;

Затем реализуйте функцию следующим образом:

_Use_decl_annotations_
VOID
 MyClIncomingCloseCall(
    NDIS_STATUS  CloseStatus,
    NDIS_HANDLE  ProtocolVcContext,
    PVOID  CloseData,
    UINT  Size
    )
  {...}

Тип функции PROTOCOL_CL_INCOMING_CLOSE_CALL определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции PROTOCOL_CL_INCOMING_CLOSE_CALL в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов NDIS.

Сведения о Use_decl_annotations см. в статье Поведение функции с заметками.

Требования

Требование Значение
Минимальная версия клиента Поддерживается для драйверов NDIS 6.0 и NDIS 5.1 (см. ProtocolClIncomingCloseCall (NDIS 5.1)) в Windows Vista. Поддерживается для драйверов NDIS 5.1 (см. ProtocolClIncomingCloseCall (NDIS 5.1)) в Windows XP.
Целевая платформа Windows
Header ndis.h (включая Ndis.h)
IRQL <= DISPATCH_LEVEL

См. также раздел

NdisClCloseCall

NdisClDropParty

NdisClMakeCall

NdisCmDispatchIncomingCloseCall

NdisCoCreateVc

NdisCoDeleteVc

NdisFreeMemory

NdisFreeToNPagedLookasideList NdisMCmDispatchIncomingCloseCall

ProtocolClDropPartyComplete

ProtocolCoDeleteVc