Xây dựng bộ các công cụ (driver) theo dõi hành vi trên windows 7

  • Số trang: 110 |
  • Loại file: PDF |
  • Lượt xem: 13 |
  • Lượt tải: 0
minhtuan

Đã đăng 15929 tài liệu

Mô tả:

TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN - TRUYỀN THÔNG ------- LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC ĐỀ TÀI: XÂY DỰNG BỘ CÁC CÔNG CỤ (DRIVER) THEO DÕI HÀNH VI TRÊN WINDOWS 7 PHẦN I: XÂY DỰNG PROCESS DRIVER, REGISTRY DRIVER, FILESYSTEM DRIVER Sinh viên thực hiện Châu Trương Hải My MSSV: 1101764 Giảng viên hướng dẫn: TS. LÊ VĂN LÂM Cần Thơ, 2014 LỜI CẢM ƠN Trước tiên, tôi xin được gửi lời cảm ơn chân thành đến TS.Lê Văn Lâm, thầy đã hướng dẫn và chỉ bảo tôi rất nhiệt tình cũng như khơi gợi cho tôi rất nhiều ý tưởng trong suốt quá trình thực hiện đề tài luận văn này. Tôi xin chân thành cám ơn các thầy, các cô Khoa Công nghệ thông tin & Truyền thông trường Đại học Cần Thơ đã cung cấp cho tôi những nền tảng kiến thức hữu ích và giá trị để tôi có thể hoàn thành được đề tài của mình. Tôi cũng xin gửi lời cảm ơn đến những người bạn của tôi. Các bạn đã giúp đỡ tôi rất nhiều trong việc tìm kiếm tài liệu, lời khuyên hữu ích và hướng dẫn tôi trong việc lập trình có hiệu quả. Cuối cùng, tôi xin cám ơn đến gia đình và người thân đã luôn tiếp thêm nguồn động và tinh thần cho tôi, giúp đỡ và chăm sóc tôi trong suôt quá trình học tập và thời gian thực hiện luận văn này. Cần Thơ, ngày 15 tháng 05 năm 2014 Sinh viên CHÂU TRƯƠNG HẢI MY SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM PHỤ LỤC BẢNG Bảng Bảng 2.2.1.1-1 Bảng 2.2.2.1-1 Bảng 2.3.4-1 Bảng 2.4.1.1-1 Bảng 2.4.1.2-1 Bảng 2.4.1.2- 2 Bảng 2.4.1.2-3 Bảng 2.4.3-1 Bảng 3.2-1 Nội Dung KMDF object type được sử dụng phổ biến Các thành phần của KMDF Một số IRP major function code Một số routine dùng cho Spin Lock Kernel dispatch objects Một số routine dùng cho event object Một số routine dùng cho timer object Một số routine liên quan đến bộ nhớ Phân công làm việc PHỤ LỤC HÌNH ẢNH Hình Hình 2.1.1-1 Hình 2.1.1-2 Hình 2.1.1-3 Hình 2.1.2-1 Hình 2.1.2-2 Hình 2.2.1-1 Hình 2.2.1.3-a.1 Hình 2.2.1.3-b.1 Hình 2.2.1.4-a.1 Hình 2.2.1.4-b.1 Hình 2.2.2.3-a.1 Hình 2.3.2-1 Hình 2.3.5-1 Hình 2.5.2-1 Hình 2.5.3-1 Hình 2.5.4-1 Hình 2.5.5-1 Hình 3.4.1.1-1 Hình 3.4.1.3-1 Hình 3.4.2.1-1 Hình 3.4.2.3-1 Nội Dung Mối quan hệ giữa Application, OS và Driver Yêu cầu được giải quyết qua nhiều driver Sofware driver Sơ đồ mô tả sự tương tác giữa user-mode và kernel-mode Các loại driver trong kernel-mode Windows Driver Foundation và Driver Life Cycle Các thủ tục tiêu chuẩn mà một driver phải có Mối quan hệ giữa device object và I/O manager Device stack trong kernel-mode Driver stack trong kernel-mode Luồng xử lý IRP Mối quan hệ song song gữa driver và I/O stack location Quá trình xử lý IRP tiêu chuẩn Cấu hình DDK OSR Loader DebugView Tuỳ chọn khi khởi động máy ảo Mô hình 5 trạng thái của tiến trình Kết quả hoạt động của Process driver trong Windows 7 Công cụ quản lý registry Kết quả hoạt động của Registry driver trong Windows 7 1 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM MỤC LỤC CHƯƠNG 1:TỔNG QUAN ............................................................................................. 4 1.1 BỐI CẢNH ......................................................................................................... 4 1.2 MỤC TIÊU – PHẠM VI ĐỀ TÀI ...................................................................... 4 1.2.1 Mục Tiêu ................................................................................................... 4 1.2.2 Phạm Vi Đề Tài........................................................................................ 5 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT ............................................................................... 6 2.1 TỔNG QUAN VỀ DRIVER ............................................................................. 6 2.1.1 Driver Là Gì? [1] ..................................................................................... 6 2.1.2 Các Loại Driver Trong Windows [2] .................................................. 7 2.2 TỔNG QUAN VỀ WINDOWS 7 KERNEL MODE DRIVER ...................... 9 2.2.1 Windows Driver Foundation (WDF)................................................... 9 2.2.2 Kernel Mode Driver Framework (KMDF) ........................................ 16 2.3 I/O REQUEST PACKET ............................................................................... 26 2.3.1 Cấu Trúc IRP ......................................................................................... 26 2.3.2 I/O Stack Location [7].......................................................................... 27 2.3.3 I/O Status Block [8] .............................................................................. 28 2.3.4 IRP Major Function Code [9] ............................................................. 28 2.3.5 Xử Lý IRP ............................................................................................... 30 2.4 KIẾN THỨC BỔ TRỢ KHÁC ....................................................................... 32 2.4.1 Đồng Bộ Hoá ......................................................................................... 32 2.4.2 IRQL ......................................................................................................... 34 2.4.3 Memory Pool ......................................................................................... 35 2.4.4 Input/oOutput Control (IOCTL) ......................................................... 36 2.5 CÔNG CỤ LẬP TRÌNH VÀ HỖ TRỢ.......................................................... 37 2.5.1 Visual Studio 2008 ............................................................................... 37 2.5.2 Visual DDK/WDK .................................................................................. 37 2.5.3 Install Driver .......................................................................................... 38 2.5.4 View Driver Output............................................................................... 39 2.5.5 WinDbg và VMWare ............................................................................. 40 CHƯƠNG 3: NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU.......................................... 43 3.1 CÁCH VIẾT MỘT DRIVER ĐƠN GIẢN ..................................................... 43 3.1.1 Tạo và Giải Thích Tập Tin Makefile ................................................. 43 3.1.2 Tạo và Giải Thích Tập Tin SOURCES ............................................. 43 3.1.3 Tạo và Giải Thích Tập Tin .c.............................................................. 44 3.2 YÊU CẦU ĐỀ TÀI .......................................................................................... 49 3.3 TÓM TẮT KẾT QUẢ HOẠT ĐỘNG TRONG WINDOWS XP & Ý TƯỞNG PHÁT TRIỂN TRONG WINDOWS 7 ...................................................... 49 3.4 XÂY DỰNG DRIVER ..................................................................................... 51 3.4.1 Process Driver ...................................................................................... 51 3.4.2 Registry Driver ...................................................................................... 60 3.4.3 FileSystem Driver ................................................................................. 71 CHƯƠNG 4: KẾT LUẬN - HƯỚNG PHÁT TRIỂN .................................................. 86 4.1 KẾT LUẬN ...................................................................................................... 86 4.2 HƯỚNG PHÁT TRIỂN .................................................................................. 86 TÀI LIỆU THAM KHẢO ................................................................................................ 87 2 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM PHỤ LỤC CÁC THỦ TỤC & CẤU TRÚC .................................................................. 88 PHỤ LỤC CÁC THỦ TỤC ........................................................................................ 88 1. IoCreateDevice.............................................................................................. 88 2. MmGetSystemRoutineAddress ................................................................ 89 3. ObDereferenceObject ................................................................................. 89 4. ObOpenObjectByPointer ........................................................................... 90 5. ObQueryNameString ................................................................................... 90 6. PsLookupProcessByProcessId ............................................................... 92 7. RegistryCallback routine ........................................................................... 92 8. RtlInitUnicodeString .................................................................................... 94 9. RtlUnicodeStringCat ................................................................................... 94 10. RtlUnicodeStringCatString .................................................................... 95 11. RtlUnicodeStringCopy ............................................................................ 95 12. ZwQueryInformationProcess ................................................................ 96 PHỤ LỤC CÁC CẤU TRÚC ..................................................................................... 98 1. DEVICE_OBJECT ......................................................................................... 98 2. FAST_IO_DISPATCH ................................................................................. 102 3. IRP .................................................................................................................. 104 4. IO_STACK_LOCATION ............................................................................. 107 5. IO_STATUS_BLOCK.................................................................................. 108 3 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM CHƯƠNG 1:TỔNG QUAN 1.1 BỐI CẢNH Khi người sử dụng dùng trình duyệt web để truy cập đến các trang web trên mạng Internet, trình duyệt web sẽ nối kết đến các máy phục vụ web (web server), yêu cầu tải nội dung mà người dùng yêu cầu và hiển thị nội dung yêu cầu. Tuy nhiên, nếu người dùng truy cập vào các trang web độc hại (malicious web pages), ngoài những thông tin mà người dùng yêu cầu, trình duyệt web có thể nhận được những mã lệnh độc hại, thực thi mã lệnh này trên máy tính người dùng. Quá trình này được gọi là drive-by-download. Kết quả của quá trình này có thể là máy tính của người sử dụng sẽ bị cài đặt một cách tự động các chương trình virus máy tính hoặc các chương trình gián điệp. Nguy hiểm hơn, máy tính người dùng có thể trở thành một nút trên một hệ thống phân tán tấn công từ chối dịch vụ (DDos) được điều khiển từ xa. Một trong các phương pháp để phát hiện và phân tích tấn công drive-by download là sử dụng High-interaction Client honeypot. Trong phương pháp này, người ta xây dựng một số hệ thống người dùng đầu cuối với hệ điều hành và các ứng dụng cụ thể trên đó. Ngoài ra, người ta xây dựng các chương trình theo dõi các thông số trong hệ thống trên các hệ thống đầu cuối này. Sau đó, các hệ thống người dùng đầu cuối sẽ được điều khiển để chạy ứng dựng duyệt web, nối kết đến các trang web cần kiểm tra tính nguy hiểm. Các thông số theo dõi trên hệ thống sẽ được phân tích và cho ra kết quả để đưa ra quyết định là các trang web đó có xảy ra tấn công drive-by-download hay không. Một trong các công cụ High-interaction client honeypot được sử dụng phổ biến nhất hiện nay là Capture-HPC của Đại học Victoria, Welllington, New Zealand. Tuy nhiên, ứng dụng này được xây dựng chạy trên nền tảng của Windows XP – Một hệ điều hành khá phổ biến trong thời gian trước đây. Nhưng hiện tại, Microsoft đã chính thức khai tử Windows XP và khuyên người dùng chuyển sang sử dụng các Hệ điều hành mới hơn. Mặc khác, xu hướng của người dùng hiện tại đang chuyển dần sang sử dụng Windows 7. Chính vì vậy, việc chuyển đổi ứng dụng Capture-HPC để có thể chạy trên Windows 7 là một yêu cầu cấp thiết phục vụ cho nghiên cứu tấn công drive-by download. Đề tài này sẽ thực hiện một trong các bước khá quan trọng trong quá trình chuyển đổi: Xây dựng các bộ công cụ (Driver) theo dõi hành vi chạy trên nền Windows 7. 1.2 MỤC TIÊU – PHẠM VI ĐỀ TÀI 1.2.1 Mục Tiêu Nắm được những kiến thức cơ bản về Driver: vai trò, các đặt điểm cơ bản và cách thức hoạt động của nó trong môi trường Windows nói chung và Windows 7 nói riêng, giúp cho mọi người tiếp cận Driver một cách thuận tiện và dễ dàng hơn. 4 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM Bên cạnh đó, giới thiệu các nền tảng để xây dựng một Driver trong môi trường Windows 7 bao gồm mô hình phát triển trình điều khiển thế hệ tiếp theo của Microsoft là Windows Driver Foundation(WDF) và nền tảng phát triển trình điều khiển mạng Windows Filtering Platform (WFP), thay thế cho công nghệ Transport Driver Interface (TDI) chỉ có trên Windows XP và các phiên bản trước. Kết hợp những kiến thức đã trình bày ở trên và sự hỗ trợ của công cụ Windows Driver Kit (WDK) được tích hợp với Microsoft Visual Studio 2008 và bộ công cụ gỡ lỗi Debug Tool dành cho Windows. Biết được cách thức xây dựng một driver đơn giản chạy trên Windows 7 và từ đó áp dụng vào xây dựng các driver cho đề tài này. Mục tiêu quan trọng nhất của đề tài này là phải xây dựng được các bộ công cụ (Driver) theo dõi hành vi tấn công trên Process, Registry, File System và Network chạy trong môi trường Windows 7. Đề tài này là sự phát triển tiếp theo của dự án Capture-HPC thực hiện trên Windows XP của Đại học Victoria, Welllington, New Zealand. 1.2.2 Phạm Vi Đề Tài - Nghiên cứu về các nền tảng để xây dựng một Driver gồm có Windows Driver Foundation (WDF) và Windows Filtering Platform (WFP). - Nghiên cứu về Driver và cách tạo một Driver cơ bản. - Xây dựng các bộ công cụ theo dõi hành vi trên Windows 7 bao gồm các Driver sau: + Process Driver: theo dõi việc tạo(create) hoặc đóng(terminate) một tiến trình trên Windows 7. + Registry Driver: theo dõi các thao tác liên quan đến khoá và giá trị của khoá trong registry như: mở (open), tạo (create), xóa (delete), v.v. + File System Driver: theo dõi những thay đổi đến tập tin trong hệ thống tập tin như: đọc (read), ghi (write), truy vấn (query), v.v. + Network Driver: theo dõi các gói tin và các thông tin về nó như là địa chỉ IP (nguồn, đích), cổng (port), các giao thức mạng (protocol), và các ứng dụng, v.v. Đồng thời xác định được trạng thái (status) của gói tin đó (connect, receive hay transport). 5 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 TỔNG QUAN VỀ DRIVER 2.1.1 Driver Là Gì? [1] Hầu hết những định nghĩa về driver là “A driver is software that allows your computer to communicate with hardware or devices” – Driver là một phần mềm cho phép máy tính (hoặc OS) của bạn giao tiếp với phần cứng hoặc thiết bị. Ví dụ, một ứng dụng cần đọc một vài dữ liệu từ một thiết bị. Ứng dụng gọi một hàm được thực thi bởi hệ điều hành, và hệ điều hành gọi một hàm được thực thi bởi driver. Driver thì được viết bởi cùng công ty thiết kế và sản xuất thiết bị. Sau khi driver lấy dữ liệu từ thiết bị, nó trả dữ liệu về cho hệ điều hành, hệ điều hành trả dữ liệu về ứng dụng. Hình 2.1.1-1 Mối quan hệ giữa Application, OS và Driver Lưu ý: - Không phải tất cả driver đều được viết bởi cùng công ty thiết kế và sản xuất thiết bị. Trong một số trường hợp, thiết bị được thiết kế theo tiêu chuẩn chung nên driver có thể được viết bởi Microsoft. - Không phải tất cả driver đều giao tiếp trực tiếp với thiết bị. Yêu cầu xuất phát từ ứng dụng có thể được giải quyết qua nhiều driver trong một ngăn xếp thiết bị như hình bên dưới. Hình 2.1.1-2 Yêu cầu được giải quyết qua nhiều driver 6 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM - Driver trong ngăn xếp giao tiếp trực tiếp với thiết bị được gọi là Function Driver; Driver mà thực thi những xử lý phụ thì được gọi là Filter Driver. - Một vài Filetr Driver theo dõi và ghi chép lại thông tin về I/O request nhưng mà không tham gia tích cực trong việc xử lý. Ví dụ, những filter driver xác định thì hành động như là xác nhận để đảm bảo cho những driver khác trong ngăn xếp xử lý chính xác I/O request. - Tuy nhiên định nghĩa về driver như bên trên thì chưa đầy đủ vì một số driver thì không kết hợp với bất kỳ thiết bị phần cứng nào. Ví dụ, bạn cần truy cập vào cấu trúc dữ liệu của lõi OS và chỉ truy cập được khi chạy trong chế độ hạt nhân – kernel mode. Bạn có thể làm điều này bằng cách tách thành hai phần. Phần đầu tiên chạy trong chế độ người dùng và mô tả giao diện người dùng, phần này được gọi application - ứng dụng. Phần thứ hai chạy trong chế độ hạt nhân và truy cập đến cấu trúc dữ liệu của lõi OS, phần này được gọi là software driver và không kết hợp với bất cứ thiết bị phần cứng nào. Hình 2.1.1-3 Sofware driver 2.1.2 Các Loại Driver Trong Windows [2] Có hai loại driver Microsoft Windows cơ bản: - User-mode driver thực thi trong chế độ người dùng, giữ vai trò cung cấp một giao diện giữa một ứng dụng Win32 và kernel-mode driver hoặc các thành phần khác hệ điều hành. - Kernel-mode driver thực thi trong chế độ hạt nhân như một phần của điều hành, nó bao gồm những thành phần hệ điều hành chế độ hạt nhân mà điển hình là I/O manager, Plug and Play memory, processes và threads, security. Kernel-mode driver thường phân lớp. Nói chung, driver cấp cao hơn thường nhận được dữ liệu từ các ứng dụng, lọc dữ liệu, và gửi nó để một driver cấp thấp hơn có hỗ trợ chức năng thiết bị. 7 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM Windows Applications Windows Services Win32 API user-mode kernel-mode Windows I/O System I/O Manager Power Manager PnP Manager Hình 2.1.2-1 Sơ đồ mô tả sự tương tác giữa user-mode và kernel-mode Riêng đối với kernel-mode driver, có ba loại driver khác nhau thể hiện ba mức độ trong một driver stack: highest-level, intermediate-level và lowest-level. Và tầng bên trên bao giờ cũng nhận sự hỗ trợ từ những tầng thấp hơn nó. Hình 2.1.2-2 Các loại driver trong kernel-mode 8 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM Highest-level driver bao gồm những trình điều khiển hệ thống tập tin (File system drivers - FSDs) hỗ trợ hệ thống tập tin như là: NTFS, File allocation table (FAT), CD-ROM file system. Intermediate-level driver được chia nhỏ hơn và bao gồm: - Function driver điều khiển các thiết bị ngoại vi cụ thể trên một chuyến xe I/O. - Filter driver thêm nó trên hoặc dưới function driver. - Sofware bus driver trình bày một tập hợp các thiết bị con mà tầng cao hơn có thể gắn vào. Lowest-level driver điều khiển một I/O bus mà thiết bị ngoại vi được kết nối. 2.2 TỔNG QUAN VỀ WINDOWS 7 KERNEL MODE DRIVER 2.2.1 Windows Driver Foundation (WDF) Microdoft Windows Driver Foundation (WDF) là một mô hình phát triển trình điều khiển thế hệ tiếp theo của Microsoft. WDF bao gồm một bộ các thành phần hỗ trợ cho sự phát triển, triển khai, và duy trì cho cả hai trình điều khiển chế độ hạt nhân và người dùng. Hình 2.2.1-1 mô tả những thành phần của WDF làm việc với những công cụ phát triển trình điều khiển hiện có để xử lý chu kỳ sống trình điều khiển hoàn toàn: Hình 2.2.1-1 Windows Driver Foundation và Driver Life Cycle - Driver model hỗ trợ việc tạo trình điều khiển hướng đối tượng, hướng sự kiện. Bằng cách sử dụng WDF, người viết trình điều khiển có thể tập trung vào phần cứng thiết bị của họ, chứ không phải là hệ điều hành. Trình điều khiển WDF có thể được viết cho một trong hai chế độ hạt nhân hoặc chế độ người dùng . 9 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM - Framework và Windows Driver Kit (WDK). WDF định nghĩa một mô hình trình điều khiển đơn và bao gồm framework cho sự phát triển trình điều khiển cả hai chế độ hạt nhân và người dùng. Framework cung cấp cơ sở hạ tầng cơ bản để hỗ trợ các mô hình WDF. Họ thực hiện tính năng phổ biến, cung cấp mặc định thông minh và quản lý hầu hết các tương tác với hệ điều hành. Kernel Mode Driver Framework (KMDF) hỗ trợ những tính năng được yêu cầu bởi Windows và được phổ biến đến tất cả các trình điều khiển chế độ hạt nhân. User Mode Driver Framework (UMDF) cung cấp sự hỗ trợ chức năng tương tự như trong KMDF, nhưng trình điều khiển có khả năng cho một số loại thiết bị chạy trong chế độ người dùng thay vì trong chế độ hạt nhân. Tất cả các trình điều khiển WDF được xây dựng bằng cách sử dụng các WDK xây dựng môi trường . - Tracing and static analysic tools. Cả KMDF và UMDF đã được xây dựng sẵn mã xác minh và hỗ trợ tích hợp theo dõi thông qua Event Tracing cho Windows (ETW). Các dấu vết được tạo ra có thể giúp đỡ trong việc gỡ lỗi trình điều khiển trong quá trình phát triển và trong việc chẩn đoán các vấn đề trong những trình điều khiển tung ra thị trường. Trình điều khiển WDF cũng làm việc với người xác minh điều khiển hiện tại. Ngoài ra, công cụ xác minh trình điều khiển thời gian biên dịch, chẳng hạn như PREfast và Static Driver Verifier (SDV). - Driver Signing. Trình điều khiển WDF được ký kết trong cùng một cách như trình điều khiển WDM . - Driver insallation tools.Trình điều khiển WDF được cài đặt bằng cách sử dụng các tập tin INF và làm việc với các công cụ cài đặt trình điều khiển hiện có, bao gồm công cụ Driver install framewotk (DIFx). - Versioning. WDF hỗ trợ versioning để một nhị phân điều khiển duy nhất có thể chạy trên bất kỳ phiên bản của hệ điều hành và sử dụng cùng một phiên bản của khuôn khổ mà nó đã được xây dựng và thử nghiệm. 2.2.1.1 WDF Object Model Mô hình này định nghĩa một tập các object - đối tượng đại diện cho cấu trúc điều khiển thông thường, chẳng hạn như các thiết bị, hàng đợi, I/O requests, và trình điều khiển riêng của mình. Các đối tượng có các thuộc tính, phương pháp, và các sự kiện . - Properties - thuộc tính mô tả đặc điểm của đối tượng. Mỗi thuộc tính được kết hợp với những phương pháp mà get và set giá trị của thuộc tính. - Methods – phương pháp thực hiện hành động trên các đối tượng. Có giá trị trả về. - Events - sự kiện là những điều kiện mà một trình điều khiển cần để hành động. WDF xác định các sự kiện có thể cho từng đối tượng và xác định những hành động mặc định cho hầu hết chúng. Trình điều khiển bao gồm 10 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM mã để xử lý các sự kiện cho các hành động mặc định không phù hợp hoặc không đầy đủ cho các thiết bị của nó. Thông báo đến trình điều khiển về sự thay đối trạng thái. Khi sự kiện xảy ra, WDF gọi những callback. Trình điều khiển WDF tạo ra các instance – thể hiện của các đối tượng mà nó đòi hỏi để phục vụ thiết bị của nó và điều chỉnh những thể hiện cho phù hợp với những yêu cầu của nó. Đối với mỗi thể hiện, trình điều khiển cung cấp những callback cho các sự kiện. Callbacks gọi các phương thức trên đối tượng để thực hiện bất kỳ hành động bổ sung. Đối tượng được tổ chức phân cấp. WDF driver object là đối tượng gốc; tất cả các đối tượng thì phụ thuộc vào đối tượng gốc. Đối với hầu hết các loại đối tượng, một trình điều khiển có thể xác định parent - cha khi nó tạo ra đối tượng. Nếu trình điều khiển không xác định đối tượng cha khi tạo đối tượng, framework sẽ thiết lập đối tượng cha là WDF driver object như mặc định. Tuy nhiên, một số loại đối tượng đã được xác định trước đối tượng cha và không thay đổi khi được tạo ra. Khi đối tượng cha bị xoá thì đối tượng con sẽ tự động bị xoá nhưng phải theo qui tắc “Đối tượng con xoá trước, sau đó tới đối tượng cha”. Driver tương tác với WDF object thông qua Device Driver Interface (DDIs) và thông qua giao diện đó mỗi bên thực hiện những hành động riêng của mình lên đối tưọng: - Driver actions + Tạo object. + Định nghĩa callback routine để xử lý sự kiện cho mỗi object. + Định nghĩa loại và sự cấp phát tài nguyên. + Đòi hỏi DDIs trên object khi trả lời sự kiện. - WDF actions + Quản lý quan hệ cha/con của object. + Quản lý thời gian sống của object. + Gọi callback routine mà driver đã định nghĩa trước đó khi sự kiện xảy ra. + Thực hiện hành động mặc định khi driver không xác định được callback. Mặc dù mô hình đối tượng áp dụng cho cả các KMDF và UMDF, WDF object được thực hiện khác nhau trong hai framework. - Kernel-mode object Trình điều khiển không bao giờ truy cập trực tiếp thể hiện của KMDF object. Thay vào đó, trình điều khiển tham chiếu đến thể hiện của đối tượng bằng handle. Những hành động như read, write trên một đối tượng, trình điều khiển gọi một method - phương thức trên đối tượng và gửi đến handle. KMDF định nghĩa hơn 20 loại đối tượng. Bảng 2.2.1.1-1 liệt kê một số loại thông dụng nhất. 11 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM Bảng 2.2.1.1-1 KMDF object type được sử dụng phổ biến Object Type Name WDFDRIVER WDFDEVICE WDFQUEUE WDFINTERRUPT WDFREQUEST WDFMEMORY WDFIOTARGET Description` Đại diện driver object Đại diện device object Đại diện một hàng đợi của I/O requests Đại diện một interrupt resource Mô tả một I/O request Mô tả một bộ đệm cho một I/O request Đại diện cho I/O target của một I/O request KMDF object không được quản lý bởi Windows object manager và do đó không được thao tác bằng cách sử dụng chức năng ObXxx của hệ thống. Chỉ có framework và WDF driver có thể tạo ra và thao tác chúng. Tương tự như vậy, KMDF event không liên quan đến các kernel-dispatcher event mà Windows sử dụng như cơ chế đồng bộ hóa. Một trình điều khiển không thể tạo, thao tác, hoặc chờ đợi vào một sự kiện WDF. Thay vào đó, driver đăng ký callback cho sự kiện này và WDF gọi trình điều khiển khi sự kiện xảy ra. - User-mode object UMDF object được dựa trên component object model (COM). UMDF sử dụng một tập hợp con nhỏ của COM cho giao diện truy vấn và tính tham khảo tính năng. Handle là không cần thiết bởi vì các giao diện là các lớp cơ sở trừu tượng và xác định đối tượng. Các UMDF xác định đối tượng ít hơn KMDF vì trình điều khiển chế độ người dùng không thể truy cập trực tiếp phần cứng và do đó không thực hiện truy cập bộ nhớ trực tiếp (DMA) hoặc xử lý ngắt quãng. 2.2.1.2 Driver Framework Framework cung cấp cơ sở hạ tầng cơ bản cho driver và thực hiện các dịch vụ sau cho WDF driver: - Quản lý thời gian sống của object. - Cung cấp DDIs để driver gọi các thao tác trên object. - Cung cấp sự thực thi phổ biến các tính năng mà driver thường yêu cầu, chẳng hạn như Plug and Play, power manager, synchronizaion, I/O queue, truy cập vào registry. - Quản lý luồng của I/O request và PnP từ hệ điều hành đến driver. Thay vì gọi trực tiếp hệ điều hành, driver tương tác với các framework phù hợp cho hầu hết các dịch vụ. Các framework quản lý hầu hết các tương tác với hệ điều hành thay mặt cho driver. 2.2.1.3 Driver Object và Device Object a. Driver Object [3] 12 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM I/O manager tạo ra một driver object cho mỗi driver mà được cài đặt và nạp vào OS. Driver object được mô tả bởi cấu trúc DRIVER_OBJECT. Khi I/O manager gọi thủ tục DriverEntry, nó cung cấp địa chỉ cho driver object. Driver object chứa sự lưu trữ cho các entry point cho nhiều thủ tục tiêu chuẩn của driver. Driver có trách nhiệm điền vào các entry point. Hình 2.2.1.3-a.1 Các thủ tục tiêu chuẩn mà một driver phải có Mỗi thủ tục tiêu chuẩn với một dấu sao bên cạnh tên của nó nhận một IRP là đầu vào và cũng nhận được một con trỏ đến device object mục tiêu cho I/O request. I/O manager xác định loại driver object và sử dụng các driver object để đăng ký và theo dõi thông tin về những hình ảnh của driver được tải vào OS. Lưu ý các entry point (DDDispatchXxx và DDDispatchYyy) trong hình trên tương ứng với major function code (IRP_MJ_XXX). Người lập trình driver phải biết về một số thành phần của một driver object để khởi tạo một driver cũng như tháo dỡ driver. Các thành phần dưới đây có thể truy cập đến driver . PDEVICE_OBJECT DeviceObject Trỏ đến driver object được tạo ra bởi driver. Thành phần này được tự động cập nhật khi driver gọi IoCreateDevice thành công. Một driver có thể sử dụng thành phần này và thành phần của NextDevice của DEVICE_OBJECT để bước qua một danh sách của tất cả các device object mà driver tạo ra. PDRIVER_EXTENSION DriverExtension Trỏ tới driver extension. Chỉ có thể truy cập thành phần của driver extension là DriverExtension->AddDevice, thủ tục DriverEntry lưu trữ thủ tục AddDevice. PUNICODE_STRING HardwareDatabase Trỏ đến đường dẫn Registry\Machine\Hardware để thông tin cấu hình phần cứng trong registry. PFAST_IO_DISPATCH FastIoDispatch Trỏ đến một cấu trúc định nghĩa các entry point fast I/O của driver. Thành phần này chỉ được sử dụng bởi FSDs và network transport driver - trình điều khiển giao thông mạng. 13 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM PDRIVER_INITIALIZE DriverInit Entry point cho thủ tục DriverEntry, được thành lập bởi I/O manager . PDRIVER_STARTIO DriverStartIo Entry point cho thủ tục StartIo của driver, được thiết lập bởi thủ tục DriverEntry khi driver khởi tạo, nếu driver không có thủ tục StartIo thành phần này là NULL. PDRIVER_UNLOAD DriverUnload Entry point cho thủ tục Unload của driver, được thiết lập bởi thủ tục DriverEntry khi driver khởi tạo. nếu driver không có thủ tục StartIo thành phần này là NULL. PDRIVER_DISPATCH MajorFunction [ IRP_MJ_MAXIMUM_FUNCTION 1 ] Một bảng dispatch bao gồm một mảng các entry point cho thủ tục DispatchXxx của driver. Giá trị của chỉ số của mảng là những giá trị IRP_MJ_XXX đại diện cho mỗi IRP major function code. driver phải thiết lập entry point trong mảng này cho các IRP_MJ_XXX request mà driver xử lý, xem Writing Dispatch Routine. b. Device Object [4] Hệ điều hành mô tả các thiết bị bởi các device object. Một hoặc nhiều device object được kết hợp với mỗi thiết bị. Các device object phục vụ như là mục tiêu của tất cả các hoạt động trên thiết bị. Trình điều khiển kernel-mode phải tạo ra ít nhất một device object cho mỗi thiết bị. Một số device object không đại diện cho physical device - thiết bị vật lý, xử lý I/O request không được gửi đến phần cứng, nhưng vẫn phải tạo ra một device object, xem Creating device object để biết thêm về cách tạo ra device object. - Device object có những đặc điểm như sau: Được mô tả bởi cấu trúc DEVICE_OBJECT. Được tổ chức trong một device stack – ngăn xếp thiết bị. Được quản lý bởi object manager. Một device object có thể được đặt tên, xem Named Device Object. Hệ thống cung cấp sự lưu trữ dành riêng cho từng device object, được gọi là device extension. Device extension được tạo ra và được giải phóng bởi hệ thống cùng với các device object, xem Device Extensions. Hình dưới đây minh họa mối quan hệ giữa device object và I/O manager. 14 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM Hình 2.2.1.3-b.1 Mối quan hệ giữa device object và I/O manager 2.2.1.4 Device Stack và Driver Stack a. Device Stack [5] Trong Windows, các device được đại diện bởi các device node trong PnP device tree. Thông thường, khi một I/O request được gửi tới một device, những driver khác nhau giúp xử lý các request. Mỗi driver được liên kết với một device object, và các device object được sắp xếp trong một stack. Trình tự của các device object cùng với các driver liên quan được gọi là một device stack. Mỗi device node có device stack riêng của mình. Windows tổ chức các device trong một cấu trúc cây gọi là PnP device tree. Thông thường, một node trong device tree đại diện cho hoặc là một device hoặc một chức năng cá nhân của device. Như vậy, một device có thể có một hoặc nhiều device node. Tuy nhiên, một số các nút đại diện cho các thành phần phần mềm mà không có liên kết với các thiết bị vật lý. Một node trong device tree được gọi là một device node. Root node của cây thiết bị được gọi là root device node. Theo quy ước, các root device node được vẽ ở dưới cùng của device tree. Một device object là một thể hiện của một DEVICE_OBJECT structure. Mỗi device node trong PnP device tree có một danh sách của các device object, và mỗi device object được kết hợp với một driver. Theo quy ước, một device stack có một đầu và đáy. Các device object đầu tiên được tạo ra trong devicd stack là ở phía dưới, và các device object cuối cùng được tạo ra và gắn vào phần đầu của device stack. Hình 2.2.2.4-a.1 trình bày mô hình device stack trong kernel-mode. 15 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM Device Stack device object driver device object driver device object driver Hình 2.2.1.4-a.1 Device stack trong kernel-mode b. Driver Stack [6] Hầu hết các yêu cầu được gửi đến trình điều khiển thiết bị được đóng gói trong I/O request packets (IRPs). Mỗi device được đại diện bởi một device node, và mỗi device node có một device stack. Để gửi một read, write, device request đến device, I/O manager đặt các device node cho device và sau đó gửi một IRP cho các device stack của node đó. Đôi khi có nhiều hơn một device stack tham gia vào xử lý một I/O request. Trình tự của các driver tham gia xử lý I/O request được gọi là driver stack. Xem xét trình tự của bốn driver tham gia xử lý I/O request được minh họa trong biểu đồ trước đó. Sơ đồ dưới đây cho thấy các driver theo thứ tự từ trên xuống dưới. Chú ý rằng Disk.sys được liên kết với một device object, nhưng mỗi một trong ba driver khác có liên quan đến hai device object. Như vậy, một driver có thể thực thi cho nhiều device. Hình 2.2.1.4-b.1 Driver stack trong kernel-mode 2.2.2 Kernel Mode Driver Framework (KMDF) Kernel Mode Driver Framework (KMDF) là một cơ sở hạ tầng cho sự phát triển trình điều khiển chế độ hạt nhân (Kernel Mode Driver). Nó cung cấp một 16 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM giao diện trình điều khiển thiết bị - Device Driver Interface (DDI) ngôn ngữ C và có thể được sử dụng để tạo trình điều khiển cho Windows 7. Về bản chất, framework là một trình điều khiển thiết bị xương sống mà có thể được tùy biến cho các thiết bị cụ thể. KMDF thực thi mã lệnh để xử lý những yêu cầu trình điều khiển thông thường. Trình điều khiển tùy chỉnh framework bằng cách thiết lập thuộc tính đối tượng, đăng ký callback để được thông báo về sự kiện quan trọng, và bao gồm cả mã chỉ dành cho các tính năng mà là duy nhất cho thiết bị của họ . KMDF cung cấp một mô hình đối tượng được định nghĩa tốt và kiểm soát thời gian sống của các đối tượng và cấp phát bộ nhớ. Đối tượng được tổ chức phân cấp trong một mô hình cha /con , và cấu trúc dữ liệu trình điều khiển quan trọng được duy trì bởi KMDF thay vì bởi trình điều khiển. Chương này giới thiệu cho chúng ta biết về kiến trúc và các điểm đặc trưng của KMDF và các yêu cầu cho trình điều khiển sử dụng KMDF (đôi khi được gọi là trình điều khiển dựa trên KMDF hoặc đơn giản là trình điều khiển DMDF). 2.2.2.1 Những Thành Phần Của KMDF KMDF được phân phối như một phần của Windows Driver Kit (WDK) và bao gồm header file, libraries, sample drivers, development tools, public debugging symbols, và tracing format files. Theo mặc định, KMDF được cài đặt trong thư mục con WDF của thư mục cài đặt gốc WDK. Trình điều khiển dựa trên KMDF được xây dựng trong WDK build environment. Bảng 2.2.2.1-1 liệt kê các thành phần KMDF được cài đặt như một phần của WDF. Bảng 2.2.2.1-1 Các thành phần của KMDF Thành phần Vị trí Header files Libraries Wdf/inc Wdf/lib Sample Drivers Wdf/src Tools Wdf/bin Debugging symbol Wdf/symbols Tracing format files Wdf/tracing Mô tả Yêu cầu để xây dựng KMDF driver Thư viện cho các kiến trúc x86, x64 và Intel Itanium. Các driver mẫu về các loại driver; hầu hết được cung cấp từ các mẫu Windows Device Kit (DDM)WDM Các công cụ cho việc kiểm thử, gỡ lỗi, và cài đặt driver Những tập tin Public symbol database (.psd) cho thư viện và đồng cài đặt cho việc Check and free uilds Theo dõi những tập tin định dạng và lần theo những thông điệp được tạo bởi thư viện KMDF và đồng cài đặt. 17 SVTH: CHÂU TRƯƠNG HẢI MY GVHD: TS.LÊ VĂN LÂM 2.2.2.2 Device Object và Vai Trò Của Driver Tất cả driver tạo ra một hoặc nhiều device object để đại diện cho vai trò của driver trong việc xử lý I/O request và quản lý thiết bị của mình. KMDF hỗ trợ các loại device object sau đây: - Filter device objects (filter DOs) đại diện cho vai trò của một filter driver. Filter DOS "lọc" hoặc sửa đổi một hoặc nhiều loại I/O request mục tiêu trong thiết bị. Filter DOs được gắn vào PnP device stack. - Functional device objects (FDOs) đại diện cho vai trò của một function driver, nó là driver chính cho một thiết bị. FDOs được gắn vào PnP device stack. - Physical device objects (PDOs) đại diện cho vai trò của bus driver, liệt kê các thiết bị con. PDOs được gắn vào PnP device stack. - Control device object (CDOs) đại diện cho một di sản Non-PnP device hoặc một giao diện điều khiển. Không phải là một phần của PnP device stack. Tùy thuộc vào thiết kế của thiết bị và các driver khác trong device stack, một driver có thể giả định có một hoặc nhiều vai trò. Mỗi thiết bị PnP có một function driver và một bus driver, nhưng có thể có bất kỳ số lượng các filter driver. Trong PnP device stack, một driver thỉnh thoảng hành động như function driver cho một thiết bị và như bus driver cho các thiết bị mà thiết bị của nó liệt kê. Function driver và Function device object Function driver là các trình điều khiển chính cho các thiết bị của họ. Function driver giao tiếp với thiết bị của mình để thực hiện I/O và thường quản lý chính sách năng lượng cho thiết bị của nó. Trong PnP device stack, một function driver bộc lộ một FDO. Để hỗ trợ function driver, KMDF bao gồm một giao diện FDO, trong đó định nghĩa một tập hợp các method, các event, và property áp dụng cho FDOs trong suốt quá trình cài đặt và hoạt động. Bằng cách sử dụng giao diện FDO, một driver có thể: - Đăng ký các event callback có liên quan đến tài nguyên phân bổ cho các thiết bị của nó . - Lấy thuộc tính của thiết bị vật lý của nó . - Mở một registry key. - Quản lý một danh sách các thiết bị con, nếu thiết bị liệt kê một hoặc nhiều con. Khi driver tạo ra device object cho nó, KMDF tạo ra một FDO. Theo mặc định, KMDF giả định rằng các function driver quản lý chính sách năng lượng cho thiết bị của mình. Nếu thiết bị hỗ trợ đánh thức các tín hiệu, các function driver thường cũng thiết lập các event callback chính sách năng lượng để thực hiện tính năng này. Tất cả các trình điều khiển mẫu, ngoại trừ các trình điều khiển KbFiltr và Firefly, tạo ra một FDO . 18
- Xem thêm -