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


Функция SnmpExtensionQuery (snmp.h)

[SNMP доступен для использования в операционных системах, указанных в разделе Требования. В последующих версиях он может быть изменен или недоступен. Вместо этого используйте удаленное управление Windows, которое является реализацией WS-Man майкрософт.]

Служба Microsoft SNMP вызывает функцию SnmpExtensionQuery для разрешения запросов SNMP, содержащих переменные в одном или нескольких поддереви MIB, зарегистрированных агентом расширения SNMP. Эта функция является элементом API агента расширения SNMP.

Примечание Рекомендуется использовать функцию SnmpExtensionQueryEx , которая поддерживает типы данных SNMP версии 2C (SNMPv2C) и многофазные операции SNMP SET.
 

Синтаксис

BOOL SNMP_FUNC_TYPE SnmpExtensionQuery(
  [in]      BYTE            bPduType,
  [in, out] SnmpVarBindList *pVarBindList,
  [out]     AsnInteger32    *pErrorStatus,
  [out]     AsnInteger32    *pErrorIndex
);

Параметры

[in] bPduType

Указывает тип запроса PDU SNMP версии 1 (SNMPv1). Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
SNMP_PDU_GET
Получение значения или значений указанных переменных.
SNMP_PDU_GETNEXT
Получение значения или значения лексикографического преемника указанной переменной.
SNMP_PDU_SET
Запись значения в определенной переменной.
 

Обратите внимание, что типы запросов PDU были переименованы. Дополнительные сведения см. в разделах Типы переменных SNMP и Запрос типов PDU.

[in, out] pVarBindList

Указатель на список привязок переменных.

[out] pErrorStatus

Указатель на переменную, в которой будет возвращен результат состояния ошибки. Этот параметр может быть одним из следующих значений, определенных SNMPv1.

Значение Значение
SNMP_ERRORSTATUS_NOERROR
Агент сообщает, что во время передачи ошибок не произошло.
SNMP_ERRORSTATUS_TOOBIG
Агенту не удалось поместить результаты запрошенной операции в одно snmp-сообщение.
SNMP_ERRORSTATUS_NOSUCHNAME
Запрошенная операция идентифицировала неизвестную переменную.
SNMP_ERRORSTATUS_BADVALUE
Запрошенная операция попыталась изменить переменную, но она указала ошибку синтаксиса или значения.
SNMP_ERRORSTATUS_READONLY
Запрошенная операция попыталась изменить переменную, которая не может изменяться в соответствии с профилем сообщества переменной.
SNMP_ERRORSTATUS_GENERR
Во время запрошенной операции произошла ошибка, отличной от одной из перечисленных здесь.

[out] pErrorIndex

Указатель на переменную, в которой будет возвращен результат индекса ошибки.

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

Если функция выполняется успешно, возвращается значение TRUE.

Если функция завершается сбоем, возвращается значение FALSE.

Комментарии

Когда служба SNMP получает запрос SNMP PDU, она вызывает функцию SnmpExtensionQuery для обработки запроса. Агент расширения должен следовать правилам RFC 1157, чтобы разрешить привязки переменных или создать ошибку.

Если агент расширения не может разрешить привязки переменных в запросе Get Next , он должен изменить поле имени структуры SnmpVarBind на значение идентификатора объекта сразу после идентификатора поддерживаемого в настоящее время представления поддереве MIB. Например, если агент расширения поддерживает представление ".1.3.6.1.4.1.77.1", запрос Get Next в .1.3.6.1.4.1.77.1.5.1" приведет к изменению поля имени .1.3.6.1.4.1.77.2". Это сигнализирует службе SNMP продолжить попытку разрешения привязок переменных с другими агентами расширения.

Важно отметить, что службе SNMP и агенту расширения может потребоваться обмен динамически выделенной памяти во время вызова функции SnmpExtensionQuery . Служба динамически выделяет идентификатор объекта в каждой структуре SnmpVarBind , которая передается агенту расширения. Однако агент расширения должен освободить эту память, чтобы заменить идентификатор объекта при обработке запроса Get Next . Агент расширения выделяет динамическую память для типов объектов переменной длины. Служба SNMP освобождает эту память после размещения объекта в PDU ответа.

Чтобы избежать повреждения кучи и утечки памяти, служба SNMP и агент расширения должны использовать подпрограммы выделения памяти, которые разрешаются в одну кучу. Агент расширения должен использовать функцию SnmpUtilMemAlloc для выделения памяти, которую он передает службе SNMP. Она должна использовать функцию SnmpUtilMemFree , чтобы освободить память, передается службой обратно агенту расширения. Эти функции находятся в библиотеке служебной динамической компоновки SNMPAPI.DLL.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header snmp.h

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

Функции SNMP

Обзор протокола SNMP

SnmpExtensionInit

SnmpUtilMemAlloc

SnmpUtilMemFree

SnmpVarBind