当前位置: 首页 > news >正文

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";

http://www.dtcms.com/a/333413.html

相关文章:

  • MMU 的资料收集
  • 【DDIA】第九章:一致性与共识
  • IDEA插件选择和设置优化指南(中英双版)
  • 永磁同步电机控制 第一篇、认识电机
  • 【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架
  • STM32如何定位HardFault错误,一种实用方法
  • 进程和线程 (线程)
  • C#内嵌字符串格式化输出
  • C语言实现类似C#的格式化输出
  • Kubernetes(3)控制器的应用详解
  • 【Linux应用】V4L2的摄像头配置、获取等操作,并进行视频录制
  • 准直太阳光模拟器 | HUD 光照角度和强度的测试应用
  • 论文解读:从工具人到永动机,AI代理(AI Agent、智能体)如何跨越静态到自进化的鸿沟?
  • Effective Java笔记:类层次优于标签类
  • k8s单master部署
  • 用 Enigma Virtual Box 将 Qt 程序打包成单 exe
  • QT|windwos桌面端应用程序开发,当连接多个显示器的时候,如何获取屏幕编号?
  • 【C#补全计划】委托
  • 基于RobustVideoMatting(RVM)进行视频人像分割(torch、onnx版本)
  • 【opencv-Python学习笔记(5):几何变换】
  • 补充日志之-配置文件解析指南(Centos7)
  • 容器内部再运行Docker(DinD和DooD)
  • CUDA中的基本概念
  • Linux软件编程:进程线程(线程)
  • 结构体(Struct)、枚举(Enum)的使用
  • 基于SpringBoot的房产销售系统
  • 护栏卫士碰撞报警系统如何实时监测护栏的状态
  • 系统时钟配置
  • 38 C++ STL模板库7-迭代器
  • 用ICO图标拼成汉字