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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 3 [Все]   Вниз
  Печать  
Автор Тема: PCI  (Прочитано 55836 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Juggernaut
Гость
PCI
« : 18-07-2003 12:56 » 

Тут такой вопрос возник.

Существует самопальная PCI плата.

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

Взял пример из книжки "Недокументированные возможности Windows 2000". Потрещал спикером через драйвер.

2. Вопрос! Можно ли такой драйвер(режима ядра) использовать для управления PCI платой.

И последнее.
3. Как по VendorID и DeviceID определить установлена ли такая плата в машине или нет. Т.е. есть ли какой короткий способ перечислить все установленные платы в системе и по вендору определить наличие устройства.
Спас ибо
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 18-07-2003 13:45 » 

Цитата

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


Это должен быть WDM драйвер, с грамотно написанной ф-цией AddDevice.

Цитата

2. Вопрос! Можно ли такой драйвер(режима ядра) использовать для управления PCI платой.


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

Цитата

3. Как по VendorID и DeviceID определить установлена ли такая плата в машине или нет. Т.е. есть ли какой короткий способ перечислить все установленные платы в системе и по вендору определить наличие устройства.


Да можно через ф-ции SetupDi... из пользовательского приложения, или прямым перебором всех PDO из драйвера.
Записан
maaaaaad
Гость
PCI
« Ответ #2 : 18-07-2003 22:45 » 

Тут такой вопрос возник.

Существует самопальная PCI плата.

Цитата

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

 
вопрос как писать, как читать куда, откуда и как -)

Цитата

И последнее.
3. Как по VendorID и DeviceID определить установлена ли такая плата в машине или нет. Т.е. есть ли какой короткий способ перечислить все установленные платы в системе и по вендору определить наличие устройства.
Спас ибо


В драйвере? Или вообще?
Для первого случая мона почитать конфиги плат по слотам, определить вендора девид - разплюнуть. Но наверняка есть и спецфункции типа поиска.....и наверняка в разделе HAL DDK, я этим особо не занимался..

Для второго варианта существует PCI BIOS (крайне не рекомендую использовать PCI BIOS шлюзы в зашищенном режиме (на своем панцире это все испытал-))))) так через прерывание под эмуляцией еще мона....кроме того мона кинуть щупальца на клаву и поискать PCI kit от ace ....... там где то валялать dpcitool.



you see me coming from a mile off,
once again ignite the skyline,
she's gonna be pretty on money,
just like your royal family,
this time there could be no funeral,
oh baby, can you feel me?
we love rohypnol, she got rohypnol,
we take rohypnol, just forget it all.
Записан
Juggernaut
Гость
PCI
« Ответ #3 : 19-07-2003 06:49 » 

Цитата

Это должен быть WDM драйвер

Где можно узнать про драйвера такого типа?
Где взять небольшой примерчик с минимальным набором функций?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #4 : 19-07-2003 08:18 » 

Цитата

Где можно узнать про драйвера такого типа?
Где взять небольшой примерчик с минимальным набором функций?

WinDDK
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #5 : 19-07-2003 08:59 » 

Да я в курсе.
Но условие минимальности не выполняется. Я конечно могбы взять пример от сетевой PCI карты. Чтобы разобраться в том что там написано потребуется как минимум пара месяцев. Хотелось бы нечто покороче.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #6 : 19-07-2003 10:21 » 

Посмотри http://club.shelek.ru - последнюю статью по созданию собственного драйвера с нуля.
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #7 : 19-07-2003 10:59 » 

Я не допонимаю. В системе 2000 есть драйвера с расширением sys. Как определить к какому типу относится каждый драйвер. Такие расширения есть и в досе и у 98 форточек. Так вот как определить что драйвер это именно wdm а не драйвер режима ядра?

Далее по статье.
DriverEntry присутствует, создание символической ссылки присутствует. Так что начало точь в точь что и в книжке недок...2000...! Так в чем отличие то?
На этот вопрос я так ответа и не получил.


PS:
Примерно такой драйвер и был мною первоначально сделан. Вот только DeviceIoControl не доконца реализован. Драйвер успешно грузится и выгружается. При запуске трещит динамиком(для визуализации что он все таки работает). Ну и в чем отличие такой вот ерунды от WDM?
Записан
Juggernaut
Гость
PCI
« Ответ #8 : 19-07-2003 12:50 » 

Уважаемый Гром. Не могли бы вы посоветовать какую нибудь литературу или книжки , доступные в сети, по написанию драйверов под Win2000. Подойдет или русский или английский язык. Хотелось бы разобраться с этими дровами раз и навсегда.
Записан
Anonymous
Гость
PCI
« Ответ #9 : 19-07-2003 18:16 » 

Единственная полная и исчерпывающая книга - это W.Oney "Programming WDM"- есть на этом сайте, качай 2 издание. В этой книге много есть- это как букварь. Примеров к ней нет, есть только к первому изданию. В этой книге и в примерах к ней есть примеры драйверов PCI устройств.
 Также на сайте есть справочник по программированию драйверов "Win200 drivers handbook", тоже хорошая книга.

Книги смотри вот тут
http://www.shelek.com/club/modules.php?op=modload&name=Web_Links&file=index&req=viewlink&cid=5
Записан
SlavaI
Главный специалист

ru
Offline Offline

PCI
« Ответ #10 : 19-07-2003 18:18 » 

Предыдущее сообщение мое. Забыл залогиниться.
Записан
Juggernaut
Гость
PCI
« Ответ #11 : 19-07-2003 18:34 » 

Спасибо. Попробую скачать. На работе пытался не качается. Мож flashget глючный?
Попробовал. Качается только в один поток. У остальных сплошные ошибки и ретрейны. Интересно это так и должно быть? Такое впечатление что сервак позволяет тянуть что то одно за раз.
Записан
SlavaI
Главный специалист

ru
Offline Offline

PCI
« Ответ #12 : 19-07-2003 19:00 » 

Да так и есть. Там Grom ограничений много поставил, это как я понял его сервак, личный. Если что к нему обращайся.
Записан
Juggernaut
Гость
PCI
« Ответ #13 : 19-07-2003 20:02 » 

Действительно. По одному одним потоком качается.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #14 : 19-07-2003 20:27 » 

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

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

А этот трафик я оплачиваю полюбому и он не ограничен.

Так что ребята - если есть у кого халявный быстрый ftp буду рад позаимствовать идею, а пока - ограничение с одного компа 1 файл в один поток, макс скорость 8кб пер секунд.

Если не устраивает - то можно в принципе поискать в другом месте, вопрос в том, что те вещи (все DDK) плюс куча книг и куча файлов - которые все пополняются и пополняются - нигде не найти...
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #15 : 20-07-2003 04:52 » 

Да я понимаю. У нас много русскоязычных ресурсов построено на альтруизме владельцев сайтов, или от широты души. Например мы с товарищем на bcbdev.ru MSDN переводим. Денег от этого тоже не густо. Точнее полный ноль.

А файлы можно ведь попробовать выложитьна *.by.ru. У меня там вроде как старый сайтец валяется. Сто метров места есть. за bcbdev.ru я не плачу, по этому туда выложить файлы не могу.

Все устраивает. Как говорится говорим спасибо и за то что есть. Дареному коню в зубы не смотрят.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #16 : 20-07-2003 07:09 » 

DDK весят мег по 300 и больше... Никакой by.ru не подойдет...  Так больше нельзя... так что будем продолжать то что есть...
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #17 : 20-07-2003 08:06 » 

win2000 DDK =70 Mb
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #18 : 20-07-2003 12:11 » 

Цитата

DDK весят

Имелись ввиду все
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #19 : 20-07-2003 14:17 » 

терь понял
Записан
maaaaaad
Гость
PCI
« Ответ #20 : 21-07-2003 23:59 » 

по литературе могу порекомендовать www.reversing.net - одно из мест, на котором присутствует многа интересных вещей.....
Записан
Juggernaut
Гость
PCI
« Ответ #21 : 22-07-2003 07:10 » 

По поводу скачек книг.
Ты бы Гром сделал феню чтобы менеджеры закачек могли определять размер файла. Я уже 3й день качаю одно и тоже файло. Связь рвется, файл начинает качаться заново. И так по кругу. Мне то что. Но вот твой комп это реально может напрягать.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #22 : 22-07-2003 07:51 » 

Juggernaut, проверяй у себя - докачка поддерживается.
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #23 : 22-07-2003 10:09 » 

Странно. Я качаю файл сode.zip. Качаю уже четвертый день. У меня flashget пишет что размер файла неизвестен  и при обрыве связи начинает качать заново. Интересно может это происходить из за прокси сервера. Он у меня тупой до ужаса. Для выхода в нет используется NTLM authorization Proxy Server. Так как через основную прокси без авторизации не пролезть. Flash работает через него.

PS: Я конечно понимаю что это наглость. Но! Гром, не мог бы ты выслать этот файл по почте на ящик jugger@mail.ru. Я оттуда его смог бы забрать легко.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #24 : 22-07-2003 10:14 » 

Высылаю....
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #25 : 22-07-2003 11:48 » 

Что то ничего не пришло. Он случаем не больше 10 метров? А то ящик максимум может 10 принять.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #26 : 22-07-2003 12:00 » 

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

ПС..размер у него 7 мег - чуть больше.
ППС
А вот ошибка с которой мне вернулось письмо

This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:
jugger@mail.ru

Так что ответ простой - ящик писать надо нормально.

Извини - ничего личного просто уже столько раз говорил, что скачивают тысячи а отослать мне не разу не удалось - качайте.
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #27 : 22-07-2003 13:07 » 

1. На серваке mail.ru написано что максимальный размер письма 10220 кб т.е. 10 метров. Так что письмо должно было пролезть.

2. >>Никто к тебе не залезет
Да мне плевать пускай хоть табуны ходят. Машшина рабочая.
 У этого мудака админа чесались рукии он поотрубал вообще все порты кроме 80. Ни pop ни smtp ни ftp не работает. Чтобы открыть страничку браузера требуется указывать имя пользователя пароль домен и т.п. Качалки не работают почтовики не работают ничего не работает. Чтобы хоть как-то скрасить свое существование был установлен NTLM authorization Proxy Server. Он призван создать локальный порт 5865 через который по 127.0.0.1 и происходит соединение со остальным внешним миром.

Соответственно все потуги скачать у меня без докачки не канают. А докачка именно с твоего сервака не работает.  Тот же http://windowsdriver.sarang.net/cgi-bin/print.cgi?board=WDM&link=http://windriver.ssarang.net/pds/DDK_XP.ISO&Count=1026521482 работет. Хоть и медленно, но за 4 дня я скачал уже 90 метров. А эти 7 никак не получается.

Может не работает из за того что он лежит на ftp? Может тогда попробуешь дать ссылочку на http. Мож через неё получиться. Ну очь хочется получить это файло.

Яж не виноват в конце концов что у нас админ такой козел.
Хотябы внутреннюю сеть сделал. А то даже внутренняя постоянно лагает. На соседний комп 2 часа по 100 мегабитной сети файло кидаешь. На дискетке быстрее все перенести.

>>Так что ответ простой - ящик писать надо нормально
На этот ящик приходит все. В том числе и уведомления по которым я узнаю что здесь кто то ответил. Так что ящик рабочий. Он у меня уже который год. Других не держу. Да и скрывать мне на компе нечего. Никаких файрволов не стоит.

Благодарю за внимание.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #28 : 22-07-2003 13:58 » 

А что три раза написал - а стереть не удосужился??? Я и в первый раз понял....

Будь внимательнее пожалуйста....

http://shelek.no-ip.com/code.zip Скачивай.
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #29 : 22-07-2003 18:09 » 

Я б удалил бы если была бы возможность. Прокся в очередной раз упала и показывала страничку что дескать прокси в дауне. 3 разанажал обновить. Видать все три раза отправилось.
Ну и извиняюсь конечно же. За ссылочку спасибо.
Завтра с работы скачаю.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #30 : 22-07-2003 18:23 » 

Ок - просто неудобно читать потом... а стирать каждый может свои сообщения.
Но это уже злостный оффтоп.
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #31 : 23-07-2003 04:04 » 

Оффтоп оффтопом, но ничего кроме как изменить сообщение я не могу. Хотя хинт показывает что кнопка правка может и удалить сообщение. А вообще в форумах phpbb есть ещё и кнопочка "Удалить" Здесь я её не обнаружил. Так что как здесь удалять я не имею понятия.

PS: Это сообщение после прочтения можно снести. Однако кнопка и  добавлась. Видать удалять можно только тогда когда твое сообщение не забито другим.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #32 : 23-07-2003 07:58 » 

Глупости - кнопка крестик стоит всегда справаот кнопки правка...
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #33 : 23-07-2003 11:48 » 

Те что скриншот кинуть? Ни хрена у меня не стоит ...  никакого креста.

Ладно замяли. Я тут вот что нашел:
http://asm.udm.ru/platforms/windows/wdm/chapter3.htm
Это по идее глава 3 от первого издания книги Walter Oney. На русском языке. Я бы сказал поточнее, но у меня не может загрузиться страница целиком. Такой уж интернет. Но содержаниее имеется полностью. Думаю это вообще книжка целиком. Думаю тебе эта ссылка пригодится как и многим другим, кто интересуется дровами.

Ну и вопрос.
Как выполнить запрос в драйвере и вернуть нечто приложению.
Например у меня в самом драйвере по DeviceID и VendorID ищется наличие PCI карты. Карта эти значения возвращает. Так вот такой вопрос.
Естиь функция
BOOL FindPCI(ULONG Vend, ULONG Device).
Из приложения я вызываю эту функцию через DeviceIoControl
..........
#define      IO_FIND_DEVICE            (ULONG) CTL_CODE(FILE_DEVICE_DOCREADER_DRIVER, 0x806, METHOD_NEITHER, FILE_ANY_ACCESS)
......
BOOL MainWindow::OnDeviceExists(ULONG dVendorID, ULONG dDeviceID)
{
   DWORD dwReturn;
   ULONG DeviceInfo=MAKELONG(dVendorID,dDeviceID);
   void* bExists;
   if(m_hDevice)
   {
      DeviceIoControl(
         m_hDevice,
         IO_FIND_DEVICE,
         (void*)DeviceInfo,
         sizeof(DeviceInfo),
         &bExists,
         sizeof(bExists),
         &dwReturn,
         NULL);

   }
   return Не понял??;
}
....
Вот. Что должен сделать драйвер вутри функции обработки IO_FIND_DEVICE
NTSTATUS DocReader_IoControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )
{
   NTSTATUS               status = STATUS_SUCCESS;
   ULONG                  controlCode;
   PIO_STACK_LOCATION         irpStack;
   HANDLE                  hEvent;
   OBJECT_HANDLE_INFORMATION   objHandleInfo;
   LONG*                  outBuf;
   DWORD dInfo=0;
   irpStack = IoGetCurrentIrpStackLocation(Irp);
   controlCode = irpStack->Parameters.DeviceIoControl.IoControlCode;
   
   switch(controlCode)
   {
.....
   case IO_FIND_DEVICE:
      DocReader_FindDevice(Не понялНе понялНе понялНе понялНе понял);
   break;
   default:
      break;
   }

   Irp->IoStatus.Status = STATUS_SUCCESS;
   Irp->IoStatus.Information = 0;
   IoCompleteRequest(Irp, IO_NO_INCREMENT);

   return status;
}
.............
NTSTATUS DocReader_FindDevice(Не понялНе понялНе понялНе понялНе понялНе понял??)
{
   BOOL bFind;
   PCI_IO PciIo;
   bFind=PciIo.FindDevice();
   return Не понялНе понялНе понял;
}

Другими словами. Я спрашиваю у драйвера через DeviceIoControl есть ли устройство с переданными VendorID и DeviceID. Драйвер в ответт вызывает свою внутреннюю функцию и отвечает приложению через переданный bExists есть или нет такое устройство. Я что то уже запарился и плохо соображаю. Во внутренних параметрах больно дофига всего и разобраться в этом не представляется возможным.
Вопрос как реализовать.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #34 : 23-07-2003 13:24 » 

Цитата

Те что скриншот кинуть? Ни хрена у меня не стоит ... никакого креста.

Я это проверю.
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #35 : 24-07-2003 08:36 » 

Ну что никто не знает как сие реализовать?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #36 : 24-07-2003 09:04 » 

Жди Славика из отпуска.
Записан

А птичку нашу прошу не обижать!!!
Juggernaut
Гость
PCI
« Ответ #37 : 25-07-2003 06:47 » 

Подождем. Пока сам  поковыряю.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #38 : 25-07-2003 07:38 » 

Ок- правда он обещал вернуться через 4 дня - надеюсь что на след. неделе он придет - просто я этого не знаю а остальные ленятся ...
Записан

А птичку нашу прошу не обижать!!!
SlavaI
Главный специалист

ru
Offline Offline

PCI
« Ответ #39 : 28-07-2003 19:28 » 

в общем я пришел. Подумаю над вопросом, я что-то не совсем въехал в него.
Записан
Juggernaut
Гость
PCI
« Ответ #40 : 29-07-2003 11:41 » 

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

Например.
Имеется железка. VendorID=5678 DeviceID=1234.
Она может находиться в компьютере а может и нет.
Как я понимаю внутри драйвера надо создать функцию, которая бы опрашивала все устройства установленные на шине на наличие именно таких идентификаторов. Кусок того, что по идее ищет устройство я нашел. Теперь требуется передать в драйвер требуемые номера(в данном случае VendorID=5678 DeviceID=1234) через DeviceIoControl а драйвер должен вернуть да или нет(торчит такая плата или нет).

Так вот что и как передавать, и что и как выковыривать из IRP в самом драйвере? Как эти параметры менять, и передавать обратно в программу?

Не знаю понятнее ли стало. Пытался объяснить каск мог.
Записан
Juggernaut
Гость
PCI
« Ответ #41 : 29-07-2003 11:45 » 

Придумал как спросить короче.
Как юзать DeviceIoControl и в проге и в драйвере?
Записан
SlavaI
Главный специалист

ru
Offline Offline

PCI
« Ответ #42 : 30-07-2003 19:38 » 

Цитата

Как юзать DeviceIoControl и в проге и в драйвере?


Почитай в W. Oney главу  9, она именно про это. Лучше него я все равно не расскажу. Как я понял по-английски ты читаешь свободно. Книга есть на этом сайте.
 Когда прочтешь - задавай вопросы, будем отвечать.
Записан
Juggernaut
Гость
PCI
« Ответ #43 : 31-07-2003 10:07 » 

Ок.

Кстати на этом сайте, по моему, прочитал что не советуют юзать Numega или WinDriver при разработке дров.
Думаю ничего подобного. При достаточном знании языка С++ довольно легко разбираться во внутренностях. Создаешь примитивный драйвер и начинаешь его по тихоньку ковырять. Я кстати почти разобрался при помощи NuMega.
Но главу все таки прочту. В случае чего задам дополнительный вопрос. Отлично
Записан
sss
Специалист

ru
Offline Offline

PCI
« Ответ #44 : 01-08-2003 08:46 » 

Кто скажет, если вызвать прерывание в 0 кольце что произойдет ?
(создаю новую тему)
Записан

while (8==8)
Juggernaut
Гость
PCI
« Ответ #45 : 02-08-2003 13:01 » 

Ребят. По поводу Главы 9.
Что означает фраза
Цитата

IMPORTANT
Always switch on the full 32 bits of the I/O control code to prevent a user-mode program from sneaking past the access checks or causing the I/O Manager to prepare the parameters using the wrong buffering method.

Типа:
Всегда включайте все 32 бита управляющего кода ввода вывода, чтобы предотвратить приложения пользовательского режима от крадущейся предыдущей проверки доступа Не понял?? или заставлять менеджера управления вводом выводом (программу управления вводом выводом) подготавливать параметры, используя неверный метод буферизации.
-========================
Точнее что здесь может означать from sneaking past
Из крадущегося прошлого как-то ни к селу ни к городу. Я бы конечно плюнул, но все же инетресно. С окончание фразы все ясно а вто середина... :oops:
Написано что важно
Записан
SlavaI
Главный специалист

ru
Offline Offline

PCI
« Ответ #46 : 04-08-2003 06:02 » 

Цитата

IMPORTANT
Always switch on the full 32 bits of the I/O control code to prevent a user-mode program from sneaking past the access checks or causing the I/O Manager to prepare the parameters using the wrong buffering method.


А может имеется в виду необходимость проверки всего IOCTL кода, а не его отдельных полей? А sneaking past the access checks - обходить проверку?

А NuMega наверно лучше не использовать, а то многое остается непонятым при ее использовании, к тому же Microsoft готовит свою Framework для драйверов, только она будет для C, а не для C++.
Записан
Juggernaut
Гость
PCI
« Ответ #47 : 04-08-2003 06:52 » 

Кстати может быть. Тогда это может звучать так:
"Всегда включайте все 32 бита IOCTL кода, для обхода проверки доступа, или вынуждения I/O менеджера  подготавливать параметры, основываясь на неверном методе буферизации"

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


Цитата

А NuMega наверно лучше не использовать,


Не меня прет. Была бы возможность протрейсить пошагово запуск драйвера или начало обработки им комманд, было бы просто шоколадно.
Я например так API учил. Сваял примитивную прогу на MFC, сделал из MFC "свою" статическую либу, подключил её к проекту, трейсил по шагам, и смотрел последовательность вызовов того или иного. Правда мусора много встречается, но в целом довольно быстро осваиваешь. Главное становится понятно что откуда и куда.
Например разобраться с тем же DeviceIoControl было бы легче, если заслать из приложения какие то данные, и посмотреть, где они всплывут в драйвере.

Как же запустить драйвер в режиме отладки из VC6 я понятия не имею. Знал бы, давно бы уже проблем не имел.

Ты кстати не знаешь как это можно сотворить?
Записан
SlavaI
Главный специалист

ru
Offline Offline

PCI
« Ответ #48 : 04-08-2003 07:21 » 

Цитата

Ты кстати не знаешь как это можно сотворить?


Или SoftIce поставить или стандартным отладчиком от Microsoft - WinDbg/i386kd.exe, только для майкрософтовских отладчиков вторая машина нужна.
Отладочное прерывание __asm int 3; прямо в коде можно написать или по шагам отлаживать на второй машине, или поставить BP в SoftIce.
Записан
Juggernaut
Гость
PCI
« Ответ #49 : 04-08-2003 11:45 » 

Ну вторая машина у меня есть. Соединены в 100 mb сеть.
А как это подключить и использовать, нигде статей нет?
Записан
SlavaI
Главный специалист

ru
Offline Offline

PCI
« Ответ #50 : 04-08-2003 12:36 » 

Или через сеть или через COM порт. В хелпе к WinDBG все написано.
Записан
sss
Специалист

ru
Offline Offline

PCI
« Ответ #51 : 05-08-2003 02:45 » 

// по пункту 3 вопроса
AX = B102h
CX = DeviceID
DX = VendorID
SI = 0..n                     // порядковый номер
int 1Ah
BH                             // номер шины
BL & 7                       // номер функции
BL & F8 >> 3             // номер устройства
AH                            // код возврата SUCCEFUL | BAD_VENDOR_ID | DEVICE_NOT_FOUND
CF                            // 0- ok 1 - fail
Записан

while (8==8)
SlavaI
Главный специалист

ru
Offline Offline

PCI
« Ответ #52 : 05-08-2003 05:10 » 

Цитата

AX = B102h
CX = DeviceID
DX = VendorID
SI = 0..n // порядковый номер
int 1Ah
BH // номер шины
BL & 7 // номер функции
BL & F8 >> 3 // номер устройства
AH // код возврата SUCCEFUL | BAD_VENDOR_ID | DEVICE_NOT_FOUND


Даже пробовать не буду- это прерывание реального режима. Система рухнет.
Записан
sss
Специалист

ru
Offline Offline

PCI
« Ответ #53 : 05-08-2003 08:28 » 

интересно, попробовал все-таки или нет ? Улыбаюсь  Я обязательно попробую ! DDK только доставлю ...
Записан

while (8==8)
SlavaI
Главный специалист

ru
Offline Offline

PCI
« Ответ #54 : 05-08-2003 10:03 » 

Цитата

интересно, попробовал все-таки или нет ?  Я обязательно попробую ! DDK только доставлю ..


Почитай мануалы на процессоры и посмотри на IDT в винде по записи 1A. Зачем пробовать если и так ясно что это неправильно. Это разные режимы работы процессоров. Ты хоть понимаешь что int 1A это для реального режима, а Windows переводит процессор в защищенный режим.
Записан
SlavaI
Главный специалист

ru
Offline Offline

PCI
« Ответ #55 : 05-08-2003 10:14 » 

Вот еще- в защищенном режиме прерывание 1A зарезервировано Intel и не должно использоваться. У винды там ловушки KiTrap0F.
Записан
Juggernaut
Гость
PCI
« Ответ #56 : 21-08-2003 09:52 » 

Цитата

Или через сеть или через COM порт. В хелпе к WinDBG все написано.

Что то я не нашел как через сеть.

Тут такая маза. Я поставил WmWare. Доставил туда XP. Основная система 2000. Вторая система убивается легко. Синий экран и все такое. Основная продолжает работать как ни в чем не бывало. По сети системы видят друг друга.

Так вот как настроить отладчик чтобы протрейсить драйвер. Хоть какую либо доку.
В спарвке или про посл. порты или через именованные каналы на той же машине.
Как по TCP IP???
Записан
maaaaaad
Гость
PCI
« Ответ #57 : 30-08-2003 05:58 » 

sss!!! не делай этого =))))))))))))))

int 1Ah не для protected mode. В оном надо через каталог шлюзов PCIBIOS32.
подробней в PCI BIOS spec PCI SIG

толька зачем? Улыбаюсь))

у мя есть написанная прога+vxd для чтения конфига PCI через шлюзы PCIBIOS32, правда под 9x.....по этому поводу сейчас статью пишу....кому интересно кину прогу на мыло

короче все это очень интересно, только все равно лучше брать хорошее PnP железо и работать с IRP_MN_START_DEVICE. С кривым повесится на крюке люстры можно....
Записан
maaaaaad
Гость
PCI
« Ответ #58 : 30-08-2003 06:00 » 

Да, кстати, а почему даты проставляются неправильно?
Уважаемый Гром! Проверьте пожалуйста системное время на вашом компе.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #59 : 30-08-2003 09:16 » 

CrashMaker, даты проставляются правильно - и все в порядке с сервером - проверяй настройки в профиле форума...

Насчет статьи - где она будет опубликована и можно ли заполучить ее на сайт :?:
Записан

А птичку нашу прошу не обижать!!!
maaaaaad
Гость
PCI
« Ответ #60 : 31-08-2003 05:05 » 

Сорри, не туда посмотрел.
Гром,
   где будет опубликованна - не знаю еще
   получить ее на сайт можно, когда доделаю.....
   отпрвлять сюда - club@shelek.com?


> playing Limp Bizkit - Break Stuff.mp3
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


PCI
« Ответ #61 : 31-08-2003 06:13 » 

Цитата

где будет опубликованна - не знаю еще
получить ее на сайт можно, когда доделаю.....
отпрвлять сюда - club@shelek.com?

Да...
Заранее благодарю!
Записан

А птичку нашу прошу не обижать!!!
nick333
Гость
PCI
« Ответ #62 : 18-09-2003 12:44 » 

Juggernaut,

Вот функция которая поможет тебе сделать то что надо! (Примерно)
Благодарности слать по адресу nkovach@itt.net.ru

//+++++++++++++++++++++++++++++++++++++++++++++++++++
//FIND PCI ADAPTER
//+++++++++++++++++++++++++++++++++++++++++++++++++++
BOOLEAN
FindPciAdapters(PALTERA_ADAPTER lpAda, int DoMap, ULONG safe, ULONG bp)
{
    PCI_SLOT_NUMBER     SlotNumber;
    ULONG               i, f, j, bus, adr;
    BOOLEAN             flag;
    UCHAR               vendorString[5] = {0};
    UCHAR               deviceString[5] = {0};
    PPCI_COMMON_CONFIG  PciData=(PPCI_COMMON_CONFIG)lpAda->ConfigurationTable;
    BOOLEAN       Result=FALSE;

    if(safe==0) AsmInitChips();

    SlotNumber.u.bits.Reserved = 0;
 
    flag = TRUE;
    for (bus = 0; flag; bus++)
   {
        for (i = 0; (i < PCI_MAX_DEVICES)  &&  flag; i++)
       {
            SlotNumber.u.bits.DeviceNumber = i;
 
            for (f = 0; f < PCI_MAX_FUNCTION; f++)
      {
                SlotNumber.u.bits.FunctionNumber = f;
 
                j = HalGetBusData (
                    PCIConfiguration,
                    bus,
                    SlotNumber.u.AsULONG,
                    PciData,
                    sizeof(PCI_COMMON_CONFIG)   //PCI_COMMON_HDR_LENGTH
                    );
 
                if (j == 0)
         {
                       // out of buses
                       flag = FALSE;
                       break;
                   }
 
                if (PciData->VendorID == PCI_INVALID_VENDORID)
         {
                       // skip to next slot
                       break;
                   }
                if (
         (PciData->VendorID  == 0xAA55) &&
         (PciData->BaseClass == 4)      &&
                   (PciData->SubClass  == 0))
            {
              lpAda->DeviceID=PciData->DeviceID;
            if(
                      (PciData->DeviceID  == 1)    || //old card
                   (PciData->DeviceID  == 3)    || //new card
                   (PciData->DeviceID  == 5)    || //new card 100 Acex
                    (PciData->DeviceID  == 9)    || //ID=9
                   (PciData->DeviceID  == 7)    || //ID=9
                   (PciData->DeviceID  == 0xF)  ||   //ID=0xf
                    (PciData->DeviceID  == 0x11) ||    //ID=0x11
                    (PciData->DeviceID  == 0x13) ||    //ID=0x13
                    (PciData->DeviceID  == 0x15) ||     //ID=0x15
                    (PciData->DeviceID  == 0x17)     //ID=0x17
            )
         {
                       //
                       // Arrr, Here's a nasty boy.
                       //
         if(safe!=0)
                      InitAlteraChip(bus,SlotNumber.u.AsULONG,PciData->DeviceID,safe);

         adr=(PciData->u.type0.BaseAddresses[0] & 0xFFFFFF00)|3;
         HalSetBusDataByOffset(
            PCIConfiguration,
            bus,SlotNumber.u.AsULONG,&adr,0x8C,4);

                   HalGetBusData(
                          PCIConfiguration,
                          bus,
                          SlotNumber.u.AsULONG,
                          PciData,
                          sizeof(PCI_COMMON_CONFIG)   //PCI_COMMON_HDR_LENGTH
                          );

         lpAda->DeviceID=PciData->DeviceID | 0x80000000;
             lpAda->BusNumber=bus;
         lpAda->SlotNumber=SlotNumber.u.AsULONG,
              lpAda->BusAddress.LowPart=PciData->u.type0.BaseAddresses[0] & 0xFFFFFF00;
              lpAda->BusAddress.HighPart=0;

         if(DoMap) MapIoSpace(lpAda);

         if(lpAda->lp16Mb)
         {
                  DoDelay(500);

                       DrawLogo(lpAda->DeviceID & 0xFFFF,lpAda->lp16Mb,0);
                       DrawLogo(lpAda->DeviceID & 0xFFFF,lpAda->lp16Mb,1);
                       DrawLogo(lpAda->DeviceID & 0xFFFF,lpAda->lp16Mb,2);

                  if(bp) beep(0x5000);
   
                   Result=TRUE;
         }

                        }
              lpAda++;
            }
                }
            }
       }
return Result;
}
Записан
SlavaI
Главный специалист

ru
Offline Offline

PCI
« Ответ #63 : 18-09-2003 12:50 » 

HalGetBusData.
А не старовато ли?
Записан
Anonymous
Гость
PCI
« Ответ #64 : 19-09-2003 11:32 » 

А что есть что поновее???
Записан
dorador
Гость
PCI
« Ответ #65 : 19-09-2003 12:20 » 

Цитата

А что есть что поновее???

цитата из DDK W2K

HalGetBusData is obsolete and is exported only to support existing drivers.

Drivers should use the PnP Manager's IRP_MN_QUERY_INTERFACE and IRP_MN_READ_CONFIG requests instead.
Записан
Juggernaut
Гость
PCI
« Ответ #66 : 06-10-2003 06:33 » 

InitAlteraChip??? Это что???
Записан
Страниц: 1 2 3 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines