如何扩张windows自带的snmp

问题描述

如何扩张windows自带的snmp

我在扩展snmp时,自己编写的SnmpExtensionInit函数能被调用,但是在用snmpget获取自己扩展的节点时,无法调用预期的SnmpExtensionQuery函数。猜测是在SnmpExtensionInit函数中对象没能注册成功。下面列出部分代码:

#include
#include
#include
#include "testmib.h"
#pragma comment(lib,"Snmpapi.lib")

//#define OID_SIZEOF( Oid ) ( sizeof Oid / sizeof(UINT) )

// template MIB entry
struct MIB_ENTRY
{
AsnObjectIdentifier asnOid;
void * pStorageValue;
CHAR * szStorageName;
BYTE chType;
UINT unAccess;
MIB_ENTRY* pMibNext;
};

UINT g_unMyOIDPrefix[] = {1, 3, 6, 1, 4, 1, 15};
UINT g_unAgeOid[] = {1,1,1};

AsnObjectIdentifier MIB_OidPrefix = { OID_SIZEOF(g_unMyOIDPrefix), g_unMyOIDPrefix};

DWORD g_dwStartTime = 0;

int g_age = 0;

struct MIB_ENTRY g_MyMibTable[] = {

{
    {OID_SIZEOF(g_unAgeOid),g_unAgeOid},
    &g_age,
    "Age",
    ASN_INTEGER,
    SNMP_ACCESS_READ_WRITE,
    NULL
}

};

UINT g_unMyMibCount = (sizeof(g_MyMibTable) / sizeof(MIB_ENTRY));

BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
// TerminateThread(g_hTrapGenThread,0);
// CloseHandle(g_hTrapGenThread);
// CloseHandle(g_hSimulateTrap);
break;
}
return TRUE;
}

// When exported funtion will be called during DLL loading and initialization
BOOL SNMP_FUNC_TYPE SnmpExtensionInit(DWORD dwUptimeReference,HANDLE *phSubagentTrapEvent, AsnObjectIdentifier *pFirstSupportedRegion)
{
*phSubagentTrapEvent = CreateEvent(NULL, FALSE, FALSE, NULL); // creaet this event for the trap

SnmpUtilOidCpy(pFirstSupportedRegion, &MIB_OidPrefix);
//*pFirstSupportedRegion = MIB_OidPrefix;

// *phSubagentTrapEvent = g_hSimulateTrap; // by assigning it pass it to the SNMP service
// So when ever you set this event service will call
// SnmpExtensionTrap exported function

// hard coded initialization

g_age = 0;

g_dwStartTime = GetTickCount();

return SNMPAPI_NOERROR;

}

// this export is to query the MIB table and fields
BOOL SNMP_FUNC_TYPE SnmpExtensionQuery(BYTE bPduType, SnmpVarBindList *pVarBindList, AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex)
{
int nRet = 0;
UINT i = 0;
//AsnObjectName tt;

*pErrorStatus = SNMP_ERRORSTATUS_NOERROR;
*pErrorIndex = 0;

for
    (
    ;
i < pVarBindList->len;
++i)
{
    *pErrorStatus = SNMP_ERRORSTATUS_NOERROR;

    // what type of request we are getting?
    switch(bPduType)
    {
    case SNMP_PDU_GET:// // gets the variable value passed variable in pVarBindList
        pVarBindList->list[i].value.asnType = ASN_INTEGER;
        pVarBindList->list[i].value.asnValue.number = g_age;
        if(*pErrorStatus != SNMP_ERRORSTATUS_NOERROR)
            *pErrorIndex++;
        break;
    case SNMP_PDU_GETNEXT: // gets the next variable related to the passed variable in pVarBindList

        *pErrorStatus = SNMP_ERRORSTATUS_NOSUCHNAME;
        *pErrorIndex++;
        break;
    case SNMP_PDU_SET: // sets a variable
        g_age = pVarBindList->list[i].value.asnValue.counter;
        *pErrorStatus = SNMP_ERRORSTATUS_NOERROR;
            //*pErrorIndex++;
        break;
    default:
        *pErrorStatus = SNMP_ERRORSTATUS_NOSUCHNAME;
        *pErrorIndex++;
    }
}   

return SNMPAPI_NOERROR;

}

时间: 2024-10-23 22:47:56

如何扩张windows自带的snmp的相关文章

Windows服务器上配置SNMP服务方法

SNMP(Simple Network Management Protocol,简单网络管理协议),用来对通信线路进行管理.在Windows服务器上配置SNMP服务时,使用手动填写信息太麻烦.下面是使用命令行执行配置文件来实现. 创建snmp.inf [NetOptionalComponents] SNMP = 1 [SNMP] Contact_Name = "ITSupport" Location = "ServerRoom" Service = Physical

Windows服务器上配置SNMP服务的方法

SNMP(Simple Network Management Protocol,简单网络管理协议),用来对通信线路进行管理.在Windows服务器上配置SNMP服务时,使用手动填写信息太麻烦.下面是使用命令行执行配置文件来实现. 创建snmp.inf [NetOptionalComponents] SNMP = 1 [SNMP] Contact_Name = "ITSupport" Location = "ServerRoom" Service = Physical

用Windows自带的工具结束进程

怎么才能关掉一个用任务管理器关不了的进程?我前段时间发现我的机子里多了一个进程,只要开机就在,我用任务管理器却怎么关也关不了 杀进程很容易,随便找个工具都行.比如IceSword.关键是找到这个进程的启动方式,不然下次重启它又出来了.顺便教大家一招狠的.其实用Windows自带的工具就能杀大部分进程: c:\>ntsd -c q -p PID 只有System.SMSS.EXE和CSRSS.EXE不能杀.前两个是纯内核态的,最后那个是Win32子系统,ntsd本身需要它.ntsd从2000开始就

仿Windows自带扫雷的小程序

一直感觉Windows自带的扫雷程序挺有意思的.学习VC也有很长的时间了,一直没有真正的用心作过什么东西.决定先做个扫雷练练手.由于对MFC掌握的不是很好,程序中的小臭虫还希望各位兄弟们多多指教,共同进步. 一.主要思路及实现方法 对于界面部分:采取的是贴图技术即在窗口上设置上各种背景图片.在有鼠标以及键盘操作的时候进行相应的替换.此处主要用到的都是对于后台部分:在第一次点击雷区的时候埋下所有的雷,同时开始计时.然后在每一次鼠标点击的时候进行判断,若触雷或标记错误的展开则失败,若成功挖出最后一颗

windows自带的画图工具怎么裁剪图片?

  windows自带的画图工具怎么裁剪图片?          1.首先,找到自己要截取的页面,按PrtSc键截取全屏,然后打开电脑的"画图"工具,按Crtl+V粘贴到画图上 2.如图所示,然后点击选择右上角的"裁剪" 3.然后进入裁剪模式,拖动光标,选择你要剪切留下的部分 4.选好后,再次点击"裁剪",就可以剩下所需要的部分了 5.除了上面的的方法,还可以直接右键选择"裁剪",后面的方法同上 6.最后,选择右上角的保存即可

windows自带全屏截图快捷键是哪个?

  windows自带全屏截图快捷键是哪个? 画图工具 windows自带全屏截图快捷键: 同时按下键盘上Ctrl+PrtScSysRq这两个按键.按了之后你会发现好像跟没按一样,这别管.你打开Windows系统的画图工具,然后按粘贴(快捷键Ctrl+V)就能开到截图了.这个截屏是截取屏幕全屏画面.另外PrtScSysRq键是F12旁边的那个,别按错了. 画图工具 延伸阅读:windows自带局部截图快捷键 同时按下键盘上Alt+PrtScSysRq这两个按键可以截取当前的窗口图.和上面一样粘贴

用Windows自带的功能保护秘密不泄漏

Windows自带的功能,为了方便我们的使用,有自动记录的功能,但是这些功能有些事情也把我们的"行踪"给暴露了,这个时候应该怎么办呢?请看本文为你介绍的八种方法,可以让你使用的电脑了无痕迹. 1.彻底地一次删除文件 首先,应从系统中清除那些你认为已肯定不用的文件,这里我们指的是你丢弃到回收站中的所有垃圾文件.当然,我们还可以在任何想起的时候把回收站清空(双击回收站图标,然后选择"文件"菜单,再选择"清空回收站(B)" 命令),但更好的方法是关闭回

彻底禁止Windows自带防火墙的方法

  1.禁用Windows自带防火墙服务 开始→设置→控制面板→管理工具→服务,打开后,在右边的窗口中右击"Application Layer Gateway Service"服务,选择"属性",在弹出的窗口中设置"服务状态"为"停止",把"启动类型"设为"已禁用",相关截图如下所示: 2.删除Windows自带防火墙相关文件 找到C:/WINDOWS/system32下的firewal

开机启动-想通过注册系统服务实现开机自启windows自带计算器

问题描述 想通过注册系统服务实现开机自启windows自带计算器 在网上找到的代码框架,自己填了最后一句,但是运行后没有实现开机自启,求修改 #include #include #include SERVICE_STATUS m_ServiceStatus; SERVICE_STATUS_HANDLE m_ServiceStatusHandle; BOOL bRunning = true; void WINAPI ServiceMain(DWORD argc, LPTSTR argv);//服务