200 lines
5 KiB
C
200 lines
5 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1992-1997 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
snmpapi.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Contains entry point for SNMPAPI.DLL.
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
User Mode - Win32
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Include files //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
#include <nt.h>
|
|||
|
#include <windef.h>
|
|||
|
#include <ntrtl.h>
|
|||
|
#include <nturtl.h>
|
|||
|
#include <windows.h>
|
|||
|
#include <snmp.h>
|
|||
|
#include <snmputil.h>
|
|||
|
#include "ntfuncs.h"
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Global Variables //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
DWORD g_dwPlatformId = 0;
|
|||
|
AsnObjectIdentifier * g_pEnterpriseOid = NULL;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Private Variables //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
static UINT idsWindowsNTWorkstation[] = {1,3,6,1,4,1,311,1,1,3,1,1};
|
|||
|
static UINT idsWindowsNTServer[] = {1,3,6,1,4,1,311,1,1,3,1,2};
|
|||
|
static UINT idsWindowsNTDC[] = {1,3,6,1,4,1,311,1,1,3,1,3};
|
|||
|
static UINT idsWindows[] = {1,3,6,1,4,1,311,1,1,3,2};
|
|||
|
|
|||
|
static AsnObjectIdentifier oidWindowsNTWorkstation = {
|
|||
|
sizeof(idsWindowsNTWorkstation)/sizeof(UINT),
|
|||
|
idsWindowsNTWorkstation
|
|||
|
};
|
|||
|
|
|||
|
static AsnObjectIdentifier oidWindowsNTServer = {
|
|||
|
sizeof(idsWindowsNTServer)/sizeof(UINT),
|
|||
|
idsWindowsNTServer
|
|||
|
};
|
|||
|
|
|||
|
static AsnObjectIdentifier oidWindowsNTDC = {
|
|||
|
sizeof(idsWindowsNTDC)/sizeof(UINT),
|
|||
|
idsWindowsNTDC
|
|||
|
};
|
|||
|
|
|||
|
static AsnObjectIdentifier oidWindows = {
|
|||
|
sizeof(idsWindows)/sizeof(UINT),
|
|||
|
idsWindows
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Private Procedures //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
BOOL
|
|||
|
InitializeEnterpriseOID(
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Determines the default enterprise object identifier.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Values:
|
|||
|
|
|||
|
Returns true if successful.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
NT_PRODUCT_TYPE NtProductType;
|
|||
|
|
|||
|
// default to generic oid
|
|||
|
g_pEnterpriseOid = &oidWindows;
|
|||
|
|
|||
|
// check to see if the platform is winnt
|
|||
|
if (g_dwPlatformId == VER_PLATFORM_WIN32_NT) {
|
|||
|
|
|||
|
// assume this is just a workstation
|
|||
|
g_pEnterpriseOid = &oidWindowsNTWorkstation;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// let the system determine product type
|
|||
|
RtlGetNtProductType(&NtProductType);
|
|||
|
|
|||
|
// point to the correct enterprise oid
|
|||
|
if (NtProductType == NtProductServer) {
|
|||
|
|
|||
|
// this is a stand-alone server
|
|||
|
g_pEnterpriseOid = &oidWindowsNTServer;
|
|||
|
|
|||
|
} else if (NtProductType == NtProductLanManNt) {
|
|||
|
|
|||
|
// this is a PDC or a BDC
|
|||
|
g_pEnterpriseOid = &oidWindowsNTDC;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
SNMPDBG((
|
|||
|
SNMP_LOG_TRACE,
|
|||
|
"SNMP: INIT: enterprise is %s.\n",
|
|||
|
SnmpUtilOidToA(g_pEnterpriseOid)
|
|||
|
));
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Public Procedures //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
InitializeDLL(
|
|||
|
PVOID DllHandle,
|
|||
|
ULONG Reason,
|
|||
|
LPVOID lpReserved
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Dll entry point.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
Same as DllMain.
|
|||
|
|
|||
|
Return Values:
|
|||
|
|
|||
|
Returns true if successful.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
// check if new process attaching
|
|||
|
if (Reason == DLL_PROCESS_ATTACH) {
|
|||
|
|
|||
|
OSVERSIONINFO osInfo;
|
|||
|
|
|||
|
// initialize os info structure
|
|||
|
osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
|||
|
|
|||
|
// gather os info
|
|||
|
GetVersionEx(&osInfo);
|
|||
|
|
|||
|
// save platform id for later use
|
|||
|
g_dwPlatformId = osInfo.dwPlatformId;
|
|||
|
|
|||
|
// initialize enterprise
|
|||
|
InitializeEnterpriseOID();
|
|||
|
|
|||
|
// turn off thread attach messages
|
|||
|
DisableThreadLibraryCalls(DllHandle);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|