可扩展代理程序调用扩展代理程序DLL中的SnmpExtensionQuery函数来解析在一个或多个扩展代理的已注册MIB子树中包含变量的SNMP请求。
BOOL SnmpExtensionQuery(
BYTE 【请求类型】, | |
RFC1157VarBindList【* variableBindings 】 | |
AsnInteger【* ErrorStatus中】, | |
AsnInteger【* ErrorIndex】 | |
); |
参数
【请求类型】
[in]指定SNMP请求类型。此参数可以是以下值之一:
值 | 含义 |
ASN_RFC1157_GETREQUEST | 搜索并从指定的变量接收值。 |
ASN_RFC1157_GETNEXTREQUEST | 在不知道变量的名称的情况下,从变量搜索并接收值。 |
ASN_RFC1157_SETREQUEST | 将值存储在特定变量中。 |
【variableBindings】
[in/out]指向变量绑定列表。
【ErrorStatus中】
[out]指向将返回错误状态结果的变量。此参数可以是以下值之一:
值 | 含义 |
SNMP_ERRORSTATUS_NOERROR | 代理报告传输过程中没有发生错误。 |
SNMP_ERRORSTATUS_TOOBIG | 代理无法将请求的操作的结果放在单个SNMP消息中。 |
SNMP_ERRORSTATUS_NOSUCHNAME | 请求的操作确定了一个未知变量。 |
SNMP_ERRORSTATUS_BADVALUE | 请求的操作尝试更改变量,但指定了语法或值错误。 |
SNMP_ERRORSTATUS_READONLY | 请求的操作尝试根据变量的社区概要更改不允许更改的变量。 |
SNMP_ERRORSTATUS_GENERR | 在所请求的操作期间发生的其他错误之外的错误发生。 |
【ErrorIndex】
[out]指向将返回错误索引结果的变量。
返回值
如果函数成功,返回值为TRUE。
如果函数失败,返回值为FALSE。
备注
当可扩展代理必须在SnmpExtensionInit函数指定的子树中解析得到,得到 【】 下一个或组命令时,必须调用SnmpExtensionQuery功能。对于得到或组命令,扩展代理必须遵循RFC 1157中的规则来解析变量绑定请求或生成错误。
获取下一个命令更复杂,因为扩展代理可能无法解析请求的变量绑定。如果可以解析变量绑定,则扩展代理必须遵循RFC 1157中的规则来解析变量绑定请求或生成错误。如果扩展代理无法解析变量绑定,则必须将RFC1157VarBind 结构的RFC1157VarBind字段更改为SnmpExtensionInit函数的【supportedView】参数中指定的MIB子树值之后的值。例如,如果代理支持视图“.1.3.6.1.4.1.77.1”,则“.1.3.6.1.4.1.77.1.5.1”上的获取下一个命令将导致修改的名称字段为“.1.3 .6.1.4.1.77.2\" 。这表示可扩展代理继续尝试解析与其他扩展代理程序的变量绑定。
重要的是要注意,可扩展代理和扩展代理可能需要在调用SnmpExtensionQuery函数期间交换动态分配的内存。可扩展代理在将其传递给扩展代理的每个RFC1157VarBind结构中动态分配对象标识符。但是,扩展代理必须释放该内存,以便在处理得到 【】 下一个请求时更换对象标识符。扩展代理为可变长度对象类型分配动态内存。可扩展代理需要在将对象放入响应后释放该内存。
为了避免堆损坏和内存泄漏,可扩展代理和扩展代理都必须使用解析到同一堆的内存分配例程。扩展代理应使用SnmpUtilMemAlloc函数分配内存和SnmpUtilMemFree函数来释放内存。这些功能位于实用程序动态链接库SNMPAPI.DLL中。
也可以看看
RFC1157VarBind, SnmpExtensionInit, SnmpUtilMemAlloc, SnmpUtilMemFree