windows-nt/Source/XPSP1/NT/net/snmp/common/dll/snmpapi.c
2020-09-26 16:20:57 +08:00

200 lines
5 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
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;
}