Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 47 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
47
Dung lượng
1 MB
Nội dung
ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO ĐỒ ÁN NGUYÊN LÝ HỆ ĐIỀU HÀNH Đề tài 5: Xây dựng chương trình đọc thông tin đĩa cứng với định dạng NTFS FAT32 Giảng viên hướng dẫn: Nhóm: Sinh viên thực hiện: Lớp: Trần Hồ Thủy Tiên 05A Trịnh Duy Nhân Lê Sữa 08T1 Đà Nẵng, 12/2011 Mục lục GVHD: Trần Hồ Thủy Tiên MỤC LỤC DANH MỤC HÌNH ẢNH TỔNG QUAN VỀ ĐỀ TÀI .3 Chương CƠ SỞ LÝ THUYẾT .5 1.1 Tìm hiểu cấu tạo phần cứng cấu trúc logic Đĩa cứng 1.1.1 Cấu tạo vật lý Đĩa cứng 1.1.2 Cấu trúc logic Đĩa cứng (hệ thống FAT32) 10 1.1.3 Cấu trúc logic Đĩa cứng (hệ thống NTFS) 12 1.2 Tìm hiểu hệ thống File hệ điều hành Windows 13 1.2.1 Khái niệm 13 1.2.2 Thuộc tính file .14 1.2.3 Thao tác tập tin 15 1.2.4 Các kiểu tập tin 16 1.2.5 Cấu trúc tập tin 16 1.2.6 Hệ thống file Windows: 16 1.3 Hệ thống FAT32 18 1.3.1 Giới thiệu 18 1.3.2 Cấu trúc FAT32 18 1.3.3 Master Boot Record (MBR) 20 1.4 Hệ thống NTFS 21 1.4.1 Giới thiệu 21 1.4.2 Cấu trúc phân vùng NTFS 22 1.5 So sánh hệ thống FAT32 NTFS .25 Chương THIẾT KẾ VÀ XÂY DỰNG CHƯƠNG TRÌNH 28 2.1 Phân tích yêu cầu 28 2.2 Phân tích chức 28 2.3 Xây dựng chức .29 2.3.1 Hàm ReadHardisksInfo() 30 2.3.2 Hàm ReadLogicalPartitionsInfo() .31 2.3.3 Hàm getString() 32 2.3.4 ListAllLogicalPartitions() 32 2.3.5 ListAllHardisks() .32 Chương TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 33 3.1 Môi trường triển khai lựa chọn ngôn ngữ 33 3.2 Kết chức chương trình 33 3.2.1 Giải thích chức chương trình .33 3.2.2 Demo giao diện chương trình 34 3.2.3 Kết chương trình 35 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 36 TÀI LIỆU THAM KHẢO 38 PHỤ LỤC 39 Báo cáo đồ án Nguyên lý hệ điều hành Trang Danh mục hình ảnh GVHD: Trần Hồ Thủy Tiên DANH MỤC HÌNH ẢNH Hình 1: Cấu trúc ổ đĩa cứng Hình 2: Cấu tạo đĩa từ .6 Hình 3: Cấu trúc đĩa từ .7 Hình 4: Trục quay Hình 5: Đầu đọc (head) .8 Hình 6: Cấu trúc logic Đĩa cứng .10 Hình 7: Master Boot Record 11 Hình 8: Cấu trúc MBR 11 Hình 9: Cấu trúc Partition table 12 Hình 10: Cấu trúc NTFS 13 Hình 11: Master File Table (MFT) 13 Hình 12: Cấu trúc FAT32 18 Hình 13: Nội dung boot sector 19 Hình 14: Master Boot Record 20 Hình 15: Cấu trúc NTFS 22 Hình 16: Cấu trúc MFT 23 Hình 17: Thơng tin chung đồ án 34 Hình 18: Thơng tin phân vùng 34 Hình 19: Thơng tin ổ cứng 35 Báo cáo đồ án Nguyên lý hệ điều hành Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên TỔNG QUAN VỀ ĐỀ TÀI Bối cảnh lý thực đề tài Đồ án môn học Khoa Cơng nghệ thơng tin nói chung môn học Nguyên lý hệ điều hành Máy tính điện tử nói riêng nhằm tạo điều kiện giúp cho sinh viên: Đi sâu nắm vững cách có hệ thống kiến thức thu nhận trình học lý thuyết, làm tập thực hành Từng bước làm quen với cơng tác khoa học có định hướng giáo viên hướng dẫn hình thành hành vi nghiên cứu độc lập có trợ giúp tài liệu tham khảo Gắn q trình học lý thuyết với cơng tác nghiên cứu thực tế Trình bày rõ ràng khoa học vấn đề thuộc lĩnh vực nghiên cứu Chính lẽ mà người làm đồ án mơn học phải thực hiện, hồn thành với kết chấp nhận khối lượng công việc thuộc lĩnh vực chuyên sâu Kết công việc phản ánh cơng sức, tài năng, trí tuệ người làm đồ án phải trình bày văn đồ án môn học theo chuẩn mực yêu cầu giáo viên hướng dẫn Thời gian cần thiết cho đồ án khác nhau, thời hạn phải hoàn thành yêu cầu quan trọng đặc biệt Đồ án môn học phản ánh công sức nghiên cứu nên cần phải trình bày trước mơn đánh giá điểm số Kết cấu đồ án a Tìm hiểu cấu tạo phần cứng cấu trúc logic Đĩa cứng b Tìm hiểu hệ thống File hệ điều hành Windows c Giới thiệu hệ thống FAT32, cấu trúc FAT32, partion Boot Sector, directory tbale d Giới thiệu hệ thống NTFS, cấu trúc phân vùng NTFS, Master File Table Báo cáo đồ án Nguyên lý hệ điều hành Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên e So sánh hệ thống FAT32 NTFS f Xây dựng chương trình thực chức năng: Đưa hình Ổ đĩa, tên ổ đĩa, số serial, trạng thái, định dạng, dung lượng, trống, số byte/sector, số sector/cluster Báo cáo đồ án Nguyên lý hệ điều hành Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên Chương CƠ SỞ LÝ THUYẾT 1.1 Tìm hiểu cấu tạo phần cứng cấu trúc logic Đĩa cứng 1.1.1 Cấu tạo vật lý Đĩa cứng Ổ đĩa cứng thiết bị lưu trữ đọc ghi liệu nhanh chóng tập hợp phân tử từ hóa đĩa quay Ổ đĩa cứng gồm thành phần, phận sau: Hình 1: Cấu trúc ổ đĩa cứng 1.1.1.1 Cụm đĩa Bao gồm toàn đĩa (gọi đĩa từ), trục quay động a Đĩa từ (platter) Đĩa thường cấu tạo nhôm thủy tinh, bề mặt phủ lớp vật liệu từ tính nơi chứa liệu Tùy theo hãng sản xuất mà đĩa sử dụng hai mặt Số lượng đĩa nhiều một, phụ thuộc vào dung lượng công nghệ hãng sản xuất khác Mỗi đĩa từ sử dụng hai mặt, đĩa cứng có nhiều đĩa từ, chúng gắn song song, quay đồng trục, tốc độ với hoạt động Báo cáo đồ án Nguyên lý hệ điều hành Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên Hình 2: Cấu tạo đĩa từ Track: mặt làm việc đĩa từ chia nhiều vòng trịn đồng tâm gọi track Track hiểu đơn giản giống rãnh ghi liệu đĩa nhựa (ghi nhạc trước đây) cách biệt rãnh ghi khơng có gờ phân biệt chúng vòng tròn đồng tâm không nối tiếp thành dạng xoắn trôn ốc đĩa nhựa Track ổ đĩa cứng không cố định từ sản xuất, chúng thay đổi vị trí định dạng cấp thấp ổ đĩa (low format) Thơng thường đĩa từ có từ 312 đến 2048 track Sector: Trên track chia thành phần nhỏ đoạn hướng tâm gọi sector Các sector phần nhỏ cuối chia để chứa liệu Theo chuẩn thơng thường sector chứa dung lượng 512 byte Mỗi track chia thành lượng sector định Tuy nhiên, track bên lớn track phía (gần trục) nên vào sâu track phía dung lượng mà sector chứa thấp Cylinder: Tập hợp track bán kính (cùng số hiệu trên) mặt đĩa khác gọi cylinder Nói xác hơn: đầu đọc/ghi làm việc track tập hợp tồn track bề mặt đĩa lại mà đầu đọc cịn lại làm việc gọi cylinder Trên ổ đĩa cứng có nhiều cylinder có nhiều track mặt đĩa từ Báo cáo đồ án Nguyên lý hệ điều hành Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên Hình 3: Cấu trúc đĩa từ b Trục quay Truyền chuyển động đĩa từ Trục quay trục để gắn đĩa từ lên nó, chúng nối trực tiếp với động quay đĩa cứng Trục quay có nhiệm vụ truyền chuyển động quay từ động đến đĩa từ Hình 4: Báo cáo đồ án Nguyên lý hệ điều hành Trục quay Trang Chương 1: Cơ sở lý thuyết GVHD: Trần Hồ Thủy Tiên Trục quay thường chế tạo vật liệu nhẹ (như hợp kim nhôm) chế tạo tuyệt đối xác để đảm bảo trọng tâm chúng không sai lệch - sai lệch nhỏ gây nên rung lắc toàn đĩa cứng làm việc tốc độ cao, dẫn đến q trình đọc/ghi khơng xác c Động Được gắn đồng trục với trục quay đĩa Chúng gọi động bước - động điện có nguyên lý ứng dụng khác biệt với đa số động điện thông thường Chúng làm việc nhờ chuyển mạch điện tử đưa tín hiệu điều khiển vào stato theo thứ tự tần số định Chúng thực chất động đồng dùng để biến đổi tín hiệu điều khiển dạng xung điện rời rạc thành chuyển động góc quay chuyển động rotour có khả cố định rotour vào vị trí cần thiết 1.1.1.2 Cụm đầu đọc a Đầu đọc (Head) Trên mặt đĩa từ ổ cứng có đầu đọc (head) riêng biệt, đầu đọc có vai trò đọc/ghi liệu lên bề mặt đĩa từ Đầu đọc đơn giản cấu tạo gồm lõi ferit (trước lõi sắt) cuộn dây (giống nam châm điện) Gần công nghệ giúp cho ổ đĩa cứng hoạt động với mật độ xít chặt như: chuyển hạt từ xếp theo phương vng góc với bề mặt đĩa nên đầu đọc thiết kế nhỏ gọn phát triển theo ứng dụng cơng nghệ Hình 5: Báo cáo đồ án Nguyên lý hệ điều hành Đầu đọc (head) Trang Chương 2: Thiết kế xây dựng chương trình GVHD: Trần Hồ Thủy Tiên 2.3.1 Hàm ReadHardisksInfo() Hàm thực chức đọc thông tin HardDisk Với thông tin ổ cứng đọc tiến hành thêm vào danh sách ổ cứng Ta sử dụng API WIN để hỗ trợ hàm Bao gồm: -Hàm CreateFile(): tạo mở file hay thiết bị IO HANDLE WINAPI CreateFile( in LPCTSTR lpFileName, in DWORD dwDesiredAccess, in DWORD dwShareMode, in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, in DWORD dwCreationDisposition, in DWORD dwFlagsAndAttributes, in_opt HANDLE hTemplateFile ); -Hàm DeviceIoControl(): Gửi mã thiết bị tương ứng để xác định thao tác thực tương ứng với thiết bị BOOL WINAPI DeviceIoControl( in HANDLE hDevice, in DWORD dwIoControlCode, in_opt LPVOID lpInBuffer, in DWORD nInBufferSize, out_opt LPVOID lpOutBuffer, in DWORD nOutBufferSize, out_opt LPDWORD lpBytesReturned, inout_opt LPOVERLAPPED lpOverlapped ); -Struct STORAGE_PROPERTY_QUERY: Truy vấn thông tin lưu trữ typedef struct _STORAGE_PROPERTY_QUERY { STORAGE_PROPERTY_ID PropertyId; STORAGE_QUERY_TYPE QueryType; BYTE AdditionalParameters[1]; } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY; -Struct STORAGE_DEVICE_DESCRIPTOR: Truy vấn thông tin mô tả thiết bị typedef struct _STORAGE_DEVICE_DESCRIPTOR { DWORD Version; DWORD Size; BYTE DeviceType; BYTE DeviceTypeModifier; BOOLEAN RemovableMedia; BOOLEAN CommandQueueing; DWORD VendorIdOffset; DWORD ProductIdOffset; DWORD ProductRevisionOffset; DWORD SerialNumberOffset; STORAGE_BUS_TYPE BusType; DWORD RawPropertiesLength; BYTE RawDeviceProperties[1]; } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR; Báo cáo đồ án Nguyên lý hệ điều hành Trang 31 Chương 2: Thiết kế xây dựng chương trình GVHD: Trần Hồ Thủy Tiên -Struct DISK_GEOMETRY_EX: Mơ tả mặt hình học cho thiết bị typedef struct _DISK_GEOMETRY_EX { DISK_GEOMETRY Geometry; LARGE_INTEGER DiskSize; BYTE Data[1]; } DISK_GEOMETRY_EX, *PDISK_GEOMETRY_EX; 2.3.2 Hàm ReadLogicalPartitionsInfo() Hàm thực chức đọc thông tin Logical Partition Với thông tin phân vùng đọc tiến hành thêm vào danh sách phân vùng Ta sử dụng API WIN để hỗ trợ hàm Bao gồm: -Hàm GetLogicalDriveStrings(): Trả buffer cho chuỗi giá trị drive hợp lệ hệ thống DWORD WINAPI GetLogicalDriveStrings( in DWORD nBufferLength, out LPTSTR lpBuffer ); -Hàm GetDriveType(): Lấy thơng tin kiểu thiết bị tháo được, cố định, CD-ROM, RAM disk,… UINT WINAPI GetDriveType( in_opt LPCTSTR lpRootPathName ); -Hàm GetDiskFreeSpace(): Trả thông tin xác định Disk, bao gồm dung lượng trống, tổng dụng lượng, số Sectors,… BOOL WINAPI GetDiskFreeSpace( in LPCTSTR lpRootPathName, out LPDWORD lpSectorsPerCluster, out LPDWORD lpBytesPerSector, out LPDWORD lpNumberOfFreeClusters, out LPDWORD lpTotalNumberOfClusters ); -Hàm GetVolumeInformation(): Truy vấn thông tin file hệ thống thông tin liên quan đến thư mục root Để xác định xử lý thông tin ta dùng hàm GetVolumeInformationByHandleW() BOOL WINAPI GetVolumeInformation( in_opt LPCTSTR lpRootPathName, out LPTSTR lpVolumeNameBuffer, in DWORD nVolumeNameSize, out_opt LPDWORD lpVolumeSerialNumber, out_opt LPDWORD lpMaximumComponentLength, out_opt LPDWORD lpFileSystemFlags, out LPTSTR lpFileSystemNameBuffer, in DWORD nFileSystemNameSize ); Báo cáo đồ án Nguyên lý hệ điều hành Trang 32 Chương 2: Thiết kế xây dựng chương trình GVHD: Trần Hồ Thủy Tiên 2.3.3 Hàm getString() Hàm thực chức phân tích thơng tin lấy buffer thành thông tin cần thiết tên nhà sản xuất, mã sản phẩm, số hiệu 2.3.4 ListAllLogicalPartitions() Hiểm thị tất phân vùng thông tin tất phân vùng hình console 2.3.5 ListAllHardisks() Hiểm thị tất ổ cứng thông tin tất ổ cứng hình console Báo cáo đồ án Nguyên lý hệ điều hành Trang 33 Chương 3: Triển khai đánh giá kết GVHD: Trần Hồ Thủy Tiên Chương TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 3.1 Môi trường triển khai lựa chọn ngôn ngữ Sử dụng môi trường Visual C++ 2010 Express để triển khai xây dựng chương trình Nó phần dịng sản phẩm Visual Studio 2010 Express với chức cung cấp công cụ cho người sử dụng Windows để tạo ứng dụng tùy chỉnh thiết lập nâng cao Ngôn ngữ lựa chọn: Visual C++ Visual C++ ngơn ngữ lập trình mạnh mẽ thiết kế để hỗ trợ kiểm soát chi tiết xây dựng ứng dụng Windows (COM+) ứng dụng Windows quản lý NET Framwork Hỗ trợ mạnh cho lập trình, cung cấp đầy đủ thư viện cho lập trình ứng dụng Windows, trình debug dễ dàng trực quan,… 3.2 Kết chức chương trình 3.2.1 Giải thích chức chương trình Chương trình chia làm mục chính: Mục Thơng tin chung: Giới thiệu thông tin chung đồ án, đề tài, sinh viên thực đề tài giáo viên hướng dẫn đề tài Mục thông tin phân vùng: Hiển thị danh sách phân vùng có máy tính, người dùng chọn phân vùng cần xem thông tin hiển thị Mục thông tin ổ cứng: Hiển thị danh sách ổ cứng thời, người sử dụng chọn ổ cứng cần xem thông tin hiển thị bên để dễ dàng xem Báo cáo đồ án Nguyên lý hệ điều hành Trang 34 Chương 3: Triển khai đánh giá kết GVHD: Trần Hồ Thủy Tiên 3.2.2 Demo giao diện chương trình Hình 17: Hình 18: Báo cáo đồ án Nguyên lý hệ điều hành Thông tin chung đồ án Thông tin phân vùng Trang 35 Chương 3: Triển khai đánh giá kết Hình 19: GVHD: Trần Hồ Thủy Tiên Thông tin ổ cứng 3.2.3 Kết chương trình Chương trình cho phép xem số thông tin ổ cứng, phân vùng logic định dang theo NTFS FAT32 máy tính Kết chương trình thể qua giao diện demo (các hình ảnh phần trên) Báo cáo đồ án Nguyên lý hệ điều hành Trang 36 Kết luận hướng phát triển GVHD: Trần Hồ Thủy Tiên KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Những kết đạt Đồ án tìm hiểu hệ thống quản lý tệp hệ điều hành MS Windows, chức cách thức hoạt động quản lý hệ thống tệp, cấu trúc đĩa cứng định dạng NTFS, FAT32… hệ điều hành MS Windows Đồng thời, đồ án xây dựng thành cơng chương trình demo đọc hiển thị thơng tin ổ đĩa, phân vùng, cho phép người sử dụng biết thông tin chi tiết nhãn đĩa, số hiệu, nhà sản xuất, dung lượng trống, dung lượng sử dụng… hiển thị cách trực quan giao diện người dùng thân thiện Bên cạnh mặc đạt trên, trình làm đồ án chúng em học thêm nhiều kiến thức bổ ích, kinh nghiệm quý giá lý thuyết hệ thống tệp, cấu trúc ổ đĩa…, ngôn ngữ để thực mà cụ thể ngơn ngữ lập trình Visual C++ với hỗ trợ mạnh vẽ môi trường phát triển Visual Studio 2010 Những vấn đề tồn Bên cạnh số vấn đề mà chúng em đạt được, cịn tồn số vấn đề mà chúng em gặp khó khăn chưa giải tiêu biểu như: - Phần giao diện đơn giản, chưa xây dựng phần đồ thị để biểu diễn trực quan thông tin chi tiết ổ đĩa phân vùng - Chưa phân biệt phân phân vùng cho ổ đĩa khác nhau,và ổ đĩa thị danh sách thơng tin phân vùng, chưa cho thấy điểm bắt đầu kết thúc phân vùng ổ đĩa … Và số vấn đề tồn khác trình xây dựng, tìm hiểu trình bày báo cáo, xây dựng chương trình mà chúng em chưa thể hoàn chỉnh Báo cáo đồ án Nguyên lý hệ điều hành Trang 37 Kết luận hướng phát triển GVHD: Trần Hồ Thủy Tiên Hướng phát triển Về phần tìm hiểu sở lý thuyết, chúng em tiếp tục tìm hiểu nghiên cứu sâu đề tài để phục vụ tốt cho môn học sau Về phần chương trình, tiếp tục xây dựng, khắc phục hoàn thiện số vấn đề bất cập, bổ sung thên số tính như: dùng đồ thị để biểu diễn trực quan cho thông tin chi tiết ổ cứng phân vùng dung lượng trống, dung lượng sử dụng, tổng dung lượng… Và có thời gian chúng em hồn chỉnh thêm số chức năng, thơng tin cần thiết như: điểm bắt đầu kết thúc phân vùng, số lượng phân vùng ổ đĩa, phân vùng thuộc ổ đĩa nào… Cuối chúng em xin chân thành cám ơn hướng dẫn chu đáo, nhiệt tình Trần Hồ Thủy Tiên hướng dẫn nhiệt tình giúp đỡ cho chúng em trình làm đồ án để chúng em hoàn thành đồ án cách tốt Báo cáo đồ án Nguyên lý hệ điều hành Trang 38 Tài liệu tham khảo GVHD: Trần Hồ Thủy Tiên TÀI LIỆU THAM KHẢO Giáo trình Cấu Trúc Máy Tính Principles Of Computer Architecture - Class test edition-Augst 1999 Giáo trình Nguyên lý hệ điều hành - Đặng Vũ Tùng Trần Hồ Thủy Tiên, Bài giảng Nguyên lý hệ điều hành, khoa CNTT, trường Đại học Bách khoa, Đại học Đà Nẵng http://www.ntfs.com http://vi.wikipedia.org/wiki/Microsoft_Windows http://vi.wikipedia.org/wiki/NTFS Báo cáo đồ án Nguyên lý hệ điều hành Trang 39 Phụ lục GVHD: Trần Hồ Thủy Tiên PHỤ LỤC Lớp DiskInfo xây dựng để lấy thông tin ổ cứng cấu trúc liệu sử dụng: //DiskInfo.h #ifndef Disk_Info_h_ #define Disk_Info_h_ #include #include using std::vector; using std::string; struct LogicalPartitionInfo { string rootPathName, volumeName, fileSystemName; unsigned long sectorsPerCluster, numberOfFreeClusters, totalNumberOfClusters; unsigned long volumeSerialNumber; long long size; int type; }; struct HardiskInfo { string vendorId, productId, serialNumber; unsigned long bytePerSector, sectorsPerTrack, tracksPerCylinder; long long diskSize, cylinders; int driverType; }; typedef vector ListLogicalPartitionInfo; typedef vector ListHardiskInfo; class DiskInfo { private: ListLogicalPartitionInfo listLogicalPartitionInfo; ListHardiskInfo listHardiskInfo; char* getString (const char * str, int pos, char * buf); void DestroyListLogicalPartitions(); void DestroyListHardisks(); public: int ReadHardisksInfo(); int ReadLogicalPartitionsInfo(); void DestroyAll(); ListHardiskInfo getHDisks(); ListLogicalPartitionInfo getPartitions(); DiskInfo(); virtual ~DiskInfo(); }; #endif Báo cáo đồ án Nguyên lý hệ điều hành Trang 40 Phụ lục GVHD: Trần Hồ Thủy Tiên //DiskInfo.cpp #include "stdafx.h" #include #include #include "DiskInfo.h" using namespace std; #define MAX_IDE_DRIVES 16 #define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS) DiskInfo diskInfo; DiskInfo::DiskInfo(void) { this->ReadLogicalPartitionsInfo(); this->ReadHardisksInfo(); } int DiskInfo::ReadHardisksInfo () { this->DestroyListHardisks(); int drive = 0; HardiskInfo *hardiskInfo; for (drive = 0; drive < MAX_IDE_DRIVES; drive++) { HANDLE hPhysicalDrive = 0; char driveName [256]; sprintf_s(driveName, "\\\\.\\PhysicalDrive%d", drive); //Google xem CreateFile WCHAR name[256]; MultiByteToWideChar( 0,0, driveName, 255, name, 256); hPhysicalDrive = CreateFile ((LPCWSTR)name, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hPhysicalDrive != INVALID_HANDLE_VALUE) { ////google xem struct STORAGE_PROPERTY_QUERY STORAGE_PROPERTY_QUERY query; DWORD cbBytesReturned = 0; char buffer[10000]; memset ((void *) &query, 0, sizeof(query)); query.PropertyId = StorageDeviceProperty; query.QueryType = PropertyStandardQuery; memset (buffer, 0, sizeof (buffer)); //Google xem DeviceIoControl if ( DeviceIoControl (hPhysicalDrive, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), &buffer, sizeof(buffer), &cbBytesReturned, NULL) ) { //google xem struct STORAGE_DEVICE_DESCRIPTOR STORAGE_DEVICE_DESCRIPTOR * descrip = (STORAGE_DEVICE_DESCRIPTOR *) & buffer; char serialNumber[1000]; char modelNumber[1000]; char vendorId[1000]; //Lay cac thong tin mo ta cua o cung getString (buffer, descrip -> VendorIdOffset, vendorId ); Báo cáo đồ án Nguyên lý hệ điều hành Trang 41 Phụ lục GVHD: Trần Hồ Thủy Tiên getString (buffer, descrip -> ProductIdOffset, modelNumber ); getString (buffer, descrip -> SerialNumberOffset, serialNumber ); //Them mot doi tuong o cung vao danh sach voi cac thong tin mo ta hardiskInfo = new HardiskInfo; hardiskInfo->vendorId = string(vendorId); hardiskInfo->productId = string(modelNumber); hardiskInfo->serialNumber = string(serialNumber); hardiskInfo->bytePerSector = 0; hardiskInfo->cylinders = 0; hardiskInfo->diskSize = 0; hardiskInfo->tracksPerCylinder = 0; hardiskInfo->sectorsPerTrack = 0; hardiskInfo->driverType = -1; listHardiskInfo.push_back(hardiskInfo); // Lay thong tin chi tiet cua o cung memset (buffer, 0, sizeof(buffer)); if ( DeviceIoControl (hPhysicalDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, &buffer, sizeof(buffer), &cbBytesReturned, NULL)) { //google xem struct DISK_GEOMETRY_EX DISK_GEOMETRY_EX* geom = (DISK_GEOMETRY_EX*) &buffer; int fixed = (geom->Geometry.MediaType == FixedMedia); int64 size = geom->DiskSize.QuadPart; //Cap nhap thong tin chi tiet hardiskInfo->bytePerSector = geom>Geometry.BytesPerSector; hardiskInfo->diskSize = geom->DiskSize.QuadPart; hardiskInfo->tracksPerCylinder = geom>Geometry.TracksPerCylinder; hardiskInfo->sectorsPerTrack = geom>Geometry.SectorsPerTrack; hardiskInfo->driverType = geom->Geometry.MediaType; hardiskInfo->cylinders = geom>Geometry.Cylinders.QuadPart; } } CloseHandle (hPhysicalDrive); } } return drive; } int DiskInfo::ReadLogicalPartitionsInfo() { this->DestroyListLogicalPartitions(); const int lenght = 255; char buffer[lenght + 1]; WCHAR names[256]; //Lay danh sach cac o dia logical ::GetLogicalDriveStrings(lenght, names); //Convert WCHAR* to char* for (int i = 0; i < 256; i++){ Báo cáo đồ án Nguyên lý hệ điều hành Trang 42 Phụ lục GVHD: Trần Hồ Thủy Tiên buffer[i] = names[i]; } char *s = buffer; //Khoi tao danh sach cac o dia logical while (*s) { LogicalPartitionInfo *volumeInfo = new LogicalPartitionInfo; volumeInfo->rootPathName = s; listLogicalPartitionInfo.push_back(volumeInfo); s += strlen(s) + 1; } //Lay thong tin chi tiet cua moi o dia logical WCHAR VolumeNameBuffer[256], FileSystemBuffer[256]; for (unsigned int i = 0; i < listLogicalPartitionInfo.size(); i++) { memset( VolumeNameBuffer, 0, 256*sizeof(WCHAR)); memset( FileSystemBuffer, 0, 256*sizeof(WCHAR)); unsigned long bytesPerSector = 0; unsigned long sectorsPerCluster = 0; unsigned long numberOfFreeClusters = 0; unsigned long totalNumberOfClusters = 0; unsigned long volumeSerialNumber = 0; unsigned long maximumComponentLength = 0; unsigned long fileSystemFlags = 0; int driverType; WCHAR rootPath[5]; MultiByteToWideChar( 0,0, listLogicalPartitionInfo[i]>rootPathName.data(), 5, rootPath, 5); driverType =::GetDriveType((LPCWSTR)rootPath); //Google xem GetDiskFreeSpace ::GetDiskFreeSpace( (LPCWSTR)rootPath, §orsPerCluster, &bytesPerSector, &numberOfFreeClusters, &totalNumberOfClusters ); //Google xem VolumeInfomation ::GetVolumeInformation( (LPCWSTR)rootPath, (LPWSTR)VolumeNameBuffer, 256, &volumeSerialNumber, &maximumComponentLength, &fileSystemFlags, (LPWSTR)FileSystemBuffer, 256 ); //Convert WCHAR * to char * char volumName[256], fileSystem[256]; for(int i = 0; i < 256; i++){ volumName[i] = VolumeNameBuffer[i]; fileSystem[i] = FileSystemBuffer[i]; } listLogicalPartitionInfo[i]->type = driverType; listLogicalPartitionInfo[i]->numberOfFreeClusters = numberOfFreeClusters; listLogicalPartitionInfo[i]->sectorsPerCluster = sectorsPerCluster; listLogicalPartitionInfo[i]->totalNumberOfClusters = totalNumberOfClusters; listLogicalPartitionInfo[i]->volumeSerialNumber = volumeSerialNumber; listLogicalPartitionInfo[i]->volumeName = string(volumName); listLogicalPartitionInfo[i]->fileSystemName = string(fileSystem); Báo cáo đồ án Nguyên lý hệ điều hành Trang 43 Phụ lục GVHD: Trần Hồ Thủy Tiên listLogicalPartitionInfo[i]->size = bytesPerSector * sectorsPerCluster * (long long) totalNumberOfClusters; } return this->listLogicalPartitionInfo.size(); } char * DiskInfo::getString (const char * str, int pos, char * buf) { buf [0] = 0; if (pos 1) while (isspace(buf[strlen(buf) - 1])) { buf[strlen(buf) - 1] = 0; } return buf; } void DiskInfo::DestroyListLogicalPartitions() { while (!listLogicalPartitionInfo.empty()) { delete listLogicalPartitionInfo.back(); listLogicalPartitionInfo.pop_back(); } } Báo cáo đồ án Nguyên lý hệ điều hành Trang 44 Phụ lục GVHD: Trần Hồ Thủy Tiên void DiskInfo::DestroyListHardisks() { while (!listHardiskInfo.empty()) { delete listHardiskInfo.back(); listHardiskInfo.pop_back(); } } void DiskInfo::DestroyAll() { this->DestroyListHardisks(); this->DestroyListLogicalPartitions(); } DiskInfo::~DiskInfo() { this->DestroyAll(); } ListHardiskInfo DiskInfo::getHDisks() { return this->listHardiskInfo; } ListLogicalPartitionInfo DiskInfo::getPartitions() { return this->listLogicalPartitionInfo; } Báo cáo đồ án Nguyên lý hệ điều hành Trang 45 ... điều hành Trang 28 Chương 2: Thiết kế xây dựng chương trình GVHD: Trần Hồ Thủy Tiên Chương THIẾT KẾ VÀ XÂY DỰNG CHƯƠNG TRÌNH 2.1 Phân tích u cầu Bài tốn đặt ra: Xây dựng chương trình thực chức năng:... trúc NTFS: Hình 15: Cấu trúc NTFS 1.4.2.1 Partition boot sector Bảng boot sector ổ đĩa NTFS mô tả ổ đĩa định dạng NTFS Khi bạn định dạng ổ đĩa NTFS, chương trình Format định 16 sector cho boot sector... tập tin tổng quát Thông tin tập tin định nghĩa người tạo Nhiều loại thơng tin khác lưu trữ tập tin - chương trình nguồn, chương trình đối tượng, chương trình thực thi, liệu số, văn bản, mẫu tin,