Điều khiển IRP MJ DEVICE CONTROL Điều khiển IRP MJ DEVICE CONTROL Bởi: Khoa CNTT ĐHSP KT Hưng Yên Sự định vị chứa tham số liệt kê Bảng 9-2 Những trình điều khiển Lọc tự chúng có lẽ giải thích số mật mã riêng ý định-nếu xác viết mã, đó-đi qua tất người khác xuống ngăn xếp Thật ra, chức liên lạc mà hiểu để xử lý IOCTL cư trú chồng trình điều khiển-đa số hợp lý trình điều khiển chức Table 9-2 Stack Location Parameters for IRP_MJ_DEVICE_CONTROL Parameters.DeviceIoControl Field Description OutputBufferLength Length of the output buffer—sixth argument to DeviceIoControl InputBufferLength Length of the input buffer—fourth argument to DeviceIoControl IoControlCode Control code—second argument to DeviceIoControl Type3InputBuffer User-mode virtual address of input buffer for METHOD_NEITHER Một chức liên lạc thuộc xương cho thao tác điều khiển (phép toán kiểm tra) giống này: #pragma PAGEDCODE NTSTATUS DispatchControl(PDEVICE_OBJECT fdo, PIRP Irp) { 1-> 1/3 Điều khiển IRP MJ DEVICE CONTROL PAGED_CODE(); PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; NTSTATUS status = STATUS_SUCCESS; ULONG info = 0; 2-> PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp); ULONG cbin = stack->Parameters.DeviceIoControl.InputBufferLength; ULONG cbout = stack->Parameters.DeviceIoControl.OutputBufferLength; ULONG code = stack->Parameters.DeviceIoControl.IoControlCode; switch (code) { 3-> default: status = STATUS_INVALID_DEVICE_REQUEST; break; } return CompleteRequest(Irp, status, info); } 2/3 Điều khiển IRP MJ DEVICE CONTROL Bạn tin ghé thăm PASSIVE_LEVEL, lý đặc biệt cho liên lạc đơn giản vận hành để nơi đâu đánh số trang kí ức Vài phát biểu rút mã chức kích thước vùng đệm từ liên hiệp tham số chồng vào/ra Bạn thường cần giá trị vấn đề IOCTL đặc biệt mà bạn xử lý, Tôi luôn tìm thấy dễ dàng phát biểu chức Đây nơi bạn sáng tạo tập việc chèn nhãn trường hợp (cho) thao tác IOCTL khác hỗ trợ bạn Đây ý tưởng tốt để trả lại tình trạng viết mã liệu đầy ý nghĩa bạn đưa cho IOCTL 3/3 ... stack->Parameters.DeviceIoControl.IoControlCode; switch (code) { 3-> default: status = STATUS_INVALID _DEVICE_ REQUEST; break; } return CompleteRequest (Irp, status, info); } 2/3 Điều khiển IRP MJ DEVICE CONTROL. . .Điều khiển IRP MJ DEVICE CONTROL PAGED_CODE(); PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; NTSTATUS status = STATUS_SUCCESS;... IoGetCurrentIrpStackLocation (Irp) ; ULONG cbin = stack->Parameters.DeviceIoControl.InputBufferLength; ULONG cbout = stack->Parameters.DeviceIoControl.OutputBufferLength; ULONG code = stack->Parameters.DeviceIoControl.IoControlCode;