|
|
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
OEMHard.c
Abstract:
Author:
Revision History:
--*/
#ifndef UNICODE
#define UNICODE
#endif
#ifndef _UNICODE
#define _UNICODE
#endif
#include "msgina.h"
#include "machinep.h"
#if defined(_X86_)
ULONG RegGetMachineIdentifierValue( IN OUT PULONG Value )
/*++
Routine Description:
Given a unicode value name this routine will go into the registry location for the machine identifier information and get the value.
Arguments:
Value - a pointer to the ULONG for the result.
Return Value:
NTSTATUS
If STATUS_SUCCESSFUL is returned, the location *Value will be updated with the DWORD value from the registry. If any failing status is returned, this value is untouched.
--*/
{ LONG lRet; HKEY hKey; DWORD dwType; TCHAR tchData[100]; PTCHAR ptchData = tchData; DWORD dwData = sizeof(tchData); int cchCompareF, cchCompareN; LCID lcid;
//
// Set default as PC/AT
//
*Value = MACHINEID_MS_PCAT;
//
// Open registry key
//
lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, // hRootKey
REGISTRY_HARDWARE_SYSTEM, // SubKey
0, // Reserved
KEY_READ, // Read Op.
&hKey ); // hKey
if( lRet != ERROR_SUCCESS ) return( lRet );
//
// Read registry key
//
ReTryRead:
lRet = RegQueryValueEx( hKey, // kKey
REGISTRY_MACHINE_IDENTIFIER, // ValueName
NULL, // Reserved
&dwType, // Data Type
(LPBYTE)ptchData, // Data buffer
&dwData ); // Data buffer size
if( lRet != ERROR_SUCCESS ) {
if( lRet != ERROR_MORE_DATA ) goto Exit1;
//
// the Buffer is too small to store the data, we retry with
// large buffer.
//
dwData += 2;
ptchData = LocalAlloc( LMEM_FIXED , dwData );
if( ptchData == NULL ) { lRet = ERROR_NOT_ENOUGH_MEMORY; goto Exit1; }
goto ReTryRead; }
//
// Determine platform.
//
lcid = MAKELCID( MAKELANGID( LANG_NEUTRAL, SUBLANG_SYS_DEFAULT ), SORT_DEFAULT );
cchCompareF = lstrlen( FUJITSU_FMR_NAME ); cchCompareN = lstrlen( NEC_PC98_NAME );
if( CompareString( lcid, // Locale id
NORM_IGNORECASE, // Ignoare case
ptchData, // String A.
cchCompareF, // length of string A to compare
FUJITSU_FMR_NAME, // String B.
cchCompareF ) // length of string B to compare
== 2 // String A == String B
) {
//
// Fujitsu FMR Series.
//
*Value = MACHINEID_FUJITSU_FMR;
} else if( CompareString( lcid, // Locale id
NORM_IGNORECASE, // Igonre case
ptchData, // String A.
cchCompareN, // length of string A to compare
NEC_PC98_NAME, // String B.
cchCompareN ) // length of string B to compare
== 2 // String A == String B
) {
//
// NEC PC-9800 Seriss
//
*Value = MACHINEID_NEC_PC98;
} else {
//
// Standard PC/AT comapatibles
//
*Value = MACHINEID_MS_PCAT;
}
Exit1:
RegCloseKey( hKey );
return( lRet ); }
DWORD dwMachineId = MACHINEID_MS_PCAT;
VOID InitializeOEMId(VOID) { RegGetMachineIdentifierValue(&dwMachineId); }
BOOL IsNEC_PC9800(VOID) { return((dwMachineId & PC_9800_COMPATIBLE) ? TRUE : FALSE); } #endif // defined(_X86_)
|