PIDGenRc函数中lpstrRpc的由来和InitializePidVariables函数的关系
第一部分:
./base/ntsetup/syssetup/setupp.h:404:#define MAX_PID30_RPC 5
BOOL
InitializePidVariables(
)
{
//
// Get the Pid from HKEY_LOCAL_MACHINE\SYSTEM\Setup\Pid
//
Error = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
((MiniSetup || OobeSetup) ? szFinalPidKeyName : szPidKeyName),
0,
KEY_READ,
&Key );
if( Error != ERROR_SUCCESS ) {
SetuplogError( LogSevFatalError,
SETUPLOG_USE_MESSAGEID,
MSG_LOG_PID_CANT_READ_PID, NULL,
SETUPLOG_USE_MESSAGEID,
MSG_LOG_X_PARAM_RETURNED_WINERR,
szRegOpenKeyEx,
Error,
szPidKeyName,
NULL,NULL);
return( FALSE );
}
cbData = sizeof(Data);
Error = RegQueryValueEx( Key,
((MiniSetup || OobeSetup) ? szFinalPidValueName : szPidValueName),
0,
&Type,
( LPBYTE )Data,
&cbData );
RegCloseKey( Key );
if( (Error != ERROR_SUCCESS) ) {
SetuplogError( LogSevFatalError,
SETUPLOG_USE_MESSAGEID,
MSG_LOG_PID_CANT_READ_PID, NULL,
SETUPLOG_USE_MESSAGEID,
MSG_LOG_X_PARAM_RETURNED_WINERR,
szRegQueryValueEx,
Error,
szPidValueName,
NULL,NULL);
return( FALSE );
}
//
// Take care of the mini-setup case first because it's quick.
// The Pid seeds left behind by textmode are long gone, so
// we're going to pull out a few rabbits. We'll go read the
// real Pid (the one gui-mode generated the first time he
// ran through) and use that to determine which kind of
// PID to prompt for later on.
//
if( MiniSetup || OobeSetup ) {
//
// tuck away the rpc code for later on
//
wcsncpy( Pid30Rpc, Data, MAX_PID30_RPC +1 );
Pid30Rpc[MAX_PID30_RPC] = (WCHAR)'\0';
//
// tuck away the rpc code for later on
//
wcsncpy( Pid30Rpc, Data, MAX_PID30_RPC +1 );
Pid30Rpc[MAX_PID30_RPC] = (WCHAR)'\0';
第二部分:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\Setup\Pid]
"Pid"="76487270"
第三部分:补充,windows server 2003 sp0 简体中文版(20030327)的pid为:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\Setup\Pid]
"Pid"="55039000"