Hàm readBufferbuffer, offset, size = 1: đọc buffer được truyền vào tại vị trí offset, đọc từ offset đến offset + size, trả về giá trị làm mảng các giá trị bytes đọc được Hàm readNumBuff
Trang 1TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN –
ĐHQGHCM KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỒ ÁN: QUẢN LÝ HỆ TH ỐNG TẬP TIN
Giáo viên hướng dẫn: TS Lê Viết Long
Sinh viên thực hiện: 20120138 Lê Thành Nam
20120555 Nguyễn Xuân Quân
20120187 Nguyễn Viết Thái
20120146 Nguyễn Thị Châu Ngọc
TP.HCM, Ngày 10 tháng 4 năm 2023
Trang 21
M ỤC L C Ụ
I CÁC BƯỚC CHUẨN BỊ(tạo ổ đĩa ảo) 3
II Đọc FAT32 và NTFS 8
III Giao diên UI 11
IV Demo Chương trình 12
Trang 32
BẢNG PHÂN CÔNG NHIỆM VỤ
MSSV HỌ VÀ TÊN NHIỆM VỤ TIẾN ĐỘ HOÀN THÀNH
20120138 Lê Thành Nam • Đọc NTFS
• In nội dụng file
• Tổng hợp báo cáo
• Chương trình hiển thị trạng thái kích thước(nếu có), chỉ số sector lưu trữ trên đĩa cứng
100%
20120555 Nguyễn Xuân
Quân • Đọc FAT32• Làm giao diện
• Demo chương trình
• Chương trình hiển thị trạng thái kích thước(nếu có), chỉ số sector lưu trữ trên đĩa cứng
100%
20120146 Nguyễn Thị Châu
Ngọc • Đọc FAT32• Chương trình hiển thị
cây thư mục gồm tập tin/ thư mục
100%
20120187 Nguyễn Viết Thái • Đọc NTFS
• Làm giao diện 100%
Trang 43
I CÁC BƯỚC CHUẨN BỊ(tạ ổ đĩa ảo) o
Bước 1: click chuột phải vào this PC, chọn manage:
Bước 2: click phải vào Disk Management, chọn create VHD
Trang 54
expanding trước khi nhấn oke
Trang 65
hiện lên sau đó nhấn OK
Bước 5: Click phải vào vùng khoanh đỏ rồi chọn New simple volume
Trang 76
nhấn finish để hoàn tất tạo ổ đĩa
Trang 87 Bước 8: Xem kết quả
Trang 98
II Đọc FAT32 và NTFS
Giải thích hàm
Hàm hexToDec(hex: str): trả về giá trị int ở hệ cơ số 10, dùng để hỗ ợ tr xuất thông tin volume
Hàm readSectors(file, sectorStart, numberSector, bytesPersector = 512): đọc từ
sector thứ sectorStart đế sector sectorStart+ numberSector, trả về bytes đọc n được
Hàm readBuffer(buffer, offset, size = 1): đọc buffer được truyền vào tại vị trí offset,
đọc từ offset đến offset + size, trả về giá trị làm mảng các giá trị bytes đọc được
Hàm readNumBuffer(buffer, offset, size): Tham số truyền vào là mảng buffer được
đảo ngược thứ tự (buffer[: :-1]), khi truyền tham số offset ta sẽ thêm tiền tố 0x nếu file tổ ức theo hệ ch 16
Phần thực thi
Dựa vào lý thuyết được dạy và tham khảo, ta thức hiện đọc các thông tin Volume trong bootSector đối với FAT32 và trong partition bootSector đối với NTFS Đầu tiên, ta xác định ổ đĩa ở tổ ức FAT32 hay NTFS, đối với FAT32 thì ch thông tin nằ ở vị trí 52 gồm 8 offset, với NTFS thì nằ ở vị trí thứ 3 gồm 4 offsetm m bootSectorBuffer = readSectors(f, 0, 1)
FAT32 = readBuffer(bootSectorBuffer, 0x52, 8)
NTFS = readBuffer(bootSectorBuffer, 3, 4)
Đối với FAT32, ta đọc thông tin vùng boot sector:
Sau khi xác định được loại ổ đĩa, nếu là FAT32 ta sẽ tiến hành đọc ổ đĩa dựa trên các
vị trí các byte trên ổ đĩa Ta sẽ tiến hành đọc 11 loại thông tin của vùng boot sector gồm:
1 Loại ổ đĩa
2 Số bytes / sector
3 Số sector / cluster
4 Số sector dành riêng
Trang 109
5 Số lượng bảng FAT
6 Tổng số sector trên đĩa
7 Số sector / FAT
8 Số sector của RDET
9 Sector đầu tiên của FAT1
10 Sector đầu tiên RDET
11 Sector đầu tiên của vùng dữ liệu
Việc đọc tương ứng với đọc code sau:
Đối với NTFS:
giống với FAT32, tuy nhiên vị trí các thông tin Volume sẽ khác với FAT32 # Đọc partition boot sector
partition = readSectors(f, 0, 1)
# Số byte trên sector
Trang 1110
byteSector = readNumBuffer(partition, 0x0B, 2)
# Số sector của cluster
cluster = readNumBuffer(partition, 0x0D, 1)
# Số sector trước bảng FAT
sectorBeforeNTFS = readNumBuffer(partition, 0x0E, 2)
# Đọc tổng sector trong Volume
numSectorNTFS = readNumBuffer(partition, 0x28, 8)
# Vị trí bắt đầu của MFT
beginMFT = cluster * \
readNumBuffer(partition, 0x30, 8)
# In các thông số
values += '\nThông tin volume:\n'
values += '\nSố byte/sector::' + str(byteSector)
values += '\nSố sector của cluster (Sc):' + str(cluster)
values += '\nSố sector trước bảng NTFS (Sb):' + \
str(sectorBeforeNTFS)
values += '\nSố sector trong volume (nv):' + str(numSectorNTFS)
values += '\nVị trí bắt đầu của MFT:' + str(beginMFT)
textArea.insert(END, values)
Trang 1211
III Giao diên UI
Bước 1: Tạo khung chương trình bằng thư viện tkinter
Bước 2: Chia thành 2 frames:
Frame 1: Hiển thị thanh tiêu đề và thanh nhập
• Thanh tiêu đề: hiện thị tên chương trình “Chương trình đọc tập tin FAT /
NTFS”
• Thanh nhập: hiển thị dòng chữ mờ “Nhập thư mục FAT / NTFS” để
người dùng biết thanh nhập đó cần nhập gì Khi người dùng nhập vào thanh nhập thì dòng chữ mờ mất, trỏ chuột trỏ đến đầu thanh nhập Frame 2: Tạo các nút chức năng và phần hiện thị nội dung sau khi sử dụng các chức năng
• Nút “Run”: Lấy đường dẫn ổ đĩa rồi xác định xem ô đĩa nhập vào có định dạng FAT32 hay NTFS để thực hiện đọc thông tin phân vùng Nếu ổ đĩa có định dạng FAT32 thì đọc thông tin được mô tả trong Boot Sector, còn nếu ổ đĩa có định dạng NTFS thì đọc thông tin được mô tả trong
Trang 1312
Partition Boot Sector Có thể sử dụng “Enter” từ bàn phím thay cho nút
“Run”
• Nút “Folder Tree”: Chương trình hiển thị cây thư mục gốc gồm tên tập
tin / thư mục
• Nút “Print File”: Hiển thị thông tin là nội dung tập tin đối với tập tin có
phần mở rộng là txt, các loại tập tin khác hiển thị thông báo dùng phần mềm tương thích để đọc nội dung Trường hợp đối tượng là thư mục, chương trình cho phép hiển thị cây thư mục con
• Nút “Exit”: Xuất thông báo kết thúc chương trình, nếu bấm “Yes” thì đóng chương trình, nếu bấm “No” thì chương trình sẽ không đóng
• Phần hiển thị nội dung: Sau khi nhấn các nút chức năng thì chương trình
sẽ in nội dung của từng chức năng xuống phần này Phải có thanh cuộn trong phần này để đáp ứng cho phần nội dung có nhiều thông tin (Không
áp dụng đối với nút “Exit”)
IV Demo Chương trình
FAT32:
Ta tiến hành nhập ổ đĩa F (FAT32) và chọn nút “Run”, chương trình sẽ tiến hành đọc thông tin Boot Sector của ổ F hình bên dưới:
Trang 1413
Tiếp theo ta chọn nút “Folder Tree” để in ra cây thư mục của ổ đĩa F:
So sánh với cây thư của File Explorer:
Trang 1514
Để hiển thị nội dung và kích thước của các file text trong cây thư mục, ta tiến hành chọn nút “Print File”, chương trình sẽ hiển thị 1 cây thư mục và nội dung của các tập text nếu có:
NTFS:
Ta tiến hành nhập ổ đĩa I (NTFS) và chọn nút “Run”, chương trình sẽ tiến hành đọc thông tin Boot Sector của ổ F hình bên dưới:
Trang 1615
Tiếp theo ta chọn nút “Folder Tree” để in ra cây thư mục của ổ đĩa I:
So sánh với cây thư của File Explorer:
Trang 1716
Để hiển thị nội dung và kích thước của các file text trong cây thư mục, ta tiến hành chọn nút “Print File”, chương trình sẽ hiển thị 1 cây thư mục và nội dung của các tập text nếu có (các loại file khác thì hiển thì thông báo dùng phần mềm tương thích
để mở):
Nhấn “EXIT” để xuất thông báo kết thúc chương trình: