windows-nt/Source/XPSP1/NT/base/ntsetup/oobe/html/oobeutil.jsx
2020-09-26 16:20:57 +08:00

247 lines
7.5 KiB
JavaScript

//
// This file contains script that is common to all the shell files.
//
// Activation errors
var ERR_ACT_UNINITIALIZED = -1;
var ERR_ACT_SUCCESS = 0;
var ERR_ACT_INACCESSIBLE = 1;
var ERR_ACT_INVALID_PID = 2;
var ERR_ACT_USED_PID = 3;
var ERR_ACT_INTERNAL_WINDOWS_ERR = 4;
var ERR_ACT_BLOCKED_PID = 5;
var ERR_ACT_CORRUPTED_PID = 6;
var ERR_ACT_NETWORK_FAILURE = 7;
var ERR_ACT_DEDICATED_PID_ENTRY = 8;
// Global variables
var g_ProductName = "Windows XP";
var g_ActivationRequired = window.external.NeedActivation();
var g_DoActivation = false;
var g_ActivationStatus = ERR_ACT_UNINITIALIZED;
var g_act_specific_error = 0;
var g_OOBEMUIDir = window.external.GetOOBEMUIPath();
// generic missing OEM Name error string. This is being used in msobshel.htm and error.js
var L_MissingOEMName_Text = "Error: Missing OEM Name in oobeinfo.ini [Branding] section.";
// window.external object caches
var DebugObj = null;
// Mandatory Initialization Code
if (null == DebugObj){
DebugObj = new Object;
DebugObj = window.external.Debug;
}
///////////////////////////////////////////////////////////////////////////////
// trace
//
// Send trace output to setuplog.txt and the debugger. Requires that
// HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE\MsDebug=DWORD:1.
// Output to the debugger requires a checked version of syssetup.dll.
//
///////////////////////////////////////////////////////////////////////////////
function trace(sMsg)
{
DebugObj.Trace(sMsg);
}
function Navigate(strURL)
{
// We are showing the next page. Make sure the cursor is normal
try
{
g.document.body.style.cursor = "default";
}
catch(e){}
strURL = g_OOBEMUIDir + "\\" + strURL;
trace("Navigate: " + strURL);
g.navigate(strURL);
} // Navigate
var g_CheckFinishAgain = true;
function CheckFinishStatus()
{
if (g_CheckFinishAgain)
{
if (g_DoActivation)
g_IsActivationSuccessful = true;
else
g_IsActivationSuccessful = false;
if (g_PostToMS)
g_IsMSRegistrationSuccessful = true;
else
g_IsMSRegistrationSuccessful = false;
if (g_PostToOEM)
g_IsOEMRegistrationSuccessful = true;
else
g_IsOEMRegistrationSuccessful = false;
}
}
<!--REQUIRED FUNCTION NAME-->
function ActivationComplete(status, status_errcode)
{
g_CheckFinishAgain = true;
if ( status != null) {
g_ActivationStatus = status;
if ( g_ActivationStatus != ERR_ACT_SUCCESS ) {
trace("Activation failed. Error = " + g_ActivationStatus);
// These vars are for use in our finish page.
g_IsActivationSuccessful = false;
g_IsMSRegistrationSuccessful = false;
g_IsOEMRegistrationSuccessful = false;
g_act_specific_error = status_errcode;
GoNavigate(CKPT_ACT_MSG);
return;
}
else
{
CheckFinishStatus();
// we don't want CheckFinishStatus() to run again since g_DoActivation is set to false a few lines after this line, which causes some problems for the finish page.
g_CheckFinishAgain = false;
}
g_ActivationRequired = false;
g_DoActivation = false;
StatusObj.set_Status(MS_REGISTRATION, true);
}
if (g_PostToOEM)
{
if (0 == RegisterObj.get_OEMAddRegPage)
{
window.external.PostRegData(POST_TO_OEM);
StatusObj.set_Status(OEM_REGISTRATION, true);
g_IgnoreDialErr = true;
PopCKPT(CKPT_REGDIAL);
PopCKPT(CKPT_REGISTER3);
PopCKPT(); // either CKPT_REGISTER1 or CKPT_ACTIVATION
CheckFinishStatus();
if (InReminderMode())
GoNavigate(CKPT_ACT_MSG); // if we reach here, we were successful in our activation. Desktop.
else
GoNavigate(CKPT_ICONN); // if we reach here, we were successful in our activation. Full screen. But we don't show the congrats page anymore.
}
else
{
//
// OEM should set the OEM_REGISTRATION once user has completed registration
// on the oemadd.htm by calling StatusObj.set_Status(OEM_REGISTRATION, true)
//
g_IgnoreDialErr = true;
if ( APP_REG_MODE == window.external.Directions.get_AppMode() )
{
Navigate("html\\oemreg\\roemadd.htm");
}
else
{
Navigate("html\\oemreg\\oemadd.htm");
}
}
}
else
{
g_IgnoreDialErr = true;
PopCKPT(CKPT_REGDIAL);
PopCKPT(CKPT_REGISTER3);
PopCKPT(); // either CKPT_REGISTER1 or CKPT_ACTIVATION
CheckFinishStatus();
if (InReminderMode())
GoNavigate(CKPT_ACT_MSG); // if we reach here, we were successful in our activation. Desktop.
else
GoNavigate(CKPT_ICONN); // if we reach here, we were successful in our activation. Full screen. But we don't show the congrats page anymore.
}
if ((g_PostToMS && g_PostToOEM && (1 == RegisterObj.get_PostToOEM)) ||
((0 == RegisterObj.get_PostToOEM) && g_PostToMS))
{
if ( APP_REG_MODE == window.external.Directions.get_AppMode() )
{
// If user register both MS and OEM or
// if user register MS while OEM disable posting,
// then we won't remind user
window.external.StopRemind(REMIND_REG);
}
else
{
// If user register both MS and OEM or
// if user register MS while OEM disable posting,
// reminder has already created, need to delete it
window.external.DeleteRemind(REMIND_REG);
}
}
}
// LANGUAGE SETTINGS
// sort order
var SORT_DEFAULT = 0x0; // sorting default
// primary languages
var LANG_JAPANESE = 0x11;
var LANG_KOREAN = 0x12;
var LANG_CHINESE = 0x04;
// sub languages
var SUBLANG_KOREAN = 0x01; // Korean (Extended Wansung)
var SUBLANG_CHINESE_TRADITIONAL = 0x01; // Taiwan
var SUBLANG_CHINESE_SIMPLIFIED = 0x02; // Chinese (PR China)
var SUBLANG_DEFAULT = 0x01; // user default
///////////////////////////////////////////////////////////////////////////////
// MAKELANGID
//
// Creates a complete language identifier from a primary and a secondary
// language identifier.
//
///////////////////////////////////////////////////////////////////////////////
function MAKELANGID(p, s)
{
return (( s << 10) | p);
}
function MAKELCID(lgid, srtid)
{
return ((srtid << 16) | lgid);
}
function IsKoreanLocale() {
var language = ApiObj.get_UserDefaultUILanguage();
if (language == MAKELCID(MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN), SORT_DEFAULT)) {
return true;
}
return false;
}
function IsFarEastLocale()
{
// if local is Korean, Simplified Chinese,
// Traditional Chinese,or Japanese then we return true
var language = ApiObj.get_UserDefaultUILanguage();
if (language == MAKELCID(MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN), SORT_DEFAULT) ||
language == MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL), SORT_DEFAULT) ||
language == MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT) ||
language == MAKELCID(MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT), SORT_DEFAULT))
return true
else
return false;
}