120 lines
2.1 KiB
C++
120 lines
2.1 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1996 Microsoft Corporation
|
||
|
|
||
|
Module Name :
|
||
|
isplat.cxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module defines functions for determining platform types
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Johnson Apacible (johnsona) 19-Nov-1996
|
||
|
--*/
|
||
|
|
||
|
#include <nt.h>
|
||
|
#include <ntrtl.h>
|
||
|
#include <nturtl.h>
|
||
|
#include <windows.h>
|
||
|
#include <isplat.h>
|
||
|
#include <inetsvcs.h>
|
||
|
|
||
|
PLATFORM_TYPE TsPlatformType = PtInvalid;
|
||
|
|
||
|
typedef
|
||
|
BOOLEAN
|
||
|
(NTAPI *GET_PRODUCT_TYPE)(
|
||
|
PNT_PRODUCT_TYPE
|
||
|
);
|
||
|
|
||
|
PLATFORM_TYPE
|
||
|
IISGetPlatformType(
|
||
|
VOID
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
This function consults the registry and determines the platform type
|
||
|
for this machine.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Returns:
|
||
|
Platform type
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
PLATFORM_TYPE pt;
|
||
|
LONG result;
|
||
|
HKEY keyHandle;
|
||
|
WCHAR productType[30];
|
||
|
DWORD type;
|
||
|
BOOL isNt = TRUE;
|
||
|
|
||
|
OSVERSIONINFO osInfo;
|
||
|
|
||
|
//
|
||
|
// See if the platform type has already been discovered.
|
||
|
//
|
||
|
|
||
|
if ( TsPlatformType != PtInvalid ) {
|
||
|
return(TsPlatformType);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// see if this is win95
|
||
|
//
|
||
|
|
||
|
osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
||
|
|
||
|
if ( GetVersionEx( &osInfo ) ) {
|
||
|
isNt = (osInfo.dwPlatformId == VER_PLATFORM_WIN32_NT);
|
||
|
} else {
|
||
|
IIS_PRINTF((buff,"GetVersionEx failed with %d\n",
|
||
|
GetLastError()));
|
||
|
}
|
||
|
|
||
|
if ( isNt ) {
|
||
|
|
||
|
HINSTANCE hNtdll;
|
||
|
NT_PRODUCT_TYPE ntType;
|
||
|
GET_PRODUCT_TYPE pfnGetProductType;
|
||
|
|
||
|
//
|
||
|
// Get the product type from the system
|
||
|
//
|
||
|
|
||
|
pt = PtNtWorkstation;
|
||
|
hNtdll = LoadLibrary("ntdll.dll");
|
||
|
if ( hNtdll != NULL ) {
|
||
|
|
||
|
pfnGetProductType = (GET_PRODUCT_TYPE)
|
||
|
GetProcAddress(hNtdll, "RtlGetNtProductType");
|
||
|
|
||
|
if ( (pfnGetProductType != NULL) &&
|
||
|
pfnGetProductType( &ntType ) ) {
|
||
|
|
||
|
if ( (ntType == NtProductLanManNt) ||
|
||
|
(ntType == NtProductServer) ) {
|
||
|
|
||
|
pt = PtNtServer;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
FreeLibrary( hNtdll );
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
pt = PtWindows95;
|
||
|
}
|
||
|
|
||
|
TsPlatformType = pt;
|
||
|
return(pt);
|
||
|
|
||
|
} // IISGetPlatformType
|
||
|
|
||
|
|