MiniSetupGetCdType函数分析之CDTYPE三种零售版oem版vol版
第一部分:
//
// forward declarations
//
CDTYPE
MiniSetupGetCdType(
LPCWSTR Value
)
/*++
Routine Description:
Get the right CD type during Mini-Setup. PidGen changes the channel ID
for the value at HKLM\Software\Microsoft\Windows NT\CurrentVersion!ProductId,
we have to preserve and rely on the value at HKLM\SYSTEM\Setup\Pid!Pid
Return Value:
the CdType.
--*/
{
CDTYPE RetVal;
WCHAR TmpPid30Site[MAX_PID30_SITE+1];
HKEY Key = NULL;
DWORD cbData;
WCHAR Data[ MAX_PATH + 1];
DWORD Type;
cbData = sizeof(Data);
if ( ( RegOpenKeyEx( HKEY_LOCAL_MACHINE,
szPidKeyName,
0,
KEY_READ,
&Key ) == ERROR_SUCCESS ) &&
( RegQueryValueEx( Key,
szPidValueName,
0,
&Type,
( LPBYTE )Data,
&cbData ) == ERROR_SUCCESS ) )
{
wcsncpy(TmpPid30Site, Data + MAX_PID30_RPC, MAX_PID30_SITE+1);
}
else
{
if (Value != NULL)
{
wcsncpy(TmpPid30Site, Value, MAX_PID30_SITE+1);
}
else
{
TmpPid30Site[0] = L'\0';
}
}
TmpPid30Site[MAX_PID30_SITE] = (WCHAR)'\0';
if (_wcsicmp( TmpPid30Site, szPidSelectId ) == 0) {
RetVal = CDSelect;
} else if( _wcsicmp( TmpPid30Site, szPidOemId ) == 0 ) {
RetVal = CDOem;
} else {
RetVal = CDRetail;
}
第二部分:
./base/ntsetup/syssetup/setupp.h
typedef enum {
CDRetail,
CDOem,
CDSelect
} CDTYPE;
第三部分:
ch@chdeiMac srv03rtm % grep "szPidOemId" -nr ./base/ntsetup |grep -v "inary"
./base/ntsetup/legacy/exe/ems.cpp:745:PCWSTR szPidOemId = L"OEM";
./base/ntsetup/legacy/exe/ems.cpp:1090: } else if( _wcsicmp(Pid30Site, szPidOemId) == 0) {
./base/ntsetup/syssetup/pid.c:41:PCWSTR szPidOemId = L"OEM";
./base/ntsetup/syssetup/pid.c:159: } else if( _wcsicmp( TmpPid30Site, szPidOemId ) == 0 ) {
./base/ntsetup/syssetup/pid.c:1441: } else if( _wcsicmp( Pid30Site, szPidOemId ) == 0 ) {
ch@chdeiMac srv03rtm %
PCWSTR szPidSelectId = L"270";
#if 0
// msdn no longer exists.
PCWSTR szPidMsdnId = L"335";
#endif
PCWSTR szPidOemId = L"OEM";