Sei sulla pagina 1di 62

Windows Internals Tour

Windows File System


Andrea DellAmico Microsoft Student Partner
andrea.dellamico@academicclub.org

21 Aprile 2012 Roma 3

Sommario

File Systems supportati da Windows


NTFS Design Goals
Architettura del File System Driver
Operazioni NTFS
Windows File System On-Disk Structure
Compressione NTFS
BitLocker
One more thing

Windows File System - Terminology


Settori:
Blocchi indirizzabili in hardware su un media di storage
La dimensione tipica di 512 bytes in un sistema x86
Formato File System:
Definisce come i dati sono memorizzati nel media di
storage
Impatta sulle caratteristiche: permessi e sicurezza,
limitazioni, supporto dischi grandi dimensioni
Clusters:
Blocchi indirizzabili che possono essere usati dal FS
La dimensione sempre multipla di quella dei settori
Dimensione = tradeoff tra efficienza di spazio e tempo di
accesso
Metadata:
Sono informazioni di supporto alla gestione del FS
Contiene le informazioni per localizzare i file e directory
in un volume
Tipicamente non accessibili alle applicazioni

Formati supportati da Windows


CD-ROM File System (CDFS)
Universal Disk Format (UDF)
File Allocation Table (FAT12, FAT16, FAT32,
exFAT)
New Technology File System (NTFS)

NTFS
NTFS il file System Nativo di Windows
NTFS usa indici a 64-bit per lidentificazione dei cluster
In teoria pu indirizzare volumi fino a 16 exabytes (16 miliardi di GB)
Da Windows 2000 il limite stato settato a 128 TB utilizzando cluster da
64-KB indirizzabili a 32-bit

Perch usare NTFS al posto del Fat? FAT semplice, rende alcune
operazioni pi veloci, ma NTFS supporta:

File e HD di grandi dimensioni


Migliori prestazioni in HD grandi, con grandi cartelle e piccoli file
Affidabilit
Sicurezza

NTFS Design Goals


Superare i limitazioni inerenti a FAT / HPFS
FAT (File Allocation Table) non supporta dischi di grandi
dimensione
FAT16 (MS-DOS file system) supporta solo 216 clusters e dischi da
2 GB ( con clusters da 64 Kb)
FAT / root directory rappresentano un singolo punto di
fallimento
Il numero di record nella root directory limitato
HPFS ha rimosso alcune limitazioni del FAT, ma non supporta
sicurezza, tecnologie di ripristino, ridondanza dei dati e faulttolerance (versioni successive di HPFS supportano fino a dischi
da 2TeraByte)

NTFS Recoverability
Nel passato lottimizzazione dellI/O dei PC era focalizzato sulla velocit
NTFS ha cambiato questa visione laffidabilit diventata la cosa pi
importante:
Le operazioni di I/O che alterano la struttura di NTFS sono
implementate con transazioni atomiche
Cambio della struttura delle directory,
Estendere file, allocare lo spazio per nuovi file

Le transazioni devono essere completate o annullate


NTFS memorizza in modo ridondante le informazioni vitali per lFS
Al contrario in FAT e HPFS, c un singolo settore che contiene tutte le
informazioni critiche
Un errore di lettura di questo settore causa la perdita del volume

NTFS Security and Recoverability


La sicurezza di NTFS deriva dal modello a oggetti di Windows
Lapertura di un file implementata come un oggetto, i descrittori di sicurezza sono
memorizzanti come parte del file
Il sistema di gestione della sicurezza di NT verifica i diritti di accesso quando un
processo tenta di accedere ad un oggetto
Lamministratore e owner del file possono impostare le propriet di sicurezza

NTFS recoverability garantisce lintegrit della struttura del FS


Non pu garantire il completo ripristino dei file degli utenti
Modello stratificato + FTDISK driver
Mirroring of data RAID level 1
Striping of data RAID level 5 (un disco con informazioni di parit)

Altre funzionalit di NTFS


Multiple data streams
Unicode-based names
Hard links
Junctions
Compression and sparse files
Change logging
Per-user volume quotas
Link tracking
Encryption
POSIX support
Defragmentation

Dischi e File Grandi


FAT16:
Tabella a 16-bit memorizza la struttura del disco
Fino a 65.536 clusters per volume (#files !!); la dimensione dei cluster
modificabile

FAT32:

Introdotto con Windows 2000


4kb clusters per volumi fino a 8 GB
Pu riallocalre la root directory / mantenere una copia di backup della FAT
La Root directory una lista di cluster, non ci sono limiti al numero di entry

HPFS (supporto rimosso in NT 4.0):


32 bits per enumerare le unit di allocazione, 4 GB la dimensione massima dei
file
Alloca lo spazio in settori fisici da 512 bytes (alcuni dischi con geometria a 1024
bit per settore non sono supportati)

Dischi e File Grandi (cont.)


NTFS indica i cluster con indici a 64-bit
Fino a 264 clusters di 64 Kbytes di
dimensione
Dimensione massima dei file: 264 bytes
Dimensione dei cluster modificabile
512 bytes per dischi piccoli
Fino a 64Kb per dischi grandi

NTFS Cluster Size


La dimensione dei cluster dipende dalla
dimensione del disco

512 bytes per dischi piccoli (up to 512 MB)


1 KB per dischi fino a 1 GB
2 KB per dischi tra 1 e 2 GB
4 KB per dischi pi grandi di 2 GB

Tradeoff: frammentazione del disco e spazio


sprecato

Multiple Data Streams


In NTFS, ogni unit di informazione associata ad un file (il
nome, il proprietario, i time stamp, il contenuto, etc) sono
implementate come un file attribute (NTFS object attribute)
Ogni attributo consiste in un singolo stream, che una
sequenza di bytes
Questa generica implementazione permette di aggiungere nuovi
attributi ad un file

Multiple Data Streams


Un file NTFS ha uno stream di default che non ha nome
Una applicazione pu creare nuovi stream, fornendone un nome
e riferendosi a questi con il nome scelto
Al fine di non modificare le Microsoft Windows I/O API, che
prendono come argomento un nome di file, i data stream
aggiuntivi possono essere riferiti aggiungendo : al nome del file:
es myfile:stream2

Unicode Names

Il supporto Unicode ereditato da Windows,


quindi possibile salvare file, directory e
volumi con un set completo di caratteri

Hard Links
Un Hard link consente di riferire path diversi allo stesso file
o directory
Se si crea un hard link a C:\Users\Documents\Spec.doc che si
riferisce al file C:\My Documents\Spec.doc, I due percorsi
puntano allo stesso file fisico, una modifica delluno si riflette su
entrambi

Junctions
Le Junctions sono anche chiamati symbolic
links, permettono di redirigere i file o le
directory ad altre posizioni
Se il path C:\Drivers una junction che redirige
a C:\Winnt\System32\Drivers, una applicazione
che legge C:\Drivers\Ntfs.sys, avrebbe accesso a
C:\Winnt\System\Drivers\Ntfs.sys
Pu essere creata con il comando:
mklink /J NomeJunction PercorsoDiDestinazione

Junctions
Nei sistemi
precedenti a Windows
Vista, le junction
possono essere create
con il juction tool di
Sysinternals o il tool
linkd tool dal
Resource Kits

Change Logging
Molte applicazioni, come le utility di backup
necessitano di monitorare i cambiamenti dei
volumi su cui operano
C un quindi un modo per lapplicazione di
aspettare la disponibilit di una directory
ed essere notificata in caso di modifica

Change Logging
Con Windows 2000, NTFS include I change
log, che tengono traccia degli eventi che
avvengono nel FS, sono implementati come
record metadata
Se il file supera la dimensione imposta, NTFS
elimina I dati pi vecchi
Le applicazioni devono usare le Win32 API per
leggere gli eventi
Il log condiviso e in genere abbastanza
grande per tenere traccia di tutte le modifiche
anche in caso di operazione con grandi I/O

Per-User Volume Quotas


Le NTFS Quota permettono di definire la quantit di spazio
disco utilizzabile da ciascun utente.
Pu essere configurato per registrare nellEvent Log il
superamento della soglia di attenzione da parte di utente.
Se un utente supera il limite imposto, levento viene registrato e
loperazione di scrittura interrotta con un avviso di disco pieno

Lo spazio occupato viene calcolato in base alla somma


della dimensione logica dei file e directory che hanno
lutente come proprietario degli stessi.

Link Tracking
Numerosi tipi di link simbolici sono usati dalle applicazioni:
I collegamenti permettono agli utenti di collocare i file nel loro ambiente
di lavoro (es desktop) indipendentemente dalla loro posizione nel file
system
Object linking and embedding (OLE) permettono ai documenti di
unapplicazione di essere nei documenti di unaltra

In passato erano difficili da gestire


Se spostavi la sorgente il link si rompeva

Ora Windows ha un servizio di link-tracking, TrkWks (gira dentro


services.exe), che tagga le sorgenti con un unique object ID e le rialloca
in caso di spostamenti

Encryption
Limplementazione della sicurezza di NTFS applicabile a file e
directory. Non efficace in caso di violazione fisica della macchina:
Installazione parallela di altra copia di Windows
NTFSDOS
Boot Disk / Live / etc.

Encrypting File System (EFS)


Come la compressione trasparente allutente
E implementata come attributo per file e directory
I file crittografati con EFS possono essere letti solo dallaccount che
possiede la chiave privata corrispondente. La chiave privata rilasciata
solo dopo lautenticazione dellutente stesso.
EFS integrato al livello pi basso di NTFS anche se implementato
come un file system filter.

POSIX Support
Il supporto POSIX richiede alcune
caratteristiche specifiche implementate in
NTFS:
Un descrittore di protezione per i gruppi
Nomi dei file case sensitive
Indicazioni di accesso e informazioni
dettagliate sullorario.

Filenames
POSIX:
Case-sensitive, trailing periods & spaces
NTFS namespace equivalente al POSIX space

Namespaces

Win32:
File name lunghi, con unicode
Punti multipli, spazi, punti iniziali

POSIX
subsystem

MS-DOS:
Nomi da 8.3 caratteri, non case sensitive

NTFS genera i nomi MS-DOS per i file Win32


automaticamente
Funzionano come alias NTFS
Memorizzati nella stessa directory; dir /x

Win32
subsystem
MS-DOS
Win16 clients

Deframmentazione
Frammentazione: un file si dice frammentato
quando non memorizzato in cluster contigui

La frammentazione significativa solo nei dischi a


piatti rotanti, nei nuovi supporti SSD (Solid State
Disk) invece non esiste.

Deframmentazione
Anche se comune opinione che NTFS non si frammenti,
questo non vero:
Le API della deframmentazione sono incluse fin da NT 4
Windows 2000 ha introdotto un deframmentatore non
schedulabile
In Windows XP stata aggiunta una implementazione da linea di
comando
In Windows 7 il defrag
automatico, disattivato di
default se presente un
disco allo stato solido

NTFS File System Driver

Log file
service
Flush the
log file

Write the
cache
Cache
manager

Access the mapped


file or flush the cache
Virtual memory
manager

Log the transaction


Read/write the file

I/O manager
NTFS driver

Fault tolerant
driver
Load data
from disk
into
memory

Disk driver

Read/write
a mirrored
or striped
volume
Read/write
the disk

Componenti di NTFS
Cache Manager

System wide caching

Per NTFS e altri drivers di file systems


Includendo i driver di network file system (server and redirectors)

Cached files sono mappati nella memoria virtuale

Linterfaccia specializzata da Cache Manager NT manager della


memoria virtuale
Il Memory manager ordina a NTFS di accedere ai driver del disco ed
ottenere i file

Log File Service

2 copie dei transaction logs


I Transaction log sono scritti su disco prima che la cache in scrittura sia
inviata al disco stesso
Cache manager esegue il flush delloperazione corrente

NTFS & File Objects


Process
Handle table
File object
Object
manager
data
structures

File object

File
control
block

Data
attribute

NTFS data
structures
App accesses files as
NT objects by handles.
Object Manager and security
subsystem verify access rights

Stream
control
blocks

(used to manage
the on-disk
structure)

Master file
table

Userdefined
attribute

NTFS
database
(on disk)

NTFS On-Disk Structure


I volumi corrispondono alle partizioni logiche dei dischi fissi
E possibile creare volumi fault tollerant distribuiti su pi dischi
Variano dalla SKU di Windows le modalit supportate

I volumi consistono in una serie di file + lo spazio vuoto


FAT volume: alcune aree sono formattate in modo specifico per lFS
NTFS volume: tutti i dati sono memorizzati come normali file

NTFS fa riferimento internamente ai cluster


Cluster factor: #sectors/cluster; varia con la dimensione dl volume;
(lintero numero dei settori fisici sempre potenza di 2)

Logical Cluster Numbers (LCNs):


Si riferiscono alla locazione fisica dei cluster
LCN sono lindice contiguo di tutti i cluster del volume

Master File Table


Tutti i dati memorizzati in un volume sono
contenuti in un file
MFT: Il cuore della struttura dei volumi
NTFS
Implementata come un array di file
records
Una riga per ogni file del volume
(inclusa una riga per la MFT stessa)
Archivio dei Metadata con le
informazioni sulla struttura del file
system
(file nascosti; $MFT; $Volume...)
Pi di un MFT record per i file molto
frammentati

MFT
MFT copy (partial)
Log file
Volume file

NTFS
metadata
file

Attribute def. table


Root directory
Bitmap file
Boot file
Bad cluster file
...

User files and dirs.

Operazioni NTFS
Montare un volume
1.

2.

NTFS controlla nei boot file per individuare lindirizzo fisico della
MFT ($MFT)
Il secondo record della MFT punta ad una copia della MFT stessa
($MFTMirr)
Necessaria per trovare i metadati se la MFT corrotta

3.
4.

I record della MFT contengono la mappatura VCN a LCN


NTFS ottine dalla MFT lindirizzo dei metadati
NTFS apre questi file

5.
6.

NTFS esegue le operazioni di ripristino


Il file system ora pronto e accessibile allutente

NTFS metadata
NTFS writes to log file ($LogFile)
Memorizza tutti i comandi che cambiano la struttura del volume
Root directory:
Quando NFTS cerca di aprire un file, parte sempre dalla root
directory
Quando il file trovato, ne memorizza il riferimento della MFT
Nelle seguenti operazioni di I/O possibile accedere al record MFT
direttamente
Bitmap file ($Bitmap):
memorizza lo stato di allocazione del volume (1 bit, 1 cluster)
Boot file ($Boot):
Contine il codice del bootstrap
E memorizzato in una specifica area del disco
Rappresentato come file -> file ops. possible (!) (non editabile)

NTFS metadata (contd.)


Bad-cluster file ($BadClus)
Memorizza la locazione dei Bad-Cluster

Volume file ($Volume)


Contiene: nome del volume, versione NTFS
Bit, che indica se il volume corrotto

Attribute Definition Table ($AttrDef)


Definisce quali sono gli attributi supportati dal
volume
Indica cosa pu essere indicizzato, recuperato, etc.

LCN vs VCN
NTFS si riferisce alle locazioni fisiche
attraverso LCN
Physical cluster = LCN * cluster-factor

Virtual Cluster Numbers (VCNs):


Memorizza i cluster che appartengono ad un
file; mappato sul LCN
LCNs non sono necessariamente fisicamente
contigui

File Records &


File Reference Numbers
Sequence
number
63

File number
47

I file nei Volumi NFTS sono identificati dal file reference


File number == index in MFT
Sequence number usato per i controlli di consistenza;
incrementato ogni volta che il file riusato

File Records:
Un file una collezione di coppie attributi/valori (uno di questi il dato)
Altri attributi: filename, time stamp, security descriptor,...
Ogni attributo del file memorizzato come uno stream di byte
allinterno del file

File Records (contd.)


NTFS non legge e scrive file:
Legge e scrive attributi
Operazioni: create, delete, read (byte range), write (byte range)
Read/write lavorano su attributi senza nome
Master File Table

Windows optimization: Security descriptors


are stored in a central file and referenced
by each file record (saves disk space)

Standard
information

Security
Filename descriptor

MFT record for a small file

Data

Attributi Standard dei file su NTFS


Attribute

Description

Standard
information

File attributes: read-only, archive, etc; time stamps;


creation/modification time; hard link count

Filename

Name in Unicode characters; multiple filename


attributes possible (POSIX links!!); short names for
access by MS-DOS and 16-bin Win applications

Security descriptor

Specifies who owns the file and who can access it

data

Contents of the file; a file has one default unnamed data


attribute; directory has no default data attrib.

Index root, index

Three attributes used to implement filename allocation,


bitmap index for large directories (dirs. only)

Attribute list

List of attributes that make up the file and first reference


of the MFT record in which the attribute is located (for
files which require multiple MFT file records)

Attributi (contd.)
Tutti gli attributi in un file record hanno un nome e un valore
NTFS identifica gli attributi con:
Nomi maiuscoli che iniziano con $: $FILENAME, $DATA

Attributes value: Byte stream


Il nome del file per $FILENAME
I Bytes di dati per $DATA

I nomi degli attributi corrispondo ad un typecode numerico


Gli attributi dei file nel record MFT sono memorizzati nellordine dei
typecode
Alcuni attributi possono comparire pi di una volta (es. Nome del file)

MS-DOS filenames in NTFS


Standard info

NTFS filename

MS-DOS filename

Security desc.

Data

MFT file record with MS-DOS filename attribute


Il nome NTFS e il nome MS-DOS sono memorizzati nello stesso record e puntano allo
stesso file
La rinominazione cambia entrambi i nomi
Apertura, lettura, scrittura, cancellazione lavorano con entrambi i nomi allo
stesso modo.
POSIX hardlinks sono implementati allo stesso modo
Cancellare un file con pi nomi, decrementa solo il contatore dei link
Generazione dei nomi MS-DOS:
1. Rimuove caratteri illegali, rimuove altri caratteri non alfanumerici ad eccezione
dei punti, tronca a 6 caratteri.
2. Concatena ~1 al nome; tronca lestensione a 3 caratteri, tutti maiuscoli
3. Inscrementa ~1 se trova duplicati nella stessa cartella

Resident & Nonresident Attributes


File Piccoli:

Tutti gli attributi sono memorizzati nella MFT


Gli attributi che risiedono nella MFT sono chiamati resident
Tutti gli attributi iniziano con un header (sempre contenuto nella MFT)
LHeader include loffset to attr. value e lunghezza del value

Standard info

NTFS filename

Security desc.

Data

header
RESIDENT
Offset: 8h
Length: 14h

value

MYFILE.DAT

Attributes (contd.)
Piccole Cartelle:

Index root contiene i riferimenti ai file e


subdirectory

Standard info

NTFS filename Security desc.

Index root

Empty

Index of files
file1, file2, file3,...
MFT file record for a small directory

Se lattributo non sta nella MFT:

NTFS alloca un cluster separato (run, extent) per memorizzare il valore


NFTS alloca altri run se lattributo cresce nel tempo
Questi attributi sono chiamati non-resident
LHeader degli attributi non-resident contiene
linformazione sulla loro locazione

Large files & directories


Standard info

NTFS filename Security desc.

Data

HPFS extended attr.

MFT record for large file with 2 data runs

Solo gli attributi che possono crescere devono essere non-resident


Il nome del file e le informazioni standard devono essere sempre resident
Gli indici dei file per le directory formano dei B+ tree
Standard info

NTFS filename Security desc. Index root Index allocation


Index of files
file4, file8

MFT file record for a large directory


with nonresident filename index
file1, file2, file3

VCN-to-LCN
mappings

file5, file6

Bitmap

Large files (contd.)


NTFS keeps track of runs by means of VCN

(Virtual Cluster Numbers)


Logical Cluster Numbers rappresentano lintero volume
Virtual Cluster Numbers rappresentano i cluster che fan parte di un file
La lista degli attributi pu estendersi tra pi run (non solo i dati)
Standard info

NTFS filename Security desc.

VCN-to-LCN mappings for a


nonresident data attribute

VCN 0

Data

LCN 1355 1356 1357 1358

Data
Startin
g VCN

Startin
g LCN

Number of
clusters

1355

1588

VCN 4

Data

LCN 1588 1589 1590 1591

Compressione

NFTS supporta la compressione trasparente dei file


Se una cartella indicata come compressa, tutti i file contenuti e
le sub directory sono compresse
La compressione a livello di cluster ed applicata a 16 blocchi
di ogni file
La compressione attivabile dalla GUI del sistema operativo.

Compression of sparse files


NTFS azzera tutto il contenuto del file alla creazione
Molti sparse files contengono una gran quantit di zeri
Questi occupano spazio quelli inutili sono compressi.

Standard info

VCN 0

NTFS filename Security desc.

....

15

Data
LCN 1355 1356 1357 1358 ....
VCN 32

33

34

35

...

1370

Startin
g VCN

Startin
g LCN

Number of
clusters

1355

16

32

1588

16

48

96

16

128

324

16

47

Data
LCN 1588 1589 1590 1591 ....

Data

1603

Certain ranges of VCNs have no


disk allocation (16-31, 64-127)

Compressing Nonsparse Data


NTFS divide i file non processati in unit di compressione da 16 cluster
luna.
Alcune sequenze non possono essere molto compresse
NTFS determina se possibile comprimere di almeno un cluster ogni
unit
Se i dati non possono essere compressi, alloca lo spazio e li scrive su
disco
Se i dati possono essere compressi di almeno un cluster, NTFS alloca solo
lo spazio necessario per la memorizzazione dellinformazione compressa

Quando sono scritti dati, NTFS si assicura che ogni run inizi sempre al
limite del 16 cluster.
In lettura/scrittura si accede sempre allintera unit di compressione
Lettura anticipata + decompressione asincrona migliorano le
performance

Data runs of a compressed file


15

VCN 0
Compressed data

LCN 19

20 21
16

22
31
Compressed data

23

24

25
32

26 27

28

29

30
47
Noncompressed data

Startin
g VCN

Startin
g LCN

No. of
cluster
s

19

16

23

32

97

16

48

113

10

97

98 99
48

100 101 102 103 104 105 106 107 108 109 110 111 112

63
Compressed data

113 114 115 116 117 118 119 120 121 122

MFT record for a compressed file

VHD: Virtual Hard Disk


E un file che riprende le caratteristiche di un
HD fisico
Le specifiche sono disponibili sotto
Microsoft Open Specification Promise
Supportato dalla maggior parte dei software
di virtualizzazione
Integrato in Windows 7 / 2008 R2

BitLocker e BitLocker to Go
Introdotto in Windows Vista
Sistema di crittografia per la protezione
dellintero volume
Utilizza AES 128 o AES 256 (con o senza
diffusione)
Integrato con TPM

BitLocker Drive Encryption Architecture

PreOS

Static OS

All Boot Blobs


unlocked

Volume Blob of Target OS


unlocked

TPM Init
BIOS
MBR
BootSector
BootBlock
BootManager
OS Loader

Start
OS

Disk Layout And Key Storage


OS Volume
Encrypted OS
Encrypted Page File
Encrypted Temp Files
Encrypted Data
Encrypted Hibernation File

Dove lEncryption Key?


1. SRK (Storage Root Key)
dentro il TPM
2. SRK encrypts FVEK (Full Volume
Encryption Key) protetta da
TPM/PIN/USB Storage Device
3. FVEK memorizzata (encrypted da
SRK) nel HD dentro lOS Volume

3
OS Volume
System

2 FVE
K
System Volume Contains:
MBR, Boot manager, Boot Utilities
(Unencrypted, small)

1 SRK

Come superare BitLocker ?


1. Trovare la macchina Target
2. Controllare che sia accesa o in Standby
3. Raffreddare la ram con uno spray
criogenico
4. Fare il dump della RAM con un USB boot
disk
5. Trovare la chiave di BitLocker analizzando
il dump
6. Facile no?

One more thing

ReFS: Resilient File System


Disponibile in Windows Server 8

Solo per volumi dati (no boot)


Integrit dei metadati con checksums

ReFS: B+ tree on-disk structure

DOMANDE, RICHIESTE,
SUGGERIMENTI?

GRAZIE A TUTTI PER


LATTENZIONE!

Copyright Notice

2000-2005 David A. Solomon and Mark Russinovich

These materials are part of the Windows Operating System


Internals Curriculum Development Kit, developed by David
A. Solomon and Mark E. Russinovich with Andreas Polze
Microsoft has licensed these materials from David Solomon
Expert Seminars, Inc. for distribution to academic
organizations solely for use in academic environments (and
not for commercial use)

Microsoft, Windows Server 2003 R2, Windows Server 2008, Windows 7 and Window Vista are either registered trademarks or trademarks of Microsoft Corporation in the
United States and/or other countries. The names of actual companies and products mentioned herein may be the trademarks of their respective owners. The information
herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to
changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information
provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS
PRESENTATION.

Potrebbero piacerti anche