Проследить функцию, реализованную DeviceioControl - PullRequest
0 голосов
/ 21 апреля 2010

Я работаю с устройством WinCE, для которого в MFC написан драйвер менеджера радио. В коде Radio GUI я вижу функцию Deviceiocontrol с вызываемым конкретным IOCTL. Однако я не могу отследить конкретный фрагмент кода, вызываемый этой функцией. Может кто-нибудь сказать мне, как работает Deviceiocontrol?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2010

DeviceIoControl вызывает драйвер устройства с помощью дескриптора файла. Вы должны использовать отладчик ядра, если хотите войти в сам драйвер устройства.

Файловый дескриптор представляет объект ядра, состоящий из структуры DEVICE_OBJECT, которая содержит таблицу функций. В этой таблице по индексу IRP_MJ_DEVICE_CONTROL драйвер устанавливает свою функцию дескриптора. Затем функция вызывается с параметрами управления io, которые упакованы в IRP.

0 голосов
/ 28 апреля 2010

У вас есть исходный код драйвера, на который отправляется IOCTL?
Вы передаете дескриптор DeviceIoControl - дескриптор открывается с помощью вызова к CreateFile(L"XXX#:",...) - XXX является префиксом драйвера, установленным в реестре. и # - индекс, который драйвер дает во время загрузки (также может быть задан в реестре).
Чтобы увидеть выполняемые функции, выполните поиск IOCTL, который вы отправляете на DeviceIoControl в исходном коде драйвера. Вы найдете это в реализации драйвера XXX_IoControl.

...