亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mgmtapi.c

?? windows的snmp api源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*++

Copyright (c) 1997  Microsoft Corporation

Module Name:

    mgmtapi.c

Abstract:

    SNMP Management API (wrapped around WinSNMP API).

Environment:

    User Mode - Win32

Revision History:

    05-Feb-1997 DonRyan
        Rewrote functions to be wrappers around WinSNMP.

--*/

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Include Files                                                             //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <wsipx.h>
#include <winsnmp.h>
#include <mgmtapi.h>
#include <oidconv.h>
#include <snmputil.h>


///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Private Definitions                                                       //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

typedef struct _SNMP_MGR_SESSION {

    SOCKET            UnusedSocket;     // WARNING: Previous versions of the
    struct sockaddr   UnusedDestAddr;   // MGMTAPI.H header file exposed the
    LPSTR             UnusedCommunity;  // SNMP_MGR_SESSION structure which
    INT               UnusedTimeout;    // unfortunately encouraged people to
    INT               UnusedNumRetries; // muck with it.  Since this structure
    AsnInteger        UnusedRequestId;  // has now changed we must protect it.

    CRITICAL_SECTION  SessionLock;      // multiple threads may share session

    HSNMP_SESSION     hSnmpSession;     // handle to winsnmp session
    HSNMP_ENTITY      hAgentEntity;     // handle to agent entity
    HSNMP_ENTITY      hManagerEntity;   // handle to manager entity
    HSNMP_CONTEXT     hViewContext;     // handle to view context
    HSNMP_PDU         hPdu;             // handle to snmp pdu
    HSNMP_VBL         hVbl;             // handle to snmp pdu
    HWND              hWnd;             // handle to window

    smiINT32          nPduType;         // current pdu type
    smiINT32          nRequestId;       // current request id
    smiINT32          nErrorIndex;      // error index from pdu
    smiINT32          nErrorStatus;     // error status from pdu
    smiINT32          nLastError;       // last system error
    SnmpVarBindList * pVarBindList;     // pointer to varbind list

} SNMP_MGR_SESSION, *PSNMP_MGR_SESSION;

typedef struct _TRAP_LIST_ENTRY {

    LIST_ENTRY          Link;           // linked-list link
    AsnObjectIdentifier EnterpriseOID;  // generating enterprise
    AsnNetworkAddress   AgentAddress;   // generating agent addr
    AsnNetworkAddress   SourceAddress;  // generating network addr
    AsnInteger          nGenericTrap;   // generic trap type
    AsnInteger          nSpecificTrap;  // enterprise specific type
    AsnOctetString      Community;      // generating community
    AsnTimeticks        TimeStamp;      // time stamp
    SnmpVarBindList     VarBindList;    // variable bindings

} TRAP_LIST_ENTRY, * PTRAP_LIST_ENTRY;

#define IPADDRLEN           4
#define IPXADDRLEN          10

#define MAXENTITYSTRLEN     128

#define MINVARBINDLEN       2
#define SYSUPTIMEINDEX      0
#define SNMPTRAPOIDINDEX    1

#define DEFAULT_ADDRESS_IP  "127.0.0.1"
#define DEFAULT_ADDRESS_IPX "00000000.000000000000"

#define NOTIFICATION_CLASS  "MGMTAPI Notification Class"
#define WM_WSNMP_INCOMING   (WM_USER + 1)
#define WM_WSNMP_DONE       (WM_USER + 2)

#define WSNMP_FAILED(s)     ((s) == SNMPAPI_FAILURE)
#define WSNMP_SUCCEEDED(s)  ((s) != SNMPAPI_FAILURE)

#define WSNMP_ASSERT(s)     { if (!(s)); }


///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Global Variables                                                          //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

HINSTANCE         g_hDll;                       // module handle
HANDLE            g_hTrapEvent = NULL;          // trap event handle
HANDLE            g_hTrapThread = NULL;         // trap thread handle
HANDLE            g_hTrapRegisterdEvent = NULL; // event to sync. SnmpMgrTrapListen
BOOL              g_fIsSnmpStarted = FALSE;     // indicates winsnmp inited
BOOL              g_fIsSnmpListening = FALSE;   // indicates trap thread on
BOOL              g_fIsTrapRegistered = FALSE;  // indicates trap registered
DWORD             g_dwRequestId = 1;            // unique pdu request id
LIST_ENTRY        g_IncomingTraps;              // incoming trap queue
CRITICAL_SECTION  g_GlobalLock;                 // process resource lock
SNMP_MGR_SESSION  g_TrapSMS;                    // process trap session


///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Private Procedures                                                        //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

DWORD
GetRequestId(
    )

/*++

Routine Description:

    Retrieve next global request id.

Arguments:

    None.

Return Values:

    Returns request id.

--*/

{
    DWORD dwRequestId;

    // obtain exclusive access to request id
    EnterCriticalSection(&g_GlobalLock);

    // obtain copy of request id
    dwRequestId = g_dwRequestId++;

    // obtain exclusive access to request id
    LeaveCriticalSection(&g_GlobalLock);

    return dwRequestId;
}


BOOL
TransferVb(
    PSNMP_MGR_SESSION pSMS,
    SnmpVarBind *     pVarBind
    )

/*++

Routine Description:

    Transfer VarBind structure to WinSNMP structure.

Arguments:

    pSMS - pointer to mgmtapi session structure.

    pVarBind - pointer to varbind to transfer.

Return Values:

    Returns true if successful.

--*/

{
    BOOL fOk = FALSE;
    SNMPAPI_STATUS status;
    smiVALUE tmpValue;
    smiOID tmpOID;

    // validate session ptr
    WSNMP_ASSERT(pSMS != NULL);

    // validate pointers
    if ((pVarBind != NULL) &&
        (pVarBind->name.ids != NULL) &&
        (pVarBind->name.idLength != 0)) {

        // re-init
        fOk = TRUE;

        // transfer oid information
        tmpOID.len = pVarBind->name.idLength;
        tmpOID.ptr = pVarBind->name.ids;

        // only initialize value if set
        if (pSMS->nPduType == SNMP_PDU_SET) {

            // syntax values are equivalent
            tmpValue.syntax = (smiINT32)(BYTE)pVarBind->value.asnType;

            // determine type
            switch (pVarBind->value.asnType) {

            case ASN_INTEGER32:

                // transfer signed int
                tmpValue.value.sNumber = pVarBind->value.asnValue.number;
                break;

            case ASN_UNSIGNED32:
            case ASN_COUNTER32:
            case ASN_GAUGE32:
            case ASN_TIMETICKS:

                // transfer unsigned int
                tmpValue.value.uNumber = pVarBind->value.asnValue.unsigned32;
                break;

            case ASN_COUNTER64:

                // transfer 64-bit counter
                tmpValue.value.hNumber.lopart =
                    pVarBind->value.asnValue.counter64.LowPart;
                tmpValue.value.hNumber.hipart =
                    pVarBind->value.asnValue.counter64.HighPart;
                break;

            case ASN_OPAQUE:
            case ASN_IPADDRESS:
            case ASN_OCTETSTRING:
            case ASN_BITS:

                // transfer octet string
                tmpValue.value.string.len =
                    pVarBind->value.asnValue.string.length;
                tmpValue.value.string.ptr =
                    pVarBind->value.asnValue.string.stream;
                break;

            case ASN_OBJECTIDENTIFIER:

                // transfer object id
                tmpValue.value.oid.len =
                    pVarBind->value.asnValue.object.idLength;
                tmpValue.value.oid.ptr =
                    pVarBind->value.asnValue.object.ids;
                break;

            case ASN_NULL:
            case SNMP_EXCEPTION_NOSUCHOBJECT:
            case SNMP_EXCEPTION_NOSUCHINSTANCE:
            case SNMP_EXCEPTION_ENDOFMIBVIEW:

                // initialize empty byte
                tmpValue.value.empty = 0;
                break;

            default:

                // failure
                fOk = FALSE;
                break;
            }
        }

        if (fOk) {

            // register varbind
            status = SnmpSetVb(
                        pSMS->hVbl,
                        0, // index
                        &tmpOID,
                        (pSMS->nPduType == SNMP_PDU_SET)
                            ? &tmpValue
                            : NULL
                        );

            // validate return code
            if (WSNMP_FAILED(status)) {

                SNMPDBG((
                    SNMP_LOG_ERROR,
                    "MGMTAPI: SnmpSetVb returned %d.\n",
                    SnmpGetLastError(pSMS->hSnmpSession)
                    ));

                // failure
                fOk = FALSE;
            }
        }
    }

    return fOk;
}


BOOL
AllocateVbl(
    PSNMP_MGR_SESSION pSMS
    )

/*++

Routine Description:

    Transfer VarBindList structure to WinSNMP structure.

Arguments:

    pSMS - pointer to mgmtapi session structure.

Return Values:

    Returns true if successful.

--*/

{
    BOOL fOk = FALSE;
    SNMPAPI_STATUS status;
    SnmpVarBind * pVarBind;
    DWORD cVarBind;

    // validate session ptr
    WSNMP_ASSERT(pSMS != NULL);

    // validate parameters
    WSNMP_ASSERT(pSMS->pVarBindList != NULL);
    WSNMP_ASSERT(pSMS->pVarBindList->len != 0);
    WSNMP_ASSERT(pSMS->pVarBindList->list != NULL);

    // allocate resources for variable bindings list
    pSMS->hVbl = SnmpCreateVbl(pSMS->hSnmpSession, NULL, NULL);

    // validate varbind handle
    if (WSNMP_SUCCEEDED(pSMS->hVbl)) {

        // re-init
        fOk = TRUE;

        // initialize varbind pointer
        pVarBind = pSMS->pVarBindList->list;

        // initialize varbind count
        cVarBind = pSMS->pVarBindList->len;

        // process each varbind
        while (fOk && cVarBind--) {

            // transfer variable binding
            fOk = TransferVb(pSMS, pVarBind++);
        }

        if (!fOk) {

            // release varbind list handle
            status = SnmpFreeVbl(pSMS->hVbl);

            // validate return code
            if (WSNMP_FAILED(status)) {

                SNMPDBG((
                    SNMP_LOG_ERROR,
                    "MGMTAPI: SnmpFreeVbl returned %d.\n",
                    SnmpGetLastError(pSMS->hSnmpSession)
                    ));
            }

            // re-initialize
            pSMS->hVbl = (HSNMP_VBL)NULL;
        }

    } else {

        SNMPDBG((
            SNMP_LOG_ERROR,
            "MGMTAPI: SnmpCreateVbl returned %d.\n",
            SnmpGetLastError(pSMS->hSnmpSession)
            ));
    }

    return fOk;
}


BOOL
FreeVbl(
    PSNMP_MGR_SESSION pSMS
    )

/*++

Routine Description:

    Cleanup VarBind resources from WinSNMP structure.

Arguments:

    pSMS - pointer to mgmtapi session structure.

Return Values:

    Returns true if successful.

--*/

{
    BOOL fOk = TRUE;
    SNMPAPI_STATUS status;

    // validate session ptr
    WSNMP_ASSERT(pSMS != NULL);

    // validate handle
    if (pSMS->hVbl != (HSNMP_VBL)NULL) {

        // actually release vbl handle
        status = SnmpFreeVbl(pSMS->hVbl);

        // validate return code
        if (WSNMP_FAILED(status)) {

            SNMPDBG((
                SNMP_LOG_ERROR,
                "MGMTAPI: SnmpFreeVbl returned %d.\n",
                SnmpGetLastError(pSMS->hSnmpSession)
                ));

            // failure
            fOk = FALSE;
        }

        // re-initialize handle
        pSMS->hVbl = (HSNMP_VBL)NULL;
    }

    return fOk;
}


BOOL
AllocatePdu(
    PSNMP_MGR_SESSION pSMS
    )

/*++

Routine Description:

    Initialize session structure for sending request.

Arguments:

    pSMS - pointer to mgmtapi session structure.

Return Values:

    Returns true if successful.

--*/

{
    BOOL fOk = FALSE;

    // validate session ptr
    WSNMP_ASSERT(pSMS != NULL);

    // transfer varbinds
    if (AllocateVbl(pSMS)) {

        // grab next shared request id
        pSMS->nRequestId = GetRequestId();

        // create request pdu
        pSMS->hPdu = SnmpCreatePdu(
                        pSMS->hSnmpSession,
                        pSMS->nPduType,
                        pSMS->nRequestId,
                        0, // errorStatus
                        0, // errorIndex
                        pSMS->hVbl
                        );

        // validate return status
        if (WSNMP_SUCCEEDED(pSMS->hPdu)) {

            // success
            fOk = TRUE;

        } else {

            SNMPDBG((
                SNMP_LOG_ERROR,
                "MGMTAPI: SnmpCreatePdu returned %d.\n",
                SnmpGetLastError(pSMS->hSnmpSession)
                ));

            // free resources
            FreeVbl(pSMS);
        }
    }

    return fOk;
}


BOOL
FreePdu(
    PSNMP_MGR_SESSION pSMS
    )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区二区精品性色 | 日韩毛片精品高清免费| 日韩一区二区免费电影| 欧美日韩国产综合久久| 日本道免费精品一区二区三区| 成人18视频日本| 99视频在线精品| 在线精品视频一区二区三四 | 欧美人妇做爰xxxⅹ性高电影| 国产精品三级电影| 亚洲欧美日韩在线不卡| 亚洲国产一区二区三区 | 国产高清一区日本| 国产凹凸在线观看一区二区| 成人激情小说网站| 2020国产精品| 亚洲天堂2014| 成人国产精品免费观看视频| 久久亚洲综合色一区二区三区| 天天av天天翘天天综合网 | 韩国欧美国产1区| 懂色av中文一区二区三区| 日韩欧美中文一区| 日韩电影在线免费| 成人福利视频网站| 国产亚洲成av人在线观看导航| 一区二区三区色| 激情久久五月天| 日韩三级免费观看| 久久精品999| 日本电影欧美片| 亚洲综合在线第一页| 国产电影一区二区三区| www精品美女久久久tv| 国产综合久久久久久久久久久久| 久久综合色综合88| 国产乱国产乱300精品| 欧美欧美午夜aⅴ在线观看| 亚洲高清视频的网址| 欧美精品九九99久久| 亚洲精品视频一区二区| 国产在线一区二区| 久久蜜桃av一区精品变态类天堂 | 一区二区三区精密机械公司| 成人国产精品免费网站| 亚洲人成网站精品片在线观看| 岛国一区二区三区| 欧美一级片在线观看| 亚洲欧洲另类国产综合| 美女一区二区久久| 99久久精品免费精品国产| 一区二区三区四区蜜桃| 成人黄色a**站在线观看| www精品美女久久久tv| 成人午夜私人影院| 久久综合资源网| 粉嫩在线一区二区三区视频| 国产欧美日韩在线视频| 99这里只有精品| 欧美肥胖老妇做爰| 亚洲女子a中天字幕| 午夜精品123| 91在线你懂得| 日韩欧美国产一区在线观看| 国产69精品久久99不卡| 91免费看视频| 欧美综合在线视频| 美女一区二区三区| 春色校园综合激情亚洲| 北条麻妃国产九九精品视频| 欧美男人的天堂一二区| 久久久久久久av麻豆果冻| 亚洲成在人线免费| 久久欧美一区二区| 天天综合日日夜夜精品| 一本久道中文字幕精品亚洲嫩| 香蕉av福利精品导航| 欧美色综合网站| 欧洲一区在线观看| 男人的天堂亚洲一区| 国产毛片精品一区| 亚洲成a人片在线不卡一二三区| 亚洲欧美在线高清| 欧美日韩国产另类一区| 欧美日韩一区小说| 99国产欧美久久久精品| 国产精品三级av在线播放| 欧美一区三区四区| 91社区在线播放| 国产福利一区二区三区视频在线 | 不卡的av中国片| 亚洲视频一二区| 欧美精品777| 91在线丨porny丨国产| 久久99精品久久久久| 日韩一区二区三区四区| 一本色道久久综合狠狠躁的推荐 | 欧美zozozo| 岛国一区二区三区| 久久er精品视频| 免费久久99精品国产| 午夜精品福利一区二区三区av| 亚洲欧美电影院| 亚洲欧洲在线观看av| 国产精品素人一区二区| 久久久亚洲高清| 精品成人一区二区| 成人丝袜18视频在线观看| 国内外精品视频| 精品在线播放免费| 国产在线视频精品一区| 在线观看欧美日本| 亚洲精品在线网站| 日韩三级免费观看| 日韩一区二区在线观看视频| 欧美精品乱人伦久久久久久| 人妖欧美一区二区| 日韩中文字幕av电影| 日韩不卡一区二区三区| 日韩av中文在线观看| 日本va欧美va瓶| 久久狠狠亚洲综合| 精品亚洲porn| 国产成人午夜99999| 国产福利精品导航| av电影一区二区| 在线视频一区二区三区| 欧美日韩精品一区二区三区四区 | 成人免费观看男女羞羞视频| 成人av在线一区二区| 一本色道久久综合亚洲精品按摩| 在线精品视频小说1| 欧美久久一区二区| 精品福利在线导航| 国产精品久久久久久久久免费相片 | 亚洲国产精品成人久久综合一区| 337p日本欧洲亚洲大胆精品 | 中文字幕不卡的av| 秋霞影院一区二区| 色婷婷综合久久久久中文一区二区| 久久久另类综合| 蜜臀国产一区二区三区在线播放| 国产无一区二区| 日韩在线播放一区二区| 色吧成人激情小说| 欧美国产日韩一二三区| 久久精品国产亚洲高清剧情介绍| 欧美制服丝袜第一页| 国产精品国产a| 国产精品一区二区三区四区| 91精品国产综合久久久蜜臀粉嫩 | 亚洲精品一区二区精华| 婷婷开心久久网| 在线影视一区二区三区| 欧美无人高清视频在线观看| 成人丝袜18视频在线观看| 欧美日韩精品欧美日韩精品| 国产视频一区在线观看| 亚洲国产视频一区| 国产91精品露脸国语对白| 欧美精品一级二级| 亚洲人亚洲人成电影网站色| 蜜臀精品一区二区三区在线观看| 色综合天天综合网国产成人综合天| 99热这里都是精品| 精品国产一区二区三区不卡 | 日韩一级大片在线| 国产精品福利一区| 国产在线视频一区二区三区| 色婷婷av一区二区三区gif| 26uuu另类欧美亚洲曰本| 天堂成人免费av电影一区| 99精品视频一区| 国产色综合久久| 日韩1区2区3区| 欧美丝袜丝交足nylons| 亚洲品质自拍视频| 成人av电影在线| 久久免费国产精品 | 日韩成人一级片| 色综合中文字幕国产| 国产精品色噜噜| 国产成人8x视频一区二区 | 亚洲午夜精品网| 亚洲国产一区二区a毛片| 色偷偷久久一区二区三区| 艳妇臀荡乳欲伦亚洲一区| 欧美日韩亚洲国产综合| 青娱乐精品在线视频| 久久久久久久久久美女| 99久久精品免费看国产| 五月综合激情婷婷六月色窝| 精品国产在天天线2019| 成人丝袜视频网| 亚洲综合免费观看高清完整版在线 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 免费美女久久99| 国产欧美视频一区二区| 色天天综合久久久久综合片| 免费黄网站欧美|