Tài liệu lập trình hệ thống ngắt và sự kiện

15 2K 11
Tài liệu lập trình hệ thống ngắt và sự kiện

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tài liệu lập trình hệ thống ngắt và sự kiện

Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 34 Chương 2 NGẮT SỰ KIỆN 1. Khái niệm Ngắt (interrupt) là quá trình dừng chương trình chính đang chạy để ưu tiên thực hiện một chương trình khác, chương trình này được gọi là chương trình phục vụ ngắt (ISR – Interrupt Service Routine). ISR hoàn toàn giống với một chương trình bình thường trên máy tính, nghĩa là nó có khả năng truy xuất đến tất cả các lệnh ngôn ngữ máy của µP. Tuy nhiên cuối ISR sẽ kết thúc bằng lệnh IRET (Interrupt Return) để µP tiếp tục thực hiện lệnh đã kết thúc trước đây. Các nguyên nhân dẫn đến ngắt là: - Bản thân chương trình đang thực hiện bị lỗi, ví dụ như: chia cho 0, … - Do tác động của thiết bị ngoại vi, ví dụ như: thực hiện lệnh in nhưng máy in lỗi, ghi dữ liệu vào đĩa nhưng không có đĩa, … - Do lập trình viên chủ động gọi các ngắt có sẵn. Một cách đơn giản, chúng ta có thể xem ngắt như là quá trình gọi chương trình con nhưng các chương trình con này được tạo ra sẵn trong máy tính quá trình gọi này có thể xảy ra tại thời điểm không xác định trước. Sự kiện (Event) là một tác động lên một đối tượng trong môi trường Windows. Khi có một sự kiện xảy ra, Windows sẽ gởi thông điệp (message) đến đối tượng. Các sự kiện thường xảy ra là: - Sự kiện chuột: Click, Double Click, … - Sự kiện bàn phím: nhấn phím, nhả phím, … - Sự kiện cửa sổ: Activate, Load, Unload, … 2. Các loại ngắt bảng vector ngắt Quá trình ngắt có thể mô tả như sau: Hình 2.1 – Quá trình thực hiện ngắt Lưu trữ các thanh ghi cần thiết … Khôi phục các thanh ghi Quay về chương trình chính (IRET) Chương trình chính ISR Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 35 Trong các quá trình ngắt, ta phân biệt thành 2 loại: ngắt cứng ngắt mềm. Ngắt mềm là ngắt được gọi bằng một lệnh trong chương trình ngôn ngữ máy. Ngắt mềm được thục hiện trên hợp ngữ thông qua lệnh INT. Đối với các ngôn ngữ bậc cao hơn, vẫn cho phép thực hiện gọi ngắt nhưng phải được biên dịch thành lệnh INT trong hợp ngữ rồi mời thực hiện. Khác với ngắt mềm, ngắt cứng không được khởi động bên trong máy tính mà do các linh kiện điện tử tác đông lên hệ thống. Ngắt cứng cũng được chia thành 2 loại: ngắt che được ngắt không che được. Ngắt che được là ngắt có thể cho phép hay không cho phép thực thi bằng phần mềm thông qua cờ ngắt IF (Interrupt Flag): lệnh CLI (Clear Interrupt Flag) sẽ cấm ngắt lệnh STI (Set Interrupt Flag) sẽ cho phép các ngắt này hoạt động. Các loại ngắt khác nhau có thể mô tả như sau: Hình 2.2 – Các loại ngắt Khi thực hiện lệnh gọi một ngắt nào đó, chương trình con phục vụ cho ngắt sẽ được gọi. Để thực hiện các ngắt tương ứng, địa chỉ thực hiện các chương trình con phục vụ ngắt được đặt trong một bảng, gọi là bảng vector ngắt. Bảng vector ngắt gồm có 256 phần tử, mỗi phần tử gồm 4 byte ứng với 256 ngắt (từ ngắt 0 đến ngắt 0FFh). Mỗi phần tử trong bảng vector ngắt chứa 2 địa chỉ: địa chỉ thanh ghi đoạn đưa vào CS địa chỉ offset của chương trình phục vụ ngắt đưa vào IP. Ngắt Ngắt mềm Ngắt cứng Ngắt hệ thống Ngắt do người sử dụng Trong Ngoài HĐH BIOS Che được Không che được Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 36 Bảng vector ngắt có thể mô tả như sau: Địa chỉ Địa chỉ ISR Số thứ tự ngắt0000h:0000h CS 0000h:0002h IP 0 0000h:0004h CS 0000h:0006h IP 1 0000h:0008h CS 0000h:000Ah IP 2 … … … 0000h:03FCh CS 0000h:03FEh IP 255 Khi có một quá trình ngắt xảy ra, CPU sẽ tìm địa chỉ bắt đầu của chương trình ngắt được chứa trong bảng vector ngắt theo số thự tự ngắt. Do một phần tử trong bảng vector ngắt chiếm 4 byte nên để tìm giá trị địa chỉ trong bảng vector ngắt, ta chỉ cần nhân số thứ tự ngắt với 4. Danh sách các ngắt mô tả như sau: STT Địa chỉ Chức năng 00h 0000h – 0003h CPU: chia cho 0 01h 0004h – 0007h CPU: thực hiện từng lệnh 02h 0008h – 000Bh CPU: Lỗi RAM 03h 000Ch – 000Fh CPU: thực hiện đến điểm dừng 04h 0010h – 0013h CPU: tràn số 05h 0014h – 0017h In trang màn hình (Print Screen) 06h, 07h 0018h – 001Fh Dành riêng 08h 0020h – 0023h IRQ0: ngắt đồng hồ (18.2 lần / giây) 09h 0024h – 0027h IRQ1: ngắt bàn phím 0Ah 0028h – 002Bh IRQ2: Dành riêng 0Bh 002Ch – 002Fh IRQ3: Giao tiếp nối tiếp 1 0Ch 0030h – 0033h IRQ4: Giao tiếp nối tiếp 2 0Dh 0034h – 0037h IRQ5: Đĩa cứng Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 37 0Eh 0038h – 003Bh IRQ6: Đĩa mềm 0Fh 003Ch – 003Fh IRQ7: Máy in 10h 0040h – 0043h BIOS: màn hình 11h 0044h – 0047h BIOS: xác định cấu hình máy tính 12h 0048h – 004Bh BIOS: xác định kích thước RAM 13h 004Ch – 004Fh BIOS: truy nhập đĩa cứng / đĩa mềm 14h 0050h – 0053h BIOS: truy nhập giao tiếp nối tiếp 15h 0054h – 0057h BIOS: truy nhập cassette hay mở rộng ngắt 16h 0058h – 005Bh BIOS: kiểm tra bàn phím 17h 005Ch – 005Fh BIOS: truy nhập máy in 18h 0060h – 0063h Chương trình xâm nhập ROM BASIC 19h 0064h – 0067h BIOS: khởi động hệ thống (khi nhấn Ctrl-Alt-Del)1Ah 0068h – 006Bh BIOS: đọc / ghi ngày / giờ 1Bh 006Ch – 006Fh Nhấn phím Break 1Ch 0070h – 0073h Gọi sau INT 08h 1Dh 0074h – 0077h Địa chỉ bảng tham số màn hình 1Eh 0078h – 007Bh Địa chỉ bảng tham số đĩa mềm 1Fh 007Ch – 007Fh Địa chỉ bảng font có ký tự mở rộng 20h 0080h – 0083h DOS: kết thúc chương trình 21h 0084h – 0087h DOS: gọi các hàm của DOS 22h 0088h – 008Bh Địa chỉ kết thúc chương trình 23h 008Ch – 008Fh Nhấn Ctrl-Break 24h 0090h – 0093h Địa chỉ chương trình xử lý lỗi 25h 0094h – 0097h DOS: đọc đĩa mềm / đĩa cứng 26h 0098h – 009Bh DOS: ghi đĩa mềm / đĩa cứng 27h 009Ch – 009Fh DOS: kết thúc chương trình thường trú 28h – 3Fh 00A0h – 00FFh Dành riêng cho DOS 40h 0100h – 0103h BIOS: phục vụ đĩa mềm 41h 0104h – 0107h Địa chỉ bảng tham số đĩa cứng 1 42h – 45h 0108h – 0117h Dành riêng 46h 0118h – 011Bh Địa chỉ của bảng tham số đĩa cứng 2 47h – 49h 011Ch – 0127h Dành cho user Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 38 4Ah 0128h – 012Bh Hẹn giờ 4Bh – 67h 012Ch – 019Fh Dành cho user 68h – 6Fh 01A0h – 01BFh Không dùng 70h 01C0h – 01C3h IRQ8: đồng hồ thời gian thực 71h 01C4h – 01C7h IRQ9 72h 01C8h – 01CBh IRQ10 73h 01CCh – 01CFh IRQ11 74h 01D0h – 01D3h IRQ12 75h 01D4h – 01D7h IRQ13: từ 80x87 76h 01D8h – 01DBh IRQ14: đĩa cứng 77h 01DCh – 01DFh IRQ15 78h – 7Fh 01E0h – 01FFh Dành riêng 80h – F0h 0200h – 03C3h Dùng cho bộ thông dịch BASIC F1h – FFh 03C4h – 03FFh Không sử dụng 3. Gọi ngắt chặn ngắt Quá trình gọi ngắt từ hợp ngữ đơn giản là thực hiện lệnh INT STT_ngắt sau khi nạp các tham số cần thiết cho ngắt. Khi thực hiện lệnh gọi ngắt, CPU sẽ tìm kiếm trong bảng vector ngắt địa chỉ của chương trình phục vụ ngắt. Người sử dụng cũng có thể xây dựng môt chương trình cơ sở như các chương trình xử lý ngắt. Sau đó, các chương trình khác có thể gọi ngắt ra để sử dụng. Một chương trình có thể gọi chương trình con loại này mà không cần biết địa chỉ của nó. Như vậy, nếu muốn thay đổi ngắt, ta có thể thay đổi nội dung trong bảng vector ngắt để chỉ đến chương trình phục vụ do người sử dụng tự xây dựng chương trình này sẽ được thực hiện khi ngắt được gọi. Để làm điều này, ta chỉ cần tìm vị trí của vector ngắt tương ứng trong bảng thay đổi giá trị của nó. Điều này thực hiện được do bảng vector ngắt đặt trong RAM được nạp mỗi khi khởi động hệ thống. Quá trình lấy gán địa chỉ của chương trình con phục vụ ngắt có thể thực hiện thông qua ngắt 21h bằng các hàm sau: Hàm 35h: lấy địa chỉ của ngắt Vào: AL = số thứ tự ngắt Ra: ES:BX = địa chỉ của chương trình phục vụ ngắt Hàm 25h: gán địa chỉ của một chương trình phục vụ cho một ngắt Vào: AL = số thứ tự ngắt, DS:DX Ra: không có Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 39 Để thực hiện chặn một ngắt, ta cần thực hiện như sau: Hình 2.2 – Quá trình chặn một ngắt Một ví dụ cho quá trình chặn ngắt như sau: ;*******************************************************************************;* ;* LAB6-2.ASM - Assembler Laboratory ZMiTAC * ;* ;* Sample program that converts lowercase to uppercase when key pressed * ;* ;*******************************************************************************.MODEL SMALL .STACK 100h .CODE ;*******************************************************************************;* Variables ;*******************************************************************************old_proc dd 0 ; address of original interrupt handler dot_flag db 0 ; dot flag ;*******************************************************************************;* 09h interrupt handler ;*******************************************************************************segment_kb EQU 40h ; beggining of keyboard data segment wsk_kb EQU 1Ch ; offset of pointer to keyboard buffer kb_buf_begin EQU 80h ; offset of address of begining of the buffer kb_buf_end EQU 82h ; offset of address of end of the buffer keys PROC FAR ;-------------------------------------------------------------------------------; Calling of original interrupt handler ;------------------------------------------------------------------------------- Dùng hàm 35h lấy địa chỉ của ngắt Dùng hàm 25h gán địa chỉ mới cho ngắt Dùng hàm 25h khôi phục lại địa chỉ cũ cho ngắt Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 40 int 60h ;-------------------------------------------------------------------------------; Prepare registers ;------------------------------------------------------------------------------- push ax ; push registers on the stack push bx push dx push ds mov ax,segment_kb ; address of keyboard data segment to DS mov ds,ax ;------------------------------------------------------------------------------- ; Read the character and check ASCII code ;------------------------------------------------------------------------------- mov bx,ds:[wsk_kb] ; actual pointer to BX mov ax,ds:[kb_buf_begin] ; buffer beggining to AX cmp bx,ax ; is the beggining of the buffer ? jne mid_buf mov bx,ds:[kb_buf_end] ; last character is at the end of the buffer mid_buf: mov ax,ds:[bx-2] ; read last character cmp al,'.' ; compare with dot je dot_found ; if dot cmp al,'Z' ; compare with 'Z' ja check_lowercase ; if above check lowercase cmp al,'A' ; compare with 'A' jb keys_end ; end if less mov dot_flag,0 ; uppercase - clear flag jmp keys_end ; return check_lowercase: cmp al,'z' ; compare with 'z' ja keys_end ; end if above cmp al,'a' ; compare with 'a' jb keys_end ; end if less cmp dot_flag,0 ; was dot pressed? je keys_end ; end if not ;------------------------------------------------------------------------------- ; Change lowercase to uppercase ;------------------------------------------------------------------------------- sub al,'a'-'A' ; sub difference between cases mov ds:[bx-2],ax mov dot_flag,0 ; uppercase - clear flag jmp keys_end ; return dot_found: mov dot_flag,1 ; set flag jmp keys_end ; return ;-------------------------------------------------------------------------------; Pop registers and return from interrupt ;-------------------------------------------------------------------------------keys_end: pop ds pop dx pop bx pop ax Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 41 iret keys ENDP ;******************************************************************************* ;* Main program ;******************************************************************************* ;------------------------------------------------------------------------------- ; Get interrupt ;------------------------------------------------------------------------------- start proc mov ah,35h ; function 35h - read handler address mov al,09h ; of interrupt 09h int 21h mov word ptr old_proc,bx ; store 32-bit address mov word ptr old_proc+2,es ; of original interrupt handler push cs pop ds ; handler code segment to DS mov dx,offset keys ; offset of handler address to DX mov ah,25h ; function 25h - set new handler mov al,09h ; of interrupt 09h int 21h mov dx,word ptr old_proc+2 mov ds,dx mov dx,word ptr old_proc mov ah,25h ; function 25h - set new adress mov al,60h ; of original interrupt handler int 21h ; 60h instead of 09h ;------------------------------------------------------------------------------- ; Main loop ;------------------------------------------------------------------------------- looping:mov ah,08h ; function 08h - read character int 21h ; ASCII code is returned in AL cmp al,1Bh ; ESC je ending ; if ESC end of the loop mov dl,al ; not ESC - move char to DL mov ah,02h ; function 02h - display character int 21h ; ASCII code of char in DL jmp looping ;------------------------------------------------------------------------- ending: mov dx,word ptr old_proc+2 mov ds,dx mov dx,word ptr old_proc mov ah,25h ; function 25h - set old handler mov al,09h ; of interrupt 09h int 21h mov ah,4Ch ; end of the program int 21h start endp END start 4. Tạo bắt các sự kiện Trong hệ điều hành Windows, hook (câu móc) là cơ chế cho phép một hàm chặn một sự kiện (thông điệp, chuột, phím nhấn) trước khi đưa đến đối tượng cần xử lý. Hàm này cho phép thay đổi hoặc thậm chí cấm sự kiện xảy ra. Chúng được gọi là hàm lọc (filter) được Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 42 phân loại dựa theo loại sự kiện bị chặn. Để gọi được hàm lọc, ta cần phải thực hiện quá trình gắn (attach) vào quá trình câu móc (như câu móc bàn phím). Việc gắn một hay nhiều hàm lọc vào một quá trình câu móc được gọi là thiết lập (setting) một quá trình câu móc. Nếu một quá trình câu móc có nhiều hơn một hàm lọc, Windows sẽ duy trì một chuỗi các hàm lọc trong đó hàm được cài đặt vào gần nhất sẽ nằm ở đầu chuỗi hàm cài đặt lâu nhất sẽ nằm ở cuối chuỗi. Nếu sự kiện xảy ra làm khởi động quá trình câu móc, Windows sẽ gọi hàm lọc đầu tiên trong chuỗi. Quá trình câu móc vào một sự kiện được sử dụng bằng hàm SetWindowsHookEx hàm UnhookWindowsHookEx dùng để xóa bỏ hàm lọc khỏi quá trình. Cơ chế câu móc cung cấp các khả năng mạnh mẽ cho một ứng dụng Windows. Các ứng dụng này có thể dùng quá trình câu móc để: - Xử lý thay đổi các thông điệp gởi đến các dialog box, message box, scroll bar menu của một ứng dụng (WH_MSGFILTER). - Xử lý thay đổi các thông điệp gởi đến các dialog box, message box, scroll bar menu của hệ thống (WH_SYSMSGFILTER). - Xử lý thay đổi các thông điệp của hệ thống bất cứ khi nào hàm GetMessage hay PeekMessage được gọi (WH_GETMESSAGE). - Xử lý thay đổi các thông điệp của hệ thống bất cứ khi nào hàm SendMessage được gọi (WH_CALLWNDPROC). - Ghi hay thực hiện lại các sự kiện bàn phím chuột (WH_JOURNALRECORD, WH_JOURNALPLAYBACK). - Xử lý, sửa đổi hay cấm sự kiện chuột (WH_MOUSE). - Xử lý, sửa đổi hay cấm sự kiện bàn phím (WH_KEYBOARD). - Đáp ứng với các hoạt động nào đó của hệ thống, có khả năng phát triển CBT (computer-based training) cho ứng dụng (WH_CBT). - Cấm các hàm lọc khác (WH_DEBUG). Các ứng dụng thường dùng quá trình câu móc để: - Dùng phím F1 để hỗ trợ cho menu, dialog box message box (WH_MSGFILTER). - Lưu lại quá trình thực hiện khi nhấn phím hay chuột (thường dùng cho macro). Ví dụ như Windows Recorder sử dụng hook để hỗ trợ chức năng record playback (WH_JOURNALRECORD, WH_JOURNALPLAYBACK). - Quản lý thông điệp để xác nhận thông điệp được gởi tới cửa sổ hay được tạo ra (WH_GETMESAGE, WH_CALLWNDPROC). - Mô phỏng ngõ vào chuột bàn phím (WH_JOURNALPLAYBACK). Quá trình câu móc là phương pháp tin cậy để thực hiện hoạt động này. Nếu ta thực hiện mô phỏng bằng cách gởi thông điệp, Windows sẽ không thực hiện cập nhật trạng thái của bàn phím hay chuột dẫn đến các hoạt động không mong muốn. Nếu quá trình câu móc thực hiện điều này, nó sẽ được xử lý giống như sự kiện chuột hay bàn Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 43 phím xảy ra. Ví dụ như Microsoft Excel dùng hook để thực hiện macro SENDKEYS. - Cung cấp khả năng CBT cho ứng dụng thực hiện trên môi trường Windows (WH_CBT) làm cho quá trình phát triển ứng dụng CBT dễ dàng hơn. Phạm vi sử dụng: Một trong những đặc trưng của Win32 Hook là cho phép chỉ định quá trình câu móc là hệ thống hay ở dạng luồng (thread). Hook hệ thống cho phép tác động đến các cửa sổ khác trong hệ thống còn hook luồng chỉ cho phép tác động đến cửa sổ hiện hành. Cách thức sử dụng quá trình câu móc: Để sử dụng quá trình câu móc, ta cần phải biết: - Làm thế nào dùng hàm câu móc của Windows để thêm vào hay xóa bỏ một hàm lọc trong chuỗi hàm xử lý của một quá trình câu móc. - Cần phải thực hiện các hoạt động gì để cài đặt một hàm lọc. - Có thể thực hiện được hàm câu móc nào chúng có thể làm được gì, gởi những thông tin nào. 4.1. Hàm câu móc của Windows Các ứng dụng trên nền Windows sử dụng các hàm SetWindowsHookEx, UnhookWindowsHookEx CallNextHookEx để quản lý chuỗi hàm lọc trong một quá trình câu móc. Trước phiên bản 3.1, Windows thực hiện quản lý bằng các hàm SetWindowsHook, UnhookWindowsHook DefHookProc. Mặc dù các hàm này cũng có khả năng thực hiện được trên nền Win32 nhưng sẽ có một số đặc trưng không sử dụng được như các phiên bản mới (Ex). 4.1.1. Hàm SetWindowsHookEx Dùng để thêm một hàm lọc vào một quá trình câu móc. Khai báo: Public Declare Function SetWindowsHook Lib "user32" Alias "SetWindowsHookA" (ByVal nFilterType As Long, ByVal pfnFilterProc As Long) As Long Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long Hàm SetWindowsHookEx gồm có 4 tham số: - idHook: xác định loại hàm câu móc sẽ cài đặt. Thông số này gồm các giá trị sau: WH_KEYBOARD: cài đặt hàm câu móc quản lý thông điệp gởi đi khi nhấn phím (ngoại trừ tổ hợp Ctrl – Alt – Del). WH_MOUSE: cài đặt hàm câu móc quản lý thông điệp khi điều khiển chuột. WH_CALLWNDPROC: cài đặt hàm câu móc quản lý thông điệp trước khi hệ thống gởi đến cửa sổ, chỉ cho phép xử lý thông điệp mà không được thay đổi thông điệp. [...]... do bảng vector ngắt đặt trong RAM được nạp mỗi khi khởi động hệ thống. Quá trình lấy gán địa chỉ của chương trình con phục vụ ngắt có thể thực hiện thơng qua ngắt 21h bằng các hàm sau: Hàm 35h: lấy địa chỉ của ngắt Vào: AL = số thứ t ự ngắt Ra: ES:BX = địa chỉ của chương trình phục vụ ngắt Hàm 25h: gán địa chỉ của một chương trình phục vụ cho một ngắt Vào: AL = số thứ tự ngắt, DS:DX Ra:... dụng 3. Gọi ngắt chặn ngắt Quá trình gọi ngắt từ hợp ngữ đơn giản là thực hiện lệnh INT STT _ngắt sau khi nạp các tham số cần thiết cho ngắt. Khi thực hiện lệnh gọi ngắt, CPU sẽ tìm kiếm trong bảng vector ngắt địa chỉ của chương trình phục vụ ngắt. Người sử dụng cũng có thể xây dựng mơt chương trình cơ sở như các chương trình xử lý ngắt. Sau đó, các chương trình khác có thể gọi ngắt ra để sử... 011Ch – 0127h Dành cho user Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 42 phân loại dựa theo loại sự kiện bị chặn. Để gọi được hàm lọc, ta cần phải thực hiện quá trình gắn (attach) vào quá trình câu móc (như câu móc bàn phím). Việc gắn một hay nhiều hàm lọc vào một q trình câu móc được gọi là thiết lập (setting) một quá trình câu móc. Nếu một q trình câu móc có nhiều hơn một... câu móc dạng nhật ký (WH_JOURNALRECORD WH_JOURNALPLAYBACK) là ngoại lệ. Hàm lọc của quá trình câu móc hệ thống phải chia sẻ dữ liệu cho tiến trình thực hiện q trình câu móc. Các biến toàn cục sử dụng trong DLL phải được xác định rõ hay phải đặt trong vùng dữ liệu chia sẻ. Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 38 4Ah 0128h – 012Bh Hẹn giờ 4Bh – 67h 012Ch – 019Fh... phỏng ngõ vào chuột bàn phím (WH_JOURNALPLAYBACK). Q trình câu móc là phương pháp tin cậy để thực hiện hoạt động này. Nếu ta thực hiện mô ph ỏng bằng cách gởi thông điệp, Windows sẽ không thực hiện cập nhật trạng thái của bàn phím hay chuột dẫn đến các hoạt động khơng mong muốn. Nếu q trình câu móc thực hiện điều này, nó sẽ được xử lý giống như sự kiện chuột hay bàn Tài liệu Lập trình hệ thống. .. (WH_GETMESSAGE). - Xử lý thay đổi các thông điệp của hệ thống bất cứ khi nào hàm SendMessage được gọi (WH_CALLWNDPROC). - Ghi hay thực hiện lại các sự kiện bàn phím chuột (WH_JOURNALRECORD, WH_JOURNALPLAYBACK). - Xử lý, sửa đổi hay cấm sự kiện chuột (WH_MOUSE). - Xử lý, sửa đổi hay cấm sự kiện bàn phím (WH_KEYBOARD). - Đáp ứng với các hoạt động nào đó của hệ thống, có khả năng phát triển... một chuỗi các hàm lọc trong đó hàm được cài đặt vào gần nhất sẽ nằm ở đầu chuỗi hàm cài đặt lâu nhất sẽ nằm ở cuối chuỗi. Nếu sự kiện xảy ra làm khởi động q trình câu móc, Windows sẽ gọi hàm lọc đầu tiên trong chuỗi. Quá trình câu móc vào một sự kiện được sử dụng bằng hàm SetWindowsHookEx hàm UnhookWindowsHookEx dùng để xóa bỏ hàm lọc khỏi q trình. Cơ chế câu móc cung cấp các khả năng mạnh... sử dụng. Một chương trình có thể gọi chương trình con loại này mà khơng cần biết địa chỉ của nó. Như vậy, nếu muốn thay đổi ngắt, ta có thể thay đổi nội dung trong bảng vector ngắt để chỉ đến chương trình phục vụ do người sử dụng tự xây dựng chương trình này sẽ được thực hiện khi ngắt được gọi. Để làm đi ều này, ta chỉ cần tìm vị trí của vector ngắt tương ứng trong bảng thay đổi giá trị... dụng Windows. Các ứng dụng này có thể dùng q trình câu móc để: - Xử lý thay đổi các thơng điệp gởi đến các dialog box, message box, scroll bar và menu của một ứng dụng (WH_MSGFILTER). - Xử lý thay đổi các thông điệp gởi đến các dialog box, message box, scroll bar và menu của hệ thống (WH_SYSMSGFILTER). - Xử lý thay đổi các thông điệp của hệ thống bất cứ khi nào hàm GetMessage hay PeekMessage... pop ax Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 43 phím xảy ra. Ví dụ như Microsoft Excel dùng hook để thực hiện macro SENDKEYS. - Cung cấp khả năng CBT cho ứng dụng thực hiện trên mơi trường Windows (WH_CBT) làm cho q trình phát triển ứng dụng CBT dễ dàng hơn. Phạm vi sử dụng: Một trong những đặc trưng của Win32 Hook là cho phép chỉ định q trình câu móc là hệ thống hay . Tài liệu Lập trình hệ thống Chương 2 Phạm Hùng Kim Khánh Trang 34 Chương 2 NGẮT VÀ SỰ KIỆN 1. Khái niệm Ngắt (interrupt) là quá trình dừng chương trình. vụ ngắt đưa vào IP. Ngắt Ngắt mềm Ngắt cứng Ngắt hệ thống Ngắt do người sử dụng Trong Ngoài HĐH BIOS Che được Không che được Tài liệu Lập trình

Ngày đăng: 04/09/2012, 14:59

Hình ảnh liên quan

Hình 2.2 – Các loại ngắt - Tài liệu lập trình hệ thống ngắt và sự kiện

Hình 2.2.

– Các loại ngắt Xem tại trang 2 của tài liệu.
Bảng vector ngắt có thể môt ản hư sau: - Tài liệu lập trình hệ thống ngắt và sự kiện

Bảng vector.

ngắt có thể môt ản hư sau: Xem tại trang 3 của tài liệu.
được chứa trong bảng vector ngắt theo số thự tự ngắt. Do một phần tử trong bảng vector ngắt chiếm 4 byte nên để tìm giá trịđịa chỉ trong bảng vector ngắt, ta chỉ cần nhân số thứ tự - Tài liệu lập trình hệ thống ngắt và sự kiện

c.

chứa trong bảng vector ngắt theo số thự tự ngắt. Do một phần tử trong bảng vector ngắt chiếm 4 byte nên để tìm giá trịđịa chỉ trong bảng vector ngắt, ta chỉ cần nhân số thứ tự Xem tại trang 3 của tài liệu.
11h 0044h – 0047h BIOS: xác định cấu hình máy tính 12h 0048h – 004Bh  BIOS: xác định kích thước RAM  13h 004Ch – 004Fh  BIOS: truy nhập đĩa cứng / đĩa mề m  14h 0050h – 0053h BIOS: truy nhập giao tiếp nối tiếp  - Tài liệu lập trình hệ thống ngắt và sự kiện

11h.

0044h – 0047h BIOS: xác định cấu hình máy tính 12h 0048h – 004Bh BIOS: xác định kích thước RAM 13h 004Ch – 004Fh BIOS: truy nhập đĩa cứng / đĩa mề m 14h 0050h – 0053h BIOS: truy nhập giao tiếp nối tiếp Xem tại trang 4 của tài liệu.
Như vậy, nếu muốn thay đổi ngắt, ta có thể thay đổi nội dung trong bảng vector ngắt - Tài liệu lập trình hệ thống ngắt và sự kiện

h.

ư vậy, nếu muốn thay đổi ngắt, ta có thể thay đổi nội dung trong bảng vector ngắt Xem tại trang 5 của tài liệu.
Hình 2.2 – Quá trình chặn một ngắt Một ví dụ cho quá trình chặn ngắ t nh ư  sau:  - Tài liệu lập trình hệ thống ngắt và sự kiện

Hình 2.2.

– Quá trình chặn một ngắt Một ví dụ cho quá trình chặn ngắ t nh ư sau: Xem tại trang 6 của tài liệu.
;-------------------------------------------------------------------------------Dùng hàm 35h lấy  - Tài liệu lập trình hệ thống ngắt và sự kiện

ng.

hàm 35h lấy Xem tại trang 6 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan