snmpExtensionQuery 函数 (snmp.h)

[SNMP 可用于“要求”部分中指定的操作系统。 它可能在后续版本中变更或不可用。 请改用 Windows 远程管理,这是 WS-Man 的 Microsoft 实现。]

Microsoft SNMP 服务调用 SnmpExtensionQuery 函数来解析 SNMP 扩展代理的一个或多个已注册 MIB 子树中包含变量的 SNMP 请求。 此函数是 SNMP 扩展代理 API 的元素。

注意 建议使用 SnmpExtensionQueryExex 函数,该函数支持 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

(SNMPv1) PDU 请求类型指定 SNMP 版本 1。 此参数的取值可为下列值之一:

含义
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”, a “.1.3.6.1.4.1.77.1.5.1”上的 “获取下一步 ”请求将导致修改 的名称 字段“.1.3.6.1.4.1.77.2”。 这指示 SNMP 服务继续尝试解析与其他扩展代理的变量绑定。

请务必注意,SNMP 服务和扩展代理可能需要在调用 SnmpExtensionQuery 函数期间交换动态分配的内存。 服务在传递给扩展代理的每个 SnmpVarBind 结构中动态分配对象标识符。 但是,扩展代理必须释放此内存,以便在处理 “获取下一步” 请求时替换对象标识符。 扩展代理为可变长度对象类型分配动态内存。 SNMP 服务在对象放置在响应 PDU 中后释放此内存。

为了避免堆损坏和内存泄漏,SNMP 服务和扩展代理必须使用解析为同一堆的内存分配例程。 扩展代理必须使用 SnmpUtilMemAlloc 函数来分配它传递给 SNMP 服务的内存。 它必须使用 SnmpUtilMemFree 函数释放服务传递回扩展代理的内存。 这些函数位于实用工具动态链接库 SNMPAPI.DLL 中。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 snmp.h

另请参阅

SNMP 函数

简单网络管理协议 (SNMP) 概述

SnmpExtensionInit

SnmpUtilMemAlloc

SnmpUtilMemFree

SnmpVarBind