Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Хелп. Блокировка LPT и COM порта.  (Прочитано 41995 раз)
0 Пользователей и 1 Гость смотрят эту тему.
good3p
Гость
« : 09-05-2007 09:20 » 

задание в том, чтобы переделать один из стандартных драйверов. например из примера в ДДК (kernel\parport). (кстати COM порта есть пример в ДДК? =) 

моя задача в создании приложения способного, по команде пользователя закрывать для всех приложений доступ к LPT и COM порту. и только с помощью этого приложения можно вернуть порты в нормальное, доступное состояние.

хочу подкрутить стандартный драйвер так, чтобы у него был флаг, который я могу менять, и только я. но где и что править? и вообще какой самый простой способ посоветует?
(п.с. задание не в написании драйвера, в поправке, либо в хитрости. по идее выход должен быть относительно простой. написать драйвер мне бы никто не доверил=))

заранее спасибо!

Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 09-05-2007 10:37 » 

кстати COM порта есть пример в ДДК?

Есть - см. serial

Про остальное... ну дык для одного драйвера ты это сможешь сделать. А если например принтер свои драйверы установит? Хм...

Может всё-таки в "Драйверы" пренести? Там тебе скорей помогут.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
good3p
Гость
« Ответ #2 : 09-05-2007 10:47 » 

насчет переноса в тему "драйверы" я не против. но это ужу пусть администратор делает, не хочу дублировать темы, еще по шапке попадет)

да. если принтер устновит свои дрова, то облом. я то и хочу решить эту проблему вообще не затрагивая драйвера. в любом случае должен быть способ отключить порты...

(п.с. мне тут советовали... вызовом какойто функции можно отключить (приостановить) работу текущего драйвера. каким образом я вообще могу это сделать?)

спасибо!
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 09-05-2007 11:22 » 

насчет переноса в тему "драйверы" я не против. но это ужу пусть администратор делает, не хочу дублировать темы, еще по шапке попадет)

А всё-равно по шапке надаёт. Тк ты их уже наплодил. Чего ж теперь плакати?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 09-05-2007 12:45 » 

хм... написать свои parport.sys и serial.sys?
вроде оба примера есть в DDK. попробуй скомпилить и подменить существующие)
если все пройдет гладко, что вообще не факт, но вдруг?... то вписать туда две блокировки - не проблемно)

второй вариант, пишешь приложение которое переодически вызывает сущетсвующий драйвер и пишет туда мусор) - какой мусор можно писать чтобы нарушить работу порта - можешь по IOCTL этих драйверов определить)

третий вариант... пишешь приложение которое напросто отключает и убивает эти два драйвера)
последнее - самое простое. но в любом случае важнее вопрос защиты, чтобы пользователь не смог восстановить работоспособность... простое решение - отнять у него права администратора и т.д.

кстати вопрос: на уровне этих прав - не проще ли сделать блокировку?

PS гы. найди оба драйвера в C:\WINDOWS\system32\drivers
и отбери у пользователей доступ к ним))) и у системы... короче сам поиграйся найстройками)
это вкладка "безопасность" и там дальше кнопка "дополнительно"
PPS ток не перестарайся)
« Последнее редактирование: 09-05-2007 13:01 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 09-05-2007 13:02 » 

Из DDK? Пройдёт. Я такое с serial уже делал. Подгонял для протокола Olivetti принтера.

Да вот только поможет ли для решения поставленной задачи? А ежели вместо serial.sys другой драйвер будет установлен и обращение к порту пойдёт через него? Я бы тоже посоветовал с правами поиграться. Хотя конечно недостаток - ты сам должен быть админом.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
zubr
Гость
« Ответ #6 : 09-05-2007 17:11 » 

Ну в принципе этот вопрос можно решить вообще не влезая в режим ядра. Перехватывать функцию ZwCreateFile (можно в ядре, а можно и на пользовательском уровне). В любом случае обращение к портам ввода-вывода, да пожалуй и ко всем устройствам (реальным и виртуальным) происходит через эту функцию.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 10-05-2007 06:40 » 

zubr,
вы несовсем правы) из своего драйвера я могу обращатся к любым портам без CreateFile.
пользователь может использовать сторонний драйвер экспортирующий данные функции(таких в нете - лопатой греби), соответственно и имя у него может быть произвольное - не отследить.

практически, отладчик уровня ядра(а ля SoftIce) может перехватывать обращения к портам I/O из любого ринга. это, думаю, самый надежный способ блокировки... правда как написать подобное - увы пока не знаю... скорее всего реализовано через аппаратную генерацию исключения при обращении к портам... короче сильно не копался - не знаю)

Джон,
а те два примера из DDK - это исходные коды того драйвера который реально стоит? или "не совсем"?)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
good3p
Гость
« Ответ #8 : 10-05-2007 08:20 » 

ууух. во первых огромное спасибо за ответы! Улыбаюсь)
на всякий случай напишу задание...
31. Разработать программу, которая позволяет заблокировать работу периферийных устройств LPT и COM по команде пользователя.

хм... написать свои parport.sys и serial.sys?
вроде оба примера есть в DDK. попробуй скомпилить и подменить существующие)
если все пройдет гладко, что вообще не факт, но вдруг?... то вписать туда две блокировки - не проблемно)
дело в том что я не понимаю как править драйвер (это первый испуганный опыт с драйверами), для меня это трудновато еще...куда эти блокировки вписывать? и как быть если какоето устройство при подключении , например, устанавливает свои PnP драйвера и пользуется уже ими? ведь начнёт работать?

второ вариант, пишешь приложение которое переодически вызывает сущетсвующий драйвер и пишет туда мусор) - какой мусор можно писать чтобы нарушить работу порта - можешь по IOCTL этих драйверов определить)
мне вот какой вариант нравится : http://www.pcports.ru/articles/4.php (никак не подумайте , что это реклама)
по этой статейке (их там кстати несколько) легко подключиться к порту и писать в него числа (можно подключить диоды в LPT и сделать мини гирлянду, в общем веселее)) я вот и думаю может ли это решить мою задачу? ведь когда порт захвачен мной и я с ним работаю никто другой не может с ним работать? или я не прав?
или надо писать туда определенный мусор (можно поподробнее) ? и тогда что такое IOCTL драйверов?

третий вариант... пишешь приложение которое напросто отключает и убивает эти два драйвера)
этот вариант мне нравится. только можно тоже чуть подробнее и желательно с примером или ссылочкой?

последнее - самое простое. но в любом случае важнее вопрос защиты, чтобы пользователь не смог восстановить работоспособность... простое решение - отнять у него права администратора и т.д.
кстати вопрос: на уровне этих прав - не проще ли сделать блокировку?

PS гы. найди оба драйвера в C:\WINDOWS\system32\drivers
и отбери у пользователей доступ к ним))) и у системы... короче сам поиграйся найстройками)
это вкладка "безопасность" и там дальше кнопка "дополнительно"
PPS ток не перестарайся)
скорее к решению моей задачи этот способ не подходит...ведь это должно делаться программно...

у меня еще мысля появилась (наверное думаете - неужели такое может быть? да, может))) может можно как-то тупо отключить питание этих портов?

Спасибо!!
« Последнее редактирование: 10-05-2007 08:22 от good3p » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 10-05-2007 09:11 » 

Джон, а те два примера из DDK - это исходные коды того драйвера который реально стоит? или "не совсем"?)

Ну по идее нужно просто сравнить исходные коды примера и "того, который реально стоит". Улыбаюсь) Только где их взять?

Серьёзно.

Про параллельный врать не буду. А с СОМ было так, ребята из Wincor (тогда они были ещё Siemens) откапали какие-то принтеры Olivetti с интересным протоколом - строб шёл на каждый байт. Они его назвали HARDWARE UNBUFFERED. А мы как раз для них прогу делали для тестирования всего ихнего железа. Ну мы вначале это на уровне АПИ ф-ций сделали, но работало очень медленно. Ну мы потыкались - собственный драйвер с нуля делать было очень дорого. В общем я взял serial из DDK, добавил в него необходимые ф-ции, которые считывли байт по прерыванию, компильнул. Режим включается/выключается через нормальную DeviceIoControl. При инсталляции "наш" serial.sys заменяет стандартный системный виндовский драйвер. Единственное условие - платформа w2k, XP (теоретически сервер 2003 - DDK было для этих платформ, но мы на нём не проверяли - он не стоял в списке поддерживаемых платформ).
Ну и было это в 2002м. Пока за пять лет никто не жаловался. А клиентов у них дай Бог каждому. Ага Так что "Пейте смело. И кильками в наш век отравиться гораздо легче." (с)

good3p, После твоего последнего предложения так и хочется посоветовать тебе разорвать контакты на материнской плате, впаять туда реллюху и управлять ей. Улыбаюсь)

А если серьёзно, то если  у тебя задание такое, а не просто "решить задачу ЛЮБЫМ способом", то сначала надо узнать побольше о тебе. Где учишься? На кого? Из какой области задание? Какой уровень? Какого решения от тебя ждут? От этого будет зависить выбор "лечения".
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 10-05-2007 09:28 » 

good3p,
в обратном порядке отвечаю:
сразу с последнего, снять питание с портов - можно только аппаратно)) хотя... не помню можно попробовать контроллер распрограммировать, но это тоже не очень просто.

предпоследнее. программно - это реализуемо. запускаешь свою программу с правами администратора, а пользователям таких прав не даешь. ну... тоже гемор но с драйверами копаться не надо.
"приложение которое напросто отключает и убивает эти два драйвера" - это из той же оперы на самом деле. потому что убить драйвера мало, надо еще не дать возможности их восстановить)
со ссылочками пожалуй не помогу- искать надо, времени нет(

насчет нарушить работу записывая мусор - хм. не во всех случаях сработает на самом деле. и коряво это как-то...

далее.... монопольно ты порт захватить штатными средствами... пожалуй и не сможешь) на самом деле это асемблерная команда а-ля"out(или in) addres, data"...
 
и все таки... попробуйте поискать что есть их похожего софта
http://www.protect-me.com/ru/dl/
http://webrusinfo.ru/lincs.php?ID=38 - описание ее же.
http://rew.ru/soft/4/48.html
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
zubr
Гость
« Ответ #11 : 10-05-2007 09:46 » 

Цитата
у меня еще мысля появилась (наверное думаете - неужели такое может быть? да, может))) может можно как-то тупо отключить питание этих портов?
Не советую, спалишь порты нахрен. Ну COM еще ладно, а LPT - понакладнее будет.
Цитата
zubr,
вы несовсем правы) из своего драйвера я могу обращатся к любым портам без CreateFile.
пользователь может использовать сторонний драйвер экспортирующий данные функции(таких в нете - лопатой греби), соответственно и имя у него может быть произвольное - не отследить.
Согласен, с именами как-то упустил.

Самым красивым видится решение - получить указатель на AttachedDevice родного драйвера и прикрутить к нему драйвер-фильтр. Но это сложновато, особенно для начинающего.
Есть неплохая программка WinDriver, позволяющая генерить драйвера. Я правда не помню, можно ли с помощью ее драйвер-фильтр сотворить (давно ею не пользовался), но посмотреть в ее направление, думаю, имеет смысл.
Записан
good3p
Гость
« Ответ #12 : 10-05-2007 11:43 » 

учусь я на программиста)) 3 курс. задание по предмету "системное программирование". не подвезло вот с темой и с преподавателем. слишком жесть он дал. я с ним говорил он дал три совета:
1. сказал что драйвер я сам не напишу, но можно попробовать "подкрутить" стандартный дравер-А, так чтобы только я мог его выключать и только я мог его включать.
2. но тут возникает проблема что другие устройства буду пытаться включать этот драйвер-А, и поэтому можно написать драйвер-Х, который будет отлавливать все запросы других приложений на включение драйвера-А.
3. написание драйвера фильтра.
4. типа ну уксперементируйте может вы найдете способ получше.

вот и вешаюсь теперь, так как я это не в силах сделать, даже за месяцы...я не один правда такой) как-то будем выкручиваться, но пока незнаю как)

самый простой способ - самому занять порт какими либо действиями. впринципе это тоже решение задачи. правда там кода то не больше 50 строк. это уж совсем не солидно.

думаю самое целесообразное будет копать в направлении драйвера-фильтра. но как и что ? тут опускаются руки. если в папке \src\kernel\parport лежит 61 файл и весят они мегебайт)))) что тут править чтобы сделать фильтр. в общем товарищи я в печали...

Записан
Vlaor
Гость
« Ответ #13 : 10-05-2007 18:43 » 

Вообще можно попробовать производить инициализацию драйвера по к.л. управляющему коду через DeviceIoControl. Тогда сторонние программы уж точно не смогут нечего сделать. Улыбаюсь
Записан
good3p
Гость
« Ответ #14 : 10-05-2007 20:37 » 

Вообще можно попробовать производить инициализацию драйвера по к.л. управляющему коду через DeviceIoControl. Тогда сторонние программы уж точно не смогут нечего сделать. Улыбаюсь

а можно чуть подробнее?
« Последнее редактирование: 10-05-2007 21:49 от good3p » Записан
good3p
Гость
« Ответ #15 : 11-05-2007 18:20 » 

смотрю запустился драйвер или нет в MyComputer/Manage/ServicesAndApplications/Services и его там нету
а если смотрю в DeviceTree то он есть. это нормально?
« Последнее редактирование: 11-05-2007 21:25 от good3p » Записан
Vlaor
Гость
« Ответ #16 : 12-05-2007 09:33 » 

Можно например добавить к.л. переменную проверяемую при попытке обращения к порту сторонних драйверов. Если True то доступ есть, false того...
А по управляющему коду менять значение. Но тогда необходимо соответствующим образом изменить функции чтения/записи, обработки прерываний.
Теоретически должно сработать...
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 12-05-2007 16:35 » 

Vlaor,
практически - тоже, сработает)
если на "кул-хацкеров" не расчитывать)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #18 : 12-05-2007 19:08 » 

"Меня опять терзают смутные сомнения" (с) А как быть в том случае, если пользователь УЖЕ ползуется поротом? Например я захватил через стандартный драйвер СОМ1. Как у меня его отобрать?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Vlaor
Гость
« Ответ #19 : 13-05-2007 09:40 » 

Джон,
Это еще один довод в пользу драйвера, а не пользовательского приложения.
Забавно выйдет если неожиданно по ходу работы отрубить порт. Что вообще будет? Скорее всего все приложения выдадут unknown error или типа того. Улыбаюсь
практически - тоже, сработает)
если на "кул-хацкеров" не расчитывать)
А как раз на 3 курсе все мы "кул-хацкеры"!!!
« Последнее редактирование: 13-05-2007 09:42 от Vlaor » Записан
good3p
Гость
« Ответ #20 : 13-05-2007 20:22 » 

как сделать так чтобы драйвер один или несколько раз бибикнул писиспикером?
ато хочу наверняка знать достучался я до своего драйвера или нет. и как еще можно кроме писиспикера начинающему "услышать" драйвер.

но пока застопорился вот где:
Код:
CreateFile("\\\\.\\myDrv",  
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
  cannot convert parameter 1 from 'const char [10]' to 'LPCWSTR'
как же быть?Улыбаюсь


спасибо!


« Последнее редактирование: 13-05-2007 23:44 от good3p » Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 14-05-2007 08:45 » 

"cannot convert parameter 1 from 'const char [10]' to 'LPCWSTR'"
- хм, как вам это удалось???)))))
у меня тот же код работает...


да, кстати FILE_SHARE помоему не обязательно.. но не помню уже точно)
hDrv = CreateFile(  lpNameDriver,
         GENERIC_READ | GENERIC_WRITE,
         0,NULL,OPEN_EXISTING,0,NULL);
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #22 : 14-05-2007 08:49 » 

У вас настройки проекта разные. good3p комппилит в UNICODE, а Ochkarik в ANSI

good3p, сделай так

_T("\\\\.\\myDrv")
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
good3p
Гость
« Ответ #23 : 14-05-2007 16:12 » 

#define IOCTL_SEND_BYTE_TO_USER CTL_CODE(\FILE_DEVICE_UNKNOWN, 0x705, METHOD_BUFFERED, FILE_ANY_ACCESS)
...
  unsigned long ioctlCode;
  ioctlCode=IOCTL_SEND_BYTE_TO_USER;   ---- error C2017: illegal escape sequence

это как? ))


и как бибикнуть писиспикером в коде драйвера?
« Последнее редактирование: 14-05-2007 19:02 от good3p » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #24 : 15-05-2007 09:14 » 

Вот так надо
#define IOCTL_SEND_BYTE_TO_USER CTL_CODE(FILE_DEVICE_UNKNOWN, 0x705, METHOD_BUFFERED, FILE_ANY_ACCESS)

У тебя бэкслэш перед F в скобках был.

С него начинаютс эскейп-последовательности

как бибикнуть не знаю.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
good3p
Гость
« Ответ #25 : 15-05-2007 11:27 » 

спасибо. в общем драйвер загружается и могу с ним общаться через CTL_КОДЫ. теперь ищу инфу как драйверу стать фильтром (копаю в сторону подключения моего драйвера в стеке драйверов над драйвером паралПорта или комПорта, чтобы перехватывать ИРП пакеты идущие от приложений к драйверам), как начну прочитанное реализовывать, посыпятся вопросы. держитесь))

п.с.
и как бибикнуть писиспикером в коде драйвера?)
Записан
Vlaor
Гость
« Ответ #26 : 15-05-2007 15:56 » 

good3p,
Насколько я знаю доступ к динамику реализован через порт 0х61. Если конечно в сверхсовремменных архитектурах его не отменили. Используем биты 0,1.
Для ВКЛ их устанавливаем в 1.
Для ВЫКЛ сбрасываем.
Главное чтобы сам динамик был подключен!!! Улыбаюсь
Записан
good3p
Гость
« Ответ #27 : 17-05-2007 21:38 » 

в общем возникли у меня сомнения по поводу
[NTSTATUS loGetDeviceObjectPointer(
IN PUNICODE_STRING ObjectName,
IN ACCESS_MASK DesiredAccess,
OUT PFILE_OBJECT FileObject,
OUT PDEVICE_OBJECT DeviceObjct);] FileObject и DeviceObjct  возвращает значения  например -2141716481.  по моему это лажа. гдебы посмотреть пример вызова этой функции и какое точно ObjectName в нее подавать?

и еще вопрос по [PDEVICE_OBJECT loAttachDeviceToDeviceStack ( IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice);]
как я понял в SourceDevice надо передавать полученный DeviceObjct из верхней ф-и, а в TargetDevice передавать указатель на сам фильтр. как фильтру получить указатель на себя? таким же вызовом  loGetDeviceObjectPointer ?

буду рад советам и поправкам. спасибо!

п.с.
и есть ли возможность как либо получить код ошибки при неудачном вызове функции?
« Последнее редактирование: 17-05-2007 21:39 от good3p » Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 21-05-2007 09:09 » 

позавчерась приобрел книженцию Уолтера Они, Использование Microsoft Windows Driver Model. издание второе. попробуй найти, оч неплохая книженция) хм. могу от нее хелпы на английском выложить, если их еще нет. хелпы и примеры....
посмотрел - уже лежит на сайте https://club.shelek.ru/download.php?id=9. там был пример драйвера фильтра. думаю должен быть расписан по полочкам. правда на английском)

по вызову - посмотри что за статус тебе возвращается.
указатель на себя ты получаешь когда себя и создаешь:     
status = IoCreateDevice(    DriverObject,
                sizeof(DEVICE_EXTENSION_MY),
                &uniNtDeviceName,       //имя
                FILE_DEVICE_UNKNOWN,    //тип
                0,                      //FILE_AUTOGENERATED_DEVICE_NAME,   //характеристики
                FALSE,          //эксклюзивность процесса(толкьо один handle)
                &DeviceObject);
)))
PS
а код ошибки тебе как раз всегда возвращают) в статусе. допустимые варианты статуса расписаны в ддк на эту функцию
Return Value
IoGetDeviceObjectPointer can return one of the following NTSTATUS values:

STATUS_SUCCESS
STATUS_OBJECT_TYPE_MISMATCH
STATUS_INVALID_PARAMETER
STATUS_PRIVILEGE_NOT_HELD
STATUS_INSUFFICIENT_RESOURCES
STATUS_OBJECT_NAME_INVALID
« Последнее редактирование: 21-05-2007 09:12 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
good3p
Гость
« Ответ #29 : 21-05-2007 13:09 » 

УРА! Не может быть... С ума сойти...
в общем алярма)) работает!))
чего я добился : IoGetDeviceObjectPointer() - получаем ссылку на устройство.
IoAttachDeviceToDeviceStack () - "приделали" мой драйвер к устройству последним в стек. (работает с устройствами :
L"\\Device\\Beep"
L"\\Device\\ARP1394"             
L"\\Device\\smserial"
L"\\NTFS"...
вот. devicetree.exe дает наглядную картинку происшедшего - в конец дерева устройства поместился мой драйвер.
теперь собвственно вопрос :

какое имя носит устройсвто COM и LPT порт? (у меня нету LPT порта, но буду тестить где-нибудь на другой машине)
(если скажете что COM-serial, то у меня его нету. есть только smserial, но это модем...)
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines