Я работаю с устройством WinCE, которое имеет драйвер радиоуправления, написанный для него в MFC. В коде для GUI Radio я вижу функцию Deviceiocontrol с вызовом определенного IOCTL. Тем не менее, я не могу отслеживать конкретный фрагмент кода, вызываемый этой функцией. Может ли кто-нибудь сказать мне, как работает Deviceiocontrol?Отслеживать функцию, реализованную DeviceioControl
ответ
DeviceIoControl обращается к драйверу устройства с помощью дескриптора файла. Вы должны использовать отладчик ядра, если хотите войти в сам драйвер устройства.
Ручка файла представляет собой объект ядра, который состоит из структуры DEVICE_OBJECT, которая содержит таблицу функций. В этой таблице по индексу IRP_MJ_DEVICE_CONTROL драйвер устанавливает свою функцию дескриптора. Затем функция вызывается с параметрами управления io, которые упаковываются в IRP.
У вас есть исходный код для драйвера, на который отправлен IOCTL?
Вы передаете дескриптор DeviceIoControl
- ручка открывается по вызову CreateFile(L"XXX#:",...)
- XXX является префиксом драйвера, установленным в реестре. и # - индекс, который драйвер дает во время загрузки (также может быть установлен в реестре).
Чтобы просмотреть функциональность, выполняемую, выполните поиск IOCTL, отправленного в DeviceIoControl
в исходный код драйвера. Вы найдете его в реализации драйвера XXX_IoControl
.
- 1. Как вызвать реализованную функцию интерфейса
- 2. NullPointerException при попытке протестировать реализованную функцию Bluetooth
- 3. using DeviceIoControl with HiD
- 4. C++ Неопределенная ссылка на функцию, реализованную и запрограммированную в коде
- 5. Добавить Java-реализованную функцию в глобальную область Nashorn
- 6. C++ DLL, вызывающая функцию, реализованную в приложении-потребителе
- 7. Как отслеживать функцию javascript?
- 8. scipy.optimize.minimize отслеживать целевую функцию
- 9. Ошибка DeviceIoControl 1 некорректная функция
- 10. DeviceIoControl, передавая Int водителю
- 11. DeviceIoControl возвращения ложной
- 12. Параметры Pinvoke DeviceIoControl
- 13. Освободите память, выделенную DeviceIoControl
- 14. DeviceIoControl() возвращал данные означающие
- 15. DeviceIOControl() дает ошибку 50
- 16. DeviceIoControl возвращает ошибку 24
- 17. DeviceIoControl с IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS - C#
- 18. Как перенести DeviceIOControl в ioctl?
- 19. C++: отслеживать функцию времени называется
- 20. Отслеживать функцию «трижды» - абстракция функции
- 21. deviceiocontrol и вопрос размера диска
- 22. Ошибка DeviceIoControl 87 для OID_802_11_BSSID_LIST
- 23. Как вызвать код DeviceIOControl асинхронно?
- 24. Calling DeviceIoControl async в ядре
- 25. отслеживать, сколько памяти распределено за функцию
- 26. Как отслеживать экспортированную функцию по умолчанию
- 27. Как отслеживать каждую функцию в моем проекте
- 28. Как отслеживать анонимную функцию с помощью Jasmine
- 29. Как отслеживать функцию вызова в C?
- 30. Как использовать функцию, реализованную в asm из * .cpp-файла, в VisualDsp ++ 5, для Blackfin BF537?
Thankyou! Боюсь, я не знаю, как использовать отладчик ядра. Я вижу код для Radio Manager, и я считаю, что функция RadioManager_IOControl (контекст Rmgr *, IOCTL _..., BYTE * pInBuffer, DWORD inSize, BYTE * pOutBuffer, DWORD outSize, DWORD * pOutSize) (в драйвере радиосвязи) что называется deviceiocontrol. Моя проблема в том, что deviceiocontrol имеет дескриптор Rmgr в своем списке аргументов, в то время как RadioManager_IOControl драйвера устройства имеет указатель на структуру Rmgr в своем списке аргументов. Я не могу отслеживать, как эта структура заполняется. – ame
'Rmgr *' - это дескриптор устройства, который вы передаете 'DeviceIoControl'. Этот дескриптор заполняется, когда вы вызываете 'CreateFile'. Точный способ ее популяции - это драйвер/реализация. Он может быть заполнен каждый раз, когда вызывается XXX_Open вашего драйвера, и он может быть заполнен во время XXX_Init драйвера, и это может быть просто фиктивный дескриптор, который возвращает драйвер. Специфический драйвер. – Shaihi