亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
久久亚洲影视婷婷| 亚洲图片欧美色图| 亚洲成人福利片| 在线免费不卡视频| 亚洲欧美日韩人成在线播放| 国产老女人精品毛片久久| 欧美一区二区三区人| 日韩专区一卡二卡| 欧美日本韩国一区二区三区视频| 一区二区三区电影在线播| 91视频国产观看| 欧美国产日产图区| 777精品伊人久久久久大香线蕉| 日韩精品一区二区三区四区| 波多野结衣的一区二区三区| 2017欧美狠狠色| 亚洲美女精品一区| 欧美精品一二三| 欧美一区二区三区免费视频| 国产精品一区二区在线观看网站 | 韩国精品主播一区二区在线观看| 亚洲免费av观看| 自拍偷在线精品自拍偷无码专区 | 欧美肥妇free| 欧美日韩视频专区在线播放| 91官网在线观看| 99久久婷婷国产综合精品电影| 国产米奇在线777精品观看| 美女一区二区久久| 久久精品国产一区二区三| 日韩精品1区2区3区| 午夜电影一区二区三区| 五月天亚洲精品| 亚洲一区二区三区四区在线免费观看 | 亚洲综合免费观看高清完整版 | 99re这里都是精品| 成人的网站免费观看| 不卡av免费在线观看| 99久久婷婷国产综合精品| 成人av在线一区二区三区| 成人白浆超碰人人人人| 99麻豆久久久国产精品免费优播| 菠萝蜜视频在线观看一区| 懂色av一区二区夜夜嗨| 国产·精品毛片| 97精品久久久久中文字幕| 色婷婷综合久久久中文一区二区| 欧美这里有精品| 欧美日韩中字一区| 717成人午夜免费福利电影| 91精品国产综合久久香蕉麻豆| 欧美一区二区在线免费播放| 欧美成人a在线| 久久欧美一区二区| 亚洲天堂av一区| 亚洲大型综合色站| 久久99国内精品| 国产精品羞羞答答xxdd| 99视频热这里只有精品免费| 色噜噜狠狠一区二区三区果冻| 欧美男生操女生| 久久综合色鬼综合色| 国产精品久久久久久亚洲伦| 亚洲最色的网站| 蜜臀久久久久久久| 懂色av一区二区在线播放| 91久久精品网| 日韩精品中午字幕| 国产精品三级视频| 亚洲成人动漫在线免费观看| 国产一区二区三区免费播放| 一本色道**综合亚洲精品蜜桃冫| 555夜色666亚洲国产免| 国产日本一区二区| 亚洲国产一二三| 国产麻豆欧美日韩一区| 色老汉一区二区三区| 日韩一区二区中文字幕| 日韩视频在线一区二区| 国产精品区一区二区三区| 亚洲一区二区三区不卡国产欧美| 久久精品国产久精国产爱| 成人免费视频视频| 欧美精三区欧美精三区| 欧美激情一区三区| 五月天亚洲精品| 99久久精品国产麻豆演员表| 91精品视频网| 亚洲视频在线观看一区| 狠狠色综合日日| 在线视频综合导航| 国产欧美精品国产国产专区 | 亚洲免费在线观看| 国产原创一区二区三区| 欧美日产在线观看| 国产精品福利一区| 精品无人码麻豆乱码1区2区 | 99精品一区二区| 欧美精品一区二区三区蜜桃视频 | 亚洲国产日日夜夜| 福利一区在线观看| 欧美变态tickle挠乳网站| 亚洲综合免费观看高清完整版| 高清av一区二区| 精品嫩草影院久久| 日韩av高清在线观看| 日本精品一级二级| 一区在线播放视频| 五月激情丁香一区二区三区| 成人精品国产福利| 日韩免费观看高清完整版| 一区二区三区小说| 成人一区在线观看| 精品国产一二三| 日韩av不卡一区二区| 在线精品视频免费播放| 国产精品二三区| 国产乱码精品一区二区三| 欧美一区二区高清| 午夜精品一区二区三区免费视频| 91亚洲精华国产精华精华液| 欧美激情在线看| 风间由美中文字幕在线看视频国产欧美| 91精品国产一区二区三区| 亚洲444eee在线观看| 91国模大尺度私拍在线视频| 亚洲欧美日韩一区二区三区在线观看 | 天堂在线亚洲视频| 欧美日本不卡视频| 亚洲高清不卡在线| 欧美精品黑人性xxxx| 亚洲国产精品一区二区www在线 | 欧美视频一区二区| 一区二区三区欧美激情| 91传媒视频在线播放| 一区二区三区在线观看国产| 91影院在线免费观看| 亚洲码国产岛国毛片在线| 色一情一乱一乱一91av| 亚洲精品久久久蜜桃| 欧美中文一区二区三区| 亚洲成年人影院| 7777精品伊人久久久大香线蕉的| 日产欧产美韩系列久久99| 日韩欧美一区在线| 国产一区999| 国产精品久久精品日日| 色婷婷综合中文久久一本| 亚洲国产精品综合小说图片区| 在线播放亚洲一区| 久久精品国产亚洲高清剧情介绍| 欧美电视剧在线观看完整版| 国产精品资源在线观看| 中文字幕一区二区三区在线不卡| 91网址在线看| 婷婷激情综合网| 精品理论电影在线| 成人禁用看黄a在线| 亚洲精品免费播放| 欧美一区二区福利在线| 成人一级黄色片| 久久这里只精品最新地址| 国产 日韩 欧美大片| 成人免费视频在线观看| 91视频www| 日日摸夜夜添夜夜添国产精品| 精品日韩在线一区| 成人av综合一区| 日韩精品一区第一页| 久久精品视频在线看| 91福利视频网站| 久久国产三级精品| 亚洲天堂a在线| 欧美成人免费网站| 91丨porny丨首页| 免费在线观看视频一区| 国产精品久久久久久久久果冻传媒| 在线观看www91| 国产精品一区三区| 亚洲成精国产精品女| 久久你懂得1024| 欧美自拍偷拍一区| 日韩av一级电影| 日韩毛片高清在线播放| 91精品国产色综合久久不卡蜜臀| 懂色av一区二区在线播放| 日韩影院免费视频| ●精品国产综合乱码久久久久| 欧美一二三在线| 欧美午夜一区二区三区| 国产精品一区专区| 日本免费在线视频不卡一不卡二| 综合激情网...| 久久先锋影音av鲁色资源网| 欧美综合一区二区三区| 成人小视频免费观看| 色婷婷综合五月| 国产精品亚洲视频| 欧美bbbbb| 亚洲国产精品久久一线不卡|