Điều khiển IRP MJ DEVICE CONTROL
Sự định vị chứa những tham số được liệt kê trong Bảng 9-2. Những trình điều khiển Lọc tự chúng có lẽ đã giải thích một số mật mã riêng trừ phi ý định-nếu chính xác viết mã, cái đó-đi qua tất cả những người cái khác xuống ngăn xếp. Thật ra, một chức năng ...
Sự định vị chứa những tham số được liệt kê trong Bảng 9-2. Những trình điều khiển Lọc tự chúng có lẽ đã giải thích một số mật mã riêng trừ phi ý định-nếu chính xác viết mã, cái đó-đi qua tất cả những người cái khác xuống ngăn xếp. Thật ra, một chức năng liên lạc mà hiểu để xử lý IOCTL sẽ cư trú ở đâu đó như thế nào trong chồng trình điều khiển-đa số hợp lý trong trình điều khiển chức năng.
| 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 năng liên lạc thuộc về bộ xương cho những thao tác điều khiển (phép toán kiểm tra) giống như thế này:
#pragma PAGEDCODE
NTSTATUS DispatchControl(PDEVICE_OBJECT fdo, PIRP Irp)
{
1->
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);
}
1. Bạn có thể tin chắc được ghé thăm PASSIVE_LEVEL, như vậy ở đó không có lý do đặc biệt cho một sự liên lạc đơn giản vận hành để là bất cứ nơi đâu nhưng đánh số trang kí ức.
2. Vài sự phát biểu tiếp theo rút mã chức năng và những kích thước vùng đệm từ liên hiệp những tham số trong chồng vào/ra. Bạn thường cần những giá trị này không có vấn đề IOCTL đặc biệt nào mà bạn xử lý, vì vậy Tôi luôn luôn tìm thấy dễ dàng hơn những sự phát biểu này trong chức năng
3. Đây là nơi bạn sáng tạo bài tập của mình bằng việc chèn những nhãn trường hợp (cho) thao tác IOCTL khác nhau hỗ trợ bạn..
4. Đây là một ý tưởng tốt để trả lại một tình trạng viết mã liệu đầy ý nghĩa nếu bạn được đưa cho một IOCTL