Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

660 lines
19 KiB

//
//
//
var mdb_ContentOwners = [];
var mdb_Taxonomy = [];
var mdb_Topics = [];
var mdb_Keywords = [];
var edb_ContentOwners = [];
var edb_Taxonomy = [];
var edb_Topics = [];
var edb_Topics_LOOKUP = [];
var edb_Keywords = [];
var edb_Owner = null;
////////////////////////////////////////////////////////////////////////////////
var hhkList = [];
hhkList[ "98update.chm" ] = "/98update.hhk";
hhkList[ "access.chm" ] = "/access.hhk";
hhkList[ "accessib.chm" ] = "/accessib.hhk";
hhkList[ "camera.chm" ] = "/camera.hhk";
hhkList[ "common.chm" ] = "/common.hhk";
hhkList[ "cpanel.chm" ] = "/cpanel.hhk";
hhkList[ "find.chm" ] = "/find.hhk";
hhkList[ "Folderop.chm" ] = "/Folderop.hhk";
hhkList[ "ieeula.chm" ] = "/ieeula.hhk";
hhkList[ "iesupp.chm" ] = "/iesupp.hhk";
hhkList[ "iexplore.chm" ] = "/iexplore.hhk";
hhkList[ "infrared.chm" ] = "/infrared.hhk";
hhkList[ "license.chm" ] = "/license.hhk";
hhkList[ "mouse.chm" ] = "/mouse.hhk";
hhkList[ "mstask.chm" ] = "/mstask.hhk";
hhkList[ "mtshelp.chm" ] = "/mtshelp.hhk";
hhkList[ "ndsnp.chm" ] = "/ndsnp.hhk";
hhkList[ "network.chm" ] = "/network.hhk";
hhkList[ "ratings.chm" ] = "/ratings.hhk";
hhkList[ "rnaapp.chm" ] = "/rnaapp.hhk";
hhkList[ "users.chm" ] = "/users.hhk";
hhkList[ "vpn.chm" ] = "/vpn.hhk";
hhkList[ "whatnew.chm" ] = "/whatnew.hhk";
hhkList[ "windows.chm" ] = "/windows.hhk";
hhkList[ "Compfldr.chm" ] = "/Compfldr.hhk";
hhkList[ "OSK.chm" ] = "/OSK.hhk";
hhkList[ "Brief.chm" ] = "/Brief.hhk";
hhkList[ "Webfoldr.chm" ] = "/Webfoldr.hhk";
hhkList[ "icwdial.chm" ] = "/icwdial.hhk";
////////////////////////////////////////////////////////////////////////////////
var ftsList = [];
ftsList[ "windows.chm" ] = "windows.chq";
////////////////////////////////////////////////////////////////////////////////
var stopwords = "a,able,about,also,an,another,any,are,aren't,arent,as,at,be,beat,because,being,both,but,by,came,can,can't,cannot,cant,come,could,couldnt,couldn't,did,didnt,didn't,do,does,doesn't,doesnt,don't,dont,each,effort,for,from,get,give,gives,giving,got,had,has,have,havent,haven't,having,how,however,howto,if,i,im,i'm,in,into,is,isnt,isn't,it,i've,know,like,mainly,make,makes,making,many,may,me,might,more,most,mostly,much,must,my,need,needing,needs,never,now,of,on,only,onto,other,our,over,please,propose,proposes,proposing,same,see,should,shouldnt,shouldn't,since,so,some,still,such,suppose,supposedly,take,takes,taking,that,the,these,this,those,though,through,to,too,tries,try,trying,trys,unless,until,useless,up,use,uses,using,very,want,wanting,wants,was,way,ways,were,werent,weren't,what,whatever,what's,where,whereas,which,whichever,while,whilst,will,with,won't,wont,work,working,works,would,you,you've,your,new,feature,features,old,prepare,prepares,preparing,choose,chooses,choosing,pick,picks,picking,chose,usage,useful"
var dbparamList = [];
dbparamList[ "SET_STOPSIGNS" ] = ",?;";
dbparamList[ "SET_STOPSIGNS_ATENDOFWORD" ] = ".!";
dbparamList[ "SET_STOPWORDS" ] = stopwords;
dbparamList[ "SET_OPERATOR_NOT" ] = "not";
dbparamList[ "SET_OPERATOR_AND" ] = "and";
dbparamList[ "SET_OPERATOR_OR" ] = "or";
dbparamList[ "DB_SKU" ] = "Server";
dbparamList[ "DB_LANGUAGE" ] = "English";
dbparamList[ "DB_VERSION" ] = "1.0.0.0";
dbparamList[ "HELP_LOCATION" ] = "%WINDIR%\\Help";
////////////////////////////////////////////////////////////////////////////////
var args = WScript.Arguments;
if(args.length != 2)
{
WScript.Echo( "Usage: CopySchema.js <EDB database file> <MDB database file>" );
WScript.Quit( 10 );
}
//try
{
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
var connObj = new ActiveXObject( "ADODB.Connection" );
connObj.Open( "provider=Microsoft.Jet.OLEDB.4.0;data source=" + fso.GetAbsolutePathName( args(1) ) + ";" );
LoadContentOwners( connObj );
LoadTaxonomy ( connObj );
LoadTopics ( connObj );
LoadKeywords ( connObj );
var sess = new ActiveXObject( "PCH.DBSession" );
var db = sess.AttachDatabase( fso.GetAbsolutePathName( args(0) ) );
////////////////////////////////////////
sess.BeginTransaction ( );
GenerateDBParameters ( sess );
sess.CommitTransaction( );
sess.BeginTransaction ( );
GenerateContentOwner ( sess, db );
sess.CommitTransaction( );
sess.BeginTransaction ( );
GenerateIndexFiles ( sess );
sess.CommitTransaction( );
sess.BeginTransaction ( );
GenerateFullTextSearch( sess );
sess.CommitTransaction( );
////////////////////////////////////////
sess.BeginTransaction ( );
GenerateTaxonomy ( sess, db );
sess.CommitTransaction( );
sess.BeginTransaction ( );
GenerateTopics ( sess, db );
sess.CommitTransaction( );
sess.BeginTransaction ( );
GenerateKeywords ( sess, db );
sess.CommitTransaction( );
sess.BeginTransaction ( );
GenerateMatches ( sess, db );
sess.CommitTransaction( );
}
//catch(e)
//{
// WScript.Echo( "Error: " + hex( e.number ) + " - " + e.description );
//
// if(sess) sess.RollbackTransaction();
//}
////////////////////////////////////////////////////////////////////////////////
function LoadContentOwners( connObj )
{
var cmdObj = new ActiveXObject( "ADODB.Command" );
var rs;
WScript.Echo( "Loading Content Owners..." );
cmdObj.ActiveConnection = connObj;
cmdObj.CommandText = "select * from ContentOwners";
cmdObj.CommandType = 1; // adCmdText
rs = cmdObj.Execute();
while(rs.EOF == false)
{
var obj = new Object();
var fl = rs.Fields;
obj.OWID = fl.Item("OWID").Value;
obj.DN = fl.Item("DN" ).Value;
rs.MoveNext();
if(obj.DN == "This row is not used") continue; // Hack...
mdb_ContentOwners[ obj.DN ] = obj;
}
rs = null;
cmdObj = null;
}
function LoadTaxonomy( connObj )
{
var cmdObj = new ActiveXObject( "ADODB.Command" );
var rs;
WScript.Echo( "Loading Taxonomy..." );
cmdObj.ActiveConnection = connObj;
cmdObj.CommandText = "select * from Topics where Entry <> \"\" order by Category";
cmdObj.CommandType = 1; // adCmdText
rs = cmdObj.Execute();
while(rs.EOF == false)
{
var obj = new Object();
var fl = rs.Fields;
obj.OID = fl.Item("OID" ).Value;
obj.Category = fl.Item("Category" ).Value;
obj.Entry = fl.Item("Entry" ).Value;
obj.Title = fl.Item("Title" ).Value;
obj.Description = fl.Item("Description").Value;
obj.OWID = fl.Item("OWID" ).Value;
mdb_Taxonomy[ obj.Category + "/" + obj.Entry ] = obj;
rs.MoveNext();
}
rs = null;
cmdObj = null;
}
function LoadTopics( connObj )
{
var cmdObj = new ActiveXObject( "ADODB.Command" );
var rs;
WScript.Echo( "Loading Topics..." );
cmdObj.ActiveConnection = connObj;
cmdObj.CommandText = "select * from Topics where URI <> \"\"";
cmdObj.CommandType = 1; // adCmdText
rs = cmdObj.Execute();
while(rs.EOF == false)
{
var obj = new Object();
var fl = rs.Fields;
obj.OID = fl.Item("OID" ).Value;
obj.Category = fl.Item("Category" ).Value;
obj.URI = AdjustURL( fl.Item("URI" ).Value );
obj.Title = fl.Item("Title" ).Value; if(obj.Title == null) obj.Title = "";
obj.Description = fl.Item("Description").Value;
obj.Type = fl.Item("Type" ).Value; if(obj.Type == null) obj.Type = 1;
obj.OWID = fl.Item("OWID" ).Value;
mdb_Topics[ obj.OID ] = obj;
rs.MoveNext();
}
rs = null;
cmdObj = null;
}
function LoadKeywords( connObj )
{
var cmdObj = new ActiveXObject( "ADODB.Command" );
var rs;
WScript.Echo( "Loading Keywords..." );
cmdObj.ActiveConnection = connObj;
cmdObj.CommandText = "SELECT Topics.OID, SuperKeywords.Keyword FROM Topics, Matches, SuperKeywords where Topics.OID = Matches.OID AND Matches.KID = SuperKeywords.KID";
cmdObj.CommandType = 1; // adCmdText
var num=0;
rs = cmdObj.Execute();
while(rs.EOF == false)
{
var fl = rs.Fields;
var keyword;
var arr;
keyword = fl.Item("Keyword" ).Value;
arr = mdb_Keywords[ keyword ];
if(!arr)
{
mdb_Keywords[ keyword ] = [];
arr = mdb_Keywords[ keyword ];
}
arr[fl.Item("OID").Value] = 1;
num++;
rs.MoveNext();
}
rs = null;
cmdObj = null;
}
////////////////////////////////////////////////////////////////////////////////
function GenerateDBParameters( sess )
{
var tbl = db.AttachTable( "DbParameters" );
var colENUM = tbl.Columns;
var col_Name = colENUM( "Name" );
var col_Value = colENUM( "Value" );
WScript.Echo( "Generating DBParameters..." );
CleanTable( tbl );
for(i in dbparamList)
{
tbl.PrepareInsert();
col_Name .Value = i;
col_Value.Value = dbparamList[i];
tbl.UpdateRecord();
}
}
function GenerateIndexFiles( sess )
{
var tbl = db.AttachTable( "IndexFiles" );
var colENUM = tbl.Columns;
var col_ID_owner = colENUM( "ID_owner" );
var col_Storage = colENUM( "Storage" );
var col_File = colENUM( "File" );
WScript.Echo( "Generating IndexFiles..." );
CleanTable( tbl );
for(i in hhkList)
{
tbl.PrepareInsert();
col_ID_owner.Value = edb_Owner.ID_owner;
col_Storage .Value = i;
col_File .Value = hhkList[i];
tbl.UpdateRecord();
}
}
function GenerateFullTextSearch( sess )
{
var tbl = db.AttachTable( "FullTextSearch" );
var colENUM = tbl.Columns;
var col_ID_owner = colENUM( "ID_owner" );
var col_CHM = colENUM( "CHM" );
var col_CHQ = colENUM( "CHQ" );
WScript.Echo( "Generating FullTextSearch..." );
CleanTable( tbl );
for(i in ftsList)
{
tbl.PrepareInsert();
col_ID_owner.Value = edb_Owner.ID_owner;
col_CHM .Value = i;
col_CHQ .Value = ftsList[i];
tbl.UpdateRecord();
}
}
////////////////////////////////////////////////////////////////////////////////
function GenerateContentOwner( sess, db )
{
var tbl = db.AttachTable( "ContentOwners" );
var colENUM = tbl.Columns;
var col_DN = colENUM( "DN" );
var col_ID_owner = colENUM( "ID_owner" );
var col_IsOEM = colENUM( "IsOEM" );
WScript.Echo( "Generating Content Owners..." );
CleanTable( tbl );
for(i in mdb_ContentOwners)
{
var obj = mdb_ContentOwners[i];
var obj2 = new Object();
tbl.PrepareInsert();
col_DN .Value = obj.DN;
debugger;
col_IsOEM.Value = true;
tbl.UpdateRecord();
obj2.DN = col_DN .Value;
obj2.ID_owner = col_ID_owner.Value;
obj2.IsOEM = col_IsOEM .Value;
if(edb_Owner == null) edb_Owner = obj2;
edb_ContentOwners[obj2.DN] = obj2;
}
}
function GenerateTaxonomy( sess, db )
{
var tbl = db.AttachTable( "Taxonomy" );
var colENUM = tbl.Columns;
var col_ID_node = colENUM( "ID_node" );
var col_Pos = colENUM( "Pos" );
var col_ID_parent = colENUM( "ID_parent" );
var col_ID_owner = colENUM( "ID_owner" );
var col_Entry = colENUM( "Entry" );
var col_Title = colENUM( "Title" );
var col_Description = colENUM( "Description" );
WScript.Echo( "Generating Taxonomy..." );
CleanTable( tbl );
tbl.PrepareInsert();
col_Entry .Value = "<ROOT>";
col_ID_owner.Value = edb_Owner.ID_owner;
col_Pos .Value = 0;
tbl.UpdateRecord();
var obj2 = new Object();
obj2.ID_node = col_ID_node .Value;
obj2.Pos = col_Pos .Value;
obj2.ID_parent = col_ID_parent .Value;
obj2.ID_owner = col_ID_owner .Value;
obj2.Entry = col_Entry .Value;
obj2.Title = col_Title .Value;
obj2.Description = col_Description.Value;
edb_Taxonomy[obj2.Entry] = obj2;
while(1)
{
var done = true;
var got = false;
for(i in mdb_Taxonomy)
{
var obj = mdb_Taxonomy[i]; if(obj.done) continue;
var pathParent = (obj.Category != "" ? "<ROOT>/" : "<ROOT>") + obj.Category;
if(obj2 = edb_Taxonomy[pathParent])
{
got = true;
// WScript.Echo( "Mapped taxonomy node: " + pathParent + " -- " + obj.Category + " -- " + obj.Entry );
obj.done = true;
tbl.PrepareInsert();
col_Entry .Value = obj .Entry;
col_ID_owner .Value = edb_Owner.ID_owner;
col_ID_parent .Value = obj2 .ID_node;
col_Pos .Value = obj .OID;
col_Title .Value = obj .Title;
col_Description.Value = obj .Description;
tbl.UpdateRecord();
var obj2 = new Object();
obj2.ID_node = col_ID_node .Value;
obj2.Pos = col_Pos .Value;
obj2.ID_parent = col_ID_parent .Value;
obj2.ID_owner = col_ID_owner .Value;
obj2.Entry = col_Entry .Value;
obj2.Title = col_Title .Value;
obj2.Description = col_Description.Value;
edb_Taxonomy[ pathParent + "/" + obj2.Entry] = obj2;
}
else
{
done = false;
}
}
if(done) break;
if(got == false)
{
for(i in mdb_Taxonomy)
{
var obj = mdb_Taxonomy[i]; if(obj.done) continue;
WScript.Echo( "Unmapped taxonomy node: " + obj.Category + " -- " + obj.Entry );
}
break;
}
// {
// var e = new Object();
//
// e.number = 0x80004005;
// e.description = "Unmapped taxonomy nodes!";
//
// throw e;
// }
}
}
function GenerateTopics( sess, db )
{
var tbl = db.AttachTable( "Topics" );
var colENUM = tbl.Columns;
var col_ID_topic = colENUM( "ID_topic" );
var col_ID_node = colENUM( "ID_node" );
var col_ID_owner = colENUM( "ID_owner" );
var col_Pos = colENUM( "Pos" );
var col_Title = colENUM( "Title" );
var col_URI = colENUM( "URI" );
var col_Description = colENUM( "Description" );
var col_Type = colENUM( "Type" );
WScript.Echo( "Generating Topics... (this will take some time)" );
CleanTable( tbl );
for(i in mdb_Topics)
{
var obj = mdb_Topics[i];
var obj2 = edb_Taxonomy[ "<ROOT>/" + obj.Category];
if(obj2 == null)
{
WScript.Echo( "Unmapped topic: " + obj.Category + " -- " + obj.Title );
continue;
}
tbl.PrepareInsert();
col_ID_node .Value = obj2 .ID_node;
col_ID_owner .Value = edb_Owner.ID_owner;
col_Pos .Value = obj .OID;
col_Title .Value = obj .Title;
col_URI .Value = obj .URI;
col_Description.Value = obj .Description;
col_Type .Value = obj .Type;
tbl.UpdateRecord();
var obj3 = new Object();
obj3.ID_topic = col_ID_topic .Value;
obj3.ID_node = col_ID_node .Value;
obj3.ID_owner = col_ID_owner .Value;
obj3.Pos = col_Pos .Value;
obj3.Title = col_Title .Value;
obj3.URI = col_URI .Value;
obj3.Description = col_Description.Value;
obj3.Type = col_Type .Value;
edb_Topics [obj3.ID_topic] = obj3;
edb_Topics_LOOKUP[obj .OID ] = obj3;
}
}
function GenerateKeywords( sess, db )
{
var tbl = db.AttachTable( "Keywords" );
var colENUM = tbl.Columns;
var col_Keyword = colENUM( "Keyword" );
var col_ID_keyword = colENUM( "ID_keyword" );
WScript.Echo( "Generating Keywords..." );
CleanTable( tbl );
for(i in mdb_Keywords)
{
tbl.PrepareInsert();
col_Keyword.Value = i;
tbl.UpdateRecord();
var obj2 = new Object();
obj2.Keyword = col_Keyword .Value;
obj2.ID_keyword = col_ID_keyword.Value;
edb_Keywords[obj2.Keyword] = obj2;
}
}
function GenerateMatches( sess, db )
{
var tbl = db.AttachTable( "Matches" );
var colENUM = tbl.Columns;
var col_ID_topic = colENUM( "ID_topic" );
var col_ID_keyword = colENUM( "ID_keyword" );
var col_HHK = colENUM( "HHK" );
WScript.Echo( "Generating Matches... (this will take some time)" );
CleanTable( tbl );
for(i in mdb_Keywords)
{
var arr = mdb_Keywords[i];
var obj = edb_Keywords[i];
for(j in arr)
{
var obj2 = edb_Topics_LOOKUP[j];
if(obj2) // == null in case it's a match to a taxonomy node (NOT SUPPORTED).
{
tbl.PrepareInsert();
col_ID_topic .Value = obj2.ID_topic;
col_ID_keyword.Value = obj .ID_keyword;
col_HHK .Value = true;
tbl.UpdateRecord();
}
}
}
}
function CleanTable( tbl )
{
try
{
tbl.Move( 0, -2147483648 /* JET_MoveFirst */ );
while(1)
{
tbl.DeleteRecord();
tbl.Move( 0, 1 );
}
}
catch(e)
{
if(e.number != -1576994371 /*0xA200F9BD*/) throw e;
}
}
////////////////////////////////////////////////////////////////////////////////
function hex( num )
{
var i;
var res = "";
for(i=0;i<8;i++)
{
var mod = num & 0xF;
switch(mod)
{
case 10: mod = "A"; break;
case 11: mod = "B"; break;
case 12: mod = "C"; break;
case 13: mod = "D"; break;
case 14: mod = "E"; break;
case 15: mod = "F"; break;
}
res = mod + res;
num = num >> 4;
}
return res;
}
function AdjustURL( url )
{
return url.replace( /%WINDIR%\\Help/i, "%HELP_LOCATION%" );
}