GAI SRT Documentazione Antonio Poddighe Giovanni AlvitoBologna 19 dicembre 2005.
PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005...
-
Upload
elnora-marinelli -
Category
Documents
-
view
217 -
download
1
Transcript of PiattaformePiattaformePiattaformePiattaforme Antonio Cisternino 11 Febbraio 2005...
PPiiaattttaaffoorrmmee
Antonio CisterninoAntonio Cisternino
11 Febbraio 200511 Febbraio 2005
OOppeenn
SSoouurrccee
e PPrroopprriieettaarriiee
Un mondo di Un mondo di componenticomponenti
Componenti, gli unknown
• L’architettura di Windows è sostanzialmente differente da quella Unix
• Nel tempo i componenti binari, piuttosto che gli eseguibili, sono diventati la vera unità di esecuzione di Windows
• Molte delle caratteristiche della piattaforma Windows sono legate a questa sua struttura
Componenti binari
• La tecnologia chiave per l’architettura a componenti di Windows è COM
• I componenti COM sono componenti binari: un programma li può caricare ed eseguire anche se sviluppati separatamente e con linguaggi di programmazione differenti
• Il sistema si basa su convenzioni di compilazione e il meccanismo del caricamento dinamico delle DLL
COM Live Demo
• Ma cosa vuol dire esattamente che non ci sono applicazioni ma componenti?
• Quali applicazioni sono in realtà componenti?
• La Object Shell è stata sviluppata per poter sperimentare con i componenti COM interattivamente e scrivere più facilmente script
Come funziona?
• Il registro di sistema fu introdotto in Windows 3.0 per supportare COM
• Il ruolo fondamentale che esso gioca è quello di tenere traccia dei componenti installati nel sistema
• I GUID non sono altro che chiavi per navigare il registro
Windows Scripting Host
• Molti (quasi tutti) credono che gli script in Windows siano ancora i file batch
• NO! La vera programmazione di sistema è basata su Active Scripting e Windows Scripting Host
• Tutti i task di sistema sono esposti mediante componenti COM
• Informazioni e documentazione: http://msdn.microsoft.com/scripting
L’architettura
Javascript
• Sebbene WSH ammette vari linguaggi JScript è indubbiamente un buon linguaggio:– È l’implementazione Microsoft di ECMA-262– È utilizzato anche nelle pagine Web (e
XSLT)– È un linguaggio molto ben disegnato
• Alcune applicazioni (come ad esempio Office) usano VBScript, ma è facile convertire un linguaggio nell’altro
Javascript in 2 slidesfunction apply(arr, f) { var ret = new Array(arr.length); var i; for (i = 0; i < arr.length; i++) ret[i] = f(arr[i]); return ret;}function printArray(arr) { var i, s = "{ "; for (i = 0; i < arr.length; i++) { if (i != 0) s += ", "; s += arr[i]; } s += " }"; WScript.Echo(s); }function inc(i) { return i + 1; }var a = new Array(1, 2, 3, 4, 5);printArray(a);printArray(apply(a, inc));
...la secondafunction Persona(n, c) { this.Nome = n; this[“Cognome”] = c;}var p = new Persona('Antonio',
'Cisternino');
function PersonaEq(o, n, c) { o.Nome = n; o.Cognome = c;}p = PersonaEq({}, 'Antonio',
'Cisternino');
function Stack() { this.sp = 0; this.Push = function (v) { this[this.sp++] = v; } this.Pop = function () { if (this.sp == 0) throw "Empty Stack!"; return this[--this.sp]; } this.IsEmpty = function () { return this.sp == 0; }}try { var s = new Stack(); s.Push(1); s.Push("Ciao"); WScript.Echo(s.Pop()); WScript.Echo(s.Pop()); WScript.Echo(s.Pop()); // Errore! s.Push(2); // Non verra` eseguito!} catch (e) { WScript.Echo("Errore: " + e);}
FileSystemObjectvar fso = WScript.CreateObject("Scripting.FileSystemObject");
function ProcessDir(d, p) { var e; for (e = new Enumerator(d.Files); !e.atEnd(); e.moveNext()) { var f = e.item(); if (f.Path.match(p)) WScript.Echo(f); } for (e = new Enumerator(d.SubFolders); !e.atEnd(); e.moveNext()) { var cd = e.item(); ProcessDir(cd, p);}}try { if (WScript.Arguments.length != 2) { WScript.Echo("Usage: find dir pattern"); WScript.Quit(0); } d = fso.GetFolder(WScript.Arguments.Item(0)); p = new RegExp(WScript.Arguments.Item(1)); ProcessDir(d, p);} catch (e) { WScript.Echo(e);}
System Info...var wshnw = WScript.CreateObject("WScript.Network");var wshsh = WScript.CreateObject("WScript.Shell");var out = "Informazioni sul programma (WScript):\n\nWSH exe: " + WScript.FullName + "\nScript
name: " + WScript.ScriptFullName + "\nN. Argomenti: " + WScript.Arguments.length + "\n";for (i = 0; i < WScript.Arguments.length; i++) out += "Args[" + i + "] = '" + WScript.Arguments(i)+ "'\n"out += WScript.interactive ? "Lo script è interattivo\n" : "Lo script non è interattivo\n\n"; WScript.Echo(out);out = "Informazioni di rete (WshNetwork):\n\nComputer name: " + wshnw.ComputerName + "\nDomain
name: " + (wshnw.DomainName == undefined ? "Nessun dominio" : wshnw.DomainName) + "\nUser name: " + wshnw.UserName + "\n\nConnessioni di rete:\n\n";
for (d = wshnw.EnumNetworkDrives(), i = 0; i < d.length; i+= 2) out += d.Item(i) + " -> " + d.Item(i + 1) + "\n";out += "\nStampanti Installate:\n\n";for (p = wshnw.EnumPrinterConnections(), i = 0; i < p.length; i+= 2) out += p.Item(i) + " -> " + p.Item(i + 1) + "\n\n"; WScript.Echo(out);out = "Basic Shell Information:\n\nCurrent Directory: " + wshsh.CurrentDirectory + "\n\
nEnvironment variables:\n\n";for (en = new Enumerator(wshsh.Environment); !en.atEnd(); en.moveNext()) out += en.item() + "\n";sf = new Array("AllUsersDesktop", "AllUsersStartMenu", "AllUsersPrograms", "AllUsersStartup",
"Desktop", "Favorites", "Fonts", "MyDocuments", "NetHood", "PrintHood", "Programs", "Recent", "SendTo", "StartMenu", "Startup", "Templates"); out += "\nSpecial Folders:\n\n";
for (i = 0; i < sf.length; i++) out += sf[i] + " -> '" + wshsh.SpecialFolders.Item(sf[i]) + "'\n";out += "\nYour HKCR\\.exe default value is '"+wshsh.RegRead("HKCR\\.exe\\")+"'\n\n";
WScript.Echo(out);
Componenti utili (DB)
var rs = WScript.CreateObject("ADODB.Recordset");
var connstr = "Driver={Microsoft Excel Driver (*.xls)};DBQ=Prova.xls;DriverID=278";
rs.Open('select * from "Sheet1$"', connstr);while (!rs.eof) { WScript.Echo(rs(0)); rs.MoveNext();}
Accounting (ADSI)var container =
GetObject("LDAP://cn=Users,dc=miodominio,dc=it");var e = new Enumerator(container);
for (; !e.atEnd(); e.moveNext()) { var user = e.item(); if (user.Get("objectCategory").indexOf("Person") !
= -1) { WScript.Echo(user.distinguishedName); }}
XML (MSXML)
.NET Hype
A managed OS
Monad, a .NET shell
Conclusioni