gestione file system e i/o in windows 2000 implementazione del file system fat-12, fat-16, fat-32...
TRANSCRIPT
![Page 1: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/1.jpg)
Gestione File System e I/O in Windows 2000
•Implementazione del File System
•FAT-12, FAT-16, FAT-32
• NTFS
•API relative al File System
•Gestione dei dispositivi di I/O
![Page 2: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/2.jpg)
Il File System MS-DOS
• Rappresentazione di una directory in MS-DOS
• Attributi : file nascosto, file di sistema, ecc.
![Page 3: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/3.jpg)
Il File System DOS in Windows 95/98
• massima ampiezza delle partizioni per diverse ampiezze dei blocchi • FAT32 utilizza in realtà 28 bit e permette una minore frammentazione• Si ha una File Allocation Table mantenuta in memoria (solo in parte per FAT32).
![Page 4: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/4.jpg)
Il File System di Windows 98 (FAT32)
La rappresentazione estesa di una directory MS-DOS utilizzata in Windows 98
Bytes
![Page 5: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/5.jpg)
Il File System di Windows 98 (2)
La rappresentazione di (parte di) un nome di file “lungo” in Windows 98
Bytes
Checksum
![Page 6: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/6.jpg)
NTFS (Windows NT/2000)
•Indirizzi a 64 bit
•Nomi dei file in codifica Unicode
• Case-sensitive
•Stream multipli e attibuti associati ad un file
•I blocchi vanno da 512 bytes a 64K (standard 4 Kb)
•Supporta compressione e crittografia dei file
![Page 7: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/7.jpg)
Struttura del File System NTFS
La master file table di NTFS (1024 record da 1K)
![Page 8: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/8.jpg)
Struttura del File System NTFS
Gli attributi usati nei record MFT
partizioni
![Page 9: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/9.jpg)
Struttura del File System NTFS
Un record MFT per un file di 3 run e 9 blocchi
![Page 10: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/10.jpg)
Struttura del File System NTFS
Un file che richiede 3 MFT record per memorizzare i suoi run
![Page 11: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/11.jpg)
File System API in Windows 2000
• Principali chiamate della Win32 API relative ai file con il loro equivalente Unix più vicino
![Page 12: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/12.jpg)
Creazione di un File
CreateFile ( nome, // nome del file accesso , // modo accesso (lettura, scrittura o entrambi)condivisione, // condivisione del file (0 nessuna condivisione)security, // attributi di sicurezzacreazione, // creare il file o no se non esisteAttributi, // attributi vari (compressione, nascosto, ecc..)oldFile // handle di un file da cui copiare gli attributi (NULL
indica nessun file));
![Page 13: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/13.jpg)
System Call per la gestione dei file accesso: GENERIC_READ GENERIC_WRITE
condivis.: FILE_SHARE_READ FILE_SHARE_WRITE 0
creazione: CREATE_NEW CREATE_ALWAYS OPEN_EXISTING OPEN_ALWAYS
INVALID_HANDLE_VALUE indica fallimento nella create
Esempio:
Handle hfile;
hfile = CreateFile (“pippo”, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
If (hfile==INVALID_HANDLE_VALUE)
printf (“errore nella creazione file \n”);
![Page 14: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/14.jpg)
System Call per la gestione dei file S= WriteFile (handle, buffer, lung, &bytescritti,NULL);
S= ReadFile (handle, buffer, lung, &byteletti,NULL);
S vale 1 in caso di successo
Esempio:
{HANDLE hfile; DWORD bytescritti; int s;
char buffer[]=“buonasera”;
hfile = CreateFile (“pippo”, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
s = WriteFile (hfile, buffer, 9,&bytescritti,NULL);
CloseHandle (hfile);
}
![Page 15: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/15.jpg)
System Call per la gestione dei file pos=SetFilePointer (handle, offset, offsetAlto, puntoPartenza);
puntoPartenza:FILE_BEGIN inizio fileFILE_CURRENT posizione correnteFILE_END fine filepos = posizione dall’inizio del file.Esempio:hfile=CreateFile(“topo”,…);pos=SetFilePointer(hfile, 12, NULL,FILE_BEGIN);/* si sposta nella posizione 12 del file topo */
![Page 16: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/16.jpg)
System Call per la gestione dei file s=LockFile (handle, offset, offsetAlto, lung, lungAlto);
s=UnLockFile (handle, offset, offsetAlto, lung, lungAlto);
Lock non permette a nessun altro processo di accedere alla porzione di file a partire dalla posizione offset fino alla posizione offset+lung.
Unlock rilascia l’accesso.
![Page 17: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/17.jpg)
Scriviamo 5 interi su file e li leggiamoHANDLE hfile; DWORD bytescritti,byteletti; int s,i;int buffer[]={5,7,12,8,9};int bufferLett[5];
hfile = CreateFile ("pippo", GENERIC_WRITE|GENERIC_READ, 0, NULL, CREATE_ALWAYS, 0, NULL);
s = WriteFile (hfile, buffer, 5*sizeof(int),&bytescritti,NULL);
SetFilePointer(hfile,0,NULL,FILE_BEGIN);s = ReadFile (hfile, bufferLett, 5*sizeof(int),&byteletti,NULL);for (i=0;i<5;i++) printf ("%d\n",bufferLett[i]);CloseHandle (hfile);
![Page 18: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/18.jpg)
Driver dei dispositivi di I/O
Un driver deve essere conforme al Windows Driver Model, cioè deve, fra l’altro:
•Gestire le richieste di I/O standard (I/O Request Packet)
•Essere basato su oggetti
•Essere rientrante nel caso di sistemi multiprocessore
•Essere compatibile fra Windows 98 e 2000
![Page 19: Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi](https://reader036.vdocument.in/reader036/viewer/2022070312/5542eb59497959361e8c471f/html5/thumbnails/19.jpg)
Gestione dell’I/O (es. di utilizzo di porta seriale)
#include <windows.h>
#include <stdio.h>
#include <conio.h>
int main() {
HANDLE handle;
char buffer[40] = “……………..";
DWORD bytescritti;
handle = CreateFile("COM1", GENERIC_READ, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
SetCommState(….); // setta alcuni parametri della porta
SetCommTimeouts (…); / setta i timeout della porta
WriteFile(handle, buffer, 40, &bytescritti, 0);
CloseHandle (handle); }// fine main