Можно ли использовать функции Win API в драйвере WDM, в частности при обработке IOCTL кодов? Если это возможно, то что надо подключить к проекту ? Подключить windows.h не получается...
Спасибо.
ЗЫ. использую VC6++, NuMega Driver Studio 2.7
Re: использование Win32 API в драйвере
От:
Аноним
Дата:
07.07.03 13:17
Оценка:
Здравствуйте, OAM, Вы писали:
OAM> Можно ли использовать функции Win API в драйвере WDM, в частности при обработке IOCTL кодов? Если это возможно, то что надо подключить к проекту ? Подключить windows.h не получается... OAM>Спасибо. OAM>ЗЫ. использую VC6++, NuMega Driver Studio 2.7
Используй NT и ZW функции, их возможностей с головой хватает
Здравствуйте, OAM, Вы писали:
OAM> Можно ли использовать функции Win API в драйвере WDM, в частности при обработке IOCTL кодов? Если это возможно, то что надо подключить к проекту ? Подключить windows.h не получается...
напрямую вызывать код пользовательского режима из ядра нельзя.
но есть способы (search for NT Insider article on www.OSR.com, key words: revert calls) вызвать Win32 код и получить его рез-т в драйвер, затем продолжить работу.
а что за такая задача, требующая именно вызова Win32 API (какого) ?
часть Win32 API просто имеет свои реализации в ядреб которые и реально являются Win32 API.
OAM>Спасибо. OAM>ЗЫ. использую VC6++, NuMega Driver Studio 2.7
... << RSDN@Home 1.1 alpha 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Valerio, Вы писали:
V>напрямую вызывать код пользовательского режима из ядра нельзя.
V>но есть способы (search for NT Insider article on www.OSR.com, key words: revert calls) вызвать Win32 код и получить его рез-т в драйвер, затем продолжить работу.
V>а что за такая задача, требующая именно вызова Win32 API (какого) ? V>часть Win32 API просто имеет свои реализации в ядреб которые и реально являются Win32 API.
Спасибо за информацию и ссылку, необходимости в использовании WinAPI нет, просто было интересно, возможно ли это (а конкретно вызов GetTickCount и GetSystemTime .
OAM>Спасибо за информацию и ссылку, необходимости в использовании WinAPI нет, просто было > интересно, возможно ли это (а конкретно вызов GetTickCount и GetSystemTime .
Удалось узнать как получить системное время в драйвере?
V>но есть способы (search for NT Insider article on www.OSR.com, >key words: revert calls) вызвать Win32 код и получить его рез-т в драйвер, затем продолжить >работу.
Поиск не не нашел ничего на revert calls...
Можно ссылочку на статью?
Интересует возможность вызова функции из внешней длл.
Догадываюсь что это нереально, но все-же...
И еще вопрос:
Из описания KeQuerySystemTime:
System time is typically updated approximately every ten milliseconds.
Мне нужна точность до 1ms. Может есть идеи?
Здравствуйте, YuriyAG, Вы писали:
V>>но есть способы (search for NT Insider article on www.OSR.com, >key words: revert calls) вызвать Win32 код и получить его рез-т в драйвер, затем продолжить >работу.
YAG>Поиск не не нашел ничего на revert calls... :( YAG>Можно ссылочку на статью?
YAG>Интересует возможность вызова функции из внешней длл.
Если это специально написанная kernel-mode dll, то можно. Поиск google groups на "kernel-mode DLL", "SystemLoadImage" поможет.
Здравствуйте, YuriyAG, Вы писали:
V>>но есть способы (search for NT Insider article on www.OSR.com, >key words: revert calls) вызвать Win32 код и получить его рез-т в драйвер, затем продолжить >работу. YAG>Поиск не не нашел ничего на revert calls...
пардон, запамятовал
it should be inverted call, self-evident!
YAG>Можно ссылочку на статью? Kernel: Calling User Mode — Using the Inverted Call Model
YAG>Интересует возможность вызова функции из внешней длл. YAG>Догадываюсь что это нереально, но все-же...
реально, если это Kernel-mode DLL
драйвера как раз и являются такими библиотеками обычно
multi-tier driver model тоже может быть полезна, если хочется иметь модульность в ядре
надо смотреть Creating Export Drivers в DDK/MSDN
еще есть ZwLoadDriver — документирована недавно (на ХР),
но на практике вроде есть пораньше.
YAG>И еще вопрос: YAG>Из описания KeQuerySystemTime: YAG>System time is typically updated approximately every ten milliseconds. YAG>Мне нужна точность до 1ms. Может есть идеи?
единственное, что меня поправили уже там — говорят СЕ вариант предпочтительнее Embedded, хотя когда несколько лет (около 7) назад я занимался этим вопросом МС говорил о том, что именно в Embedded линейке они будут реализовывать realtime ф-ть. правда тогда и по СЕ не было еще толком ничего ясно
главное что в НТ ядре этого пока не планируется
... << RSDN@Home 1.1 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Спасибо большое за ссылки,
буду изучать.
Что в NT с real-time туго я знаю, но уже поздно что-то менять — шэф проекта наобещал такую точность регистрации прихода данных. Хочу попробовать (допускается погрешность до 5мс), мне сейчас нужен источник времени. Внешняя DLL нужна как раз для этой цели — это DLL доступа к плате GPS.
Еще раз спасибо,
Юрий.
V>ZwSetTimerResolution
Не нашел в DDK.
Но наверное это все-же не тот вариант. Мне нужно именно системное время(астрономическое), но с обновлением раз в 1 мс
Здравствуйте, YuriyAG, Вы писали:
YAG>Спасибо большое за ссылки, YAG>буду изучать. YAG>Что в NT с real-time туго я знаю, но уже поздно что-то менять — шэф проекта наобещал такую точность регистрации прихода данных. Хочу попробовать (допускается погрешность до 5мс), мне сейчас нужен источник времени. Внешняя DLL нужна как раз для этой цели — это DLL доступа к плате GPS. YAG>Еще раз спасибо, YAG>Юрий.
в принципе 5мс можно попробовать получить с помощью multimedia timers (timeXxx from winmm.dll)
это довольно просто использовать в своих программах и быстро попробовать
но следует иметь ввиду все мои замечания — "небольшие" сбои раз в секунду\минуты\час\сутки (как повезет) вполне возможны
опять же смотря что за обработчики у Вас.
кстати это все в user mode и посему никаких kernel mode dll не нужно будет
... << RSDN@Home 1.1 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
V>в принципе 5мс можно попробовать получить с помощью multimedia timers (timeXxx from winmm.dll)
Спасибо,
это немного не то — мне нужно системное астрономическое время (чч:мм:сек.мсек)
Проблема что оно обновляется в НТ раз в 10мс...
Здравствуйте, YuriyAG, Вы писали:
V>>в принципе 5мс можно попробовать получить с помощью multimedia timers (timeXxx from winmm.dll) YAG>Спасибо, YAG>это немного не то — мне нужно системное астрономическое время (чч:мм:сек.мсек) YAG>Проблема что оно обновляется в НТ раз в 10мс...
вроде бы не проблема вычислить добавку к последнему астрономическому времени через RDTSC инструкцию современных процессоров?
... << RSDN@Home 1.1 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
YAG>>это немного не то — мне нужно системное астрономическое время (чч:мм:сек.мсек) YAG>>Проблема что оно обновляется в НТ раз в 10мс... V>вроде бы не проблема вычислить добавку к последнему астрономическому времени через RDTSC > инструкцию современных процессоров?
Слабо представляю себе как это сделать...
Раз время обновляется раз в 10мс, то для того что-бы получить нужную точность, нужно примерно следующее — создать свои собственные "часы" — те таймер, который будет тикать раз в 1мс, отследит момент обновления системных часов, и от этого момента отсчитывать тики или миллисекунды.... Громоздко как-то Попытаюсь связаться с фирмой поставляющей нам GPS-ы, может можно достучаться до карты GPS с драйвера уровня ядра.
Из-за ошибки менеджера будем превращать НТ в реал-тайм
V>>вроде бы не проблема вычислить добавку к последнему астрономическому времени через RDTSC >> инструкцию современных процессоров? YAG>Слабо представляю себе как это сделать...
можно попробовать получать кол-во тиков в мультимедийном (около 5мс +\- как повезет) обработчике и вычислять с доп точностью свое вн время? а про 10 мс забить или спрашивать скажем раз в секунду — для коррекции. плохо все это , согласен
YAG>Раз время обновляется раз в 10мс, то для того что-бы получить нужную точность, нужно примерно следующее — создать свои собственные "часы" — те таймер, который будет тикать раз в 1мс, отследит момент обновления системных часов, и от этого момента отсчитывать тики или миллисекунды.... Громоздко как-то Попытаюсь связаться с фирмой поставляющей нам GPS-ы, может можно достучаться до карты GPS с драйвера уровня ядра. YAG>Из-за ошибки менеджера будем превращать НТ в реал-тайм
может быть у этого менеджера первый проект с железом и ПО? тогда это стандартная ошибка
которая самая первая (и часто большая) — когда начинают разрабатывать софт в отрыве от железа (выбирают железо не думая о программной стороне и\или когда разработчики железа не советуются с разработчиками ПО).
... << RSDN@Home 1.1 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Valerio, Вы писали:
V>>>вроде бы не проблема вычислить добавку к последнему астрономическому времени через RDTSC >>> инструкцию современных процессоров? YAG>>Слабо представляю себе как это сделать...
еще гляньте related-топик
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
V>может быть у этого менеджера первый проект с железом и ПО? тогда это стандартная ошибка V>которая самая первая (и часто большая) — когда начинают разрабатывать софт в отрыве от железа >(выбирают железо не думая о программной стороне и\или когда разработчики железа не советуются > с разработчиками ПО).
Скорее невнимательность. Раньше вместо ПС использовался кусок железяки с какой-то версией Юникса. все это было как-то так неудобно и не современно.... зато с реал таймом.
А потом пересели на НТ. Стало все красиво и удобно, вот только в техзадании 1мс подчистить забыли