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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: неизвестный Link error  (Прочитано 6092 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Zah
Гость
« : 06-11-2003 22:11 » 

Внес некоторые исправления в свой драйвер после чего возникла такая ситуация: все компилируется, но возникает ошибка линковщика:

Internal error during ReadSymbolTable

Хотя возникает ошибка файл .sys создается => получается что на нее можно забить. Может быть кто-нибудь знает что за ReadSymbolTable?

Кстати нашел в книжке код, его можно слегка исправив прехватить прерывание от COM порта. Так вот если отключить в диспетчере устройств системный драйвер COM порта то все получиться. УРА!!!
Записан
Zah
Гость
« Ответ #1 : 07-11-2003 22:50 » 

Уже все слинковалось. Что это было не знаю ну и хрен с ним. Есть другой вопрос: я могу вызывать мой обработчик таймера раз в секунду с помощью IoInitilizeTimer, IoStartTimer, а вот как сделать задержку в 10 мс?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #2 : 10-11-2003 06:13 » 

Цитата

а вот как сделать задержку в 10 мс



Вот так можно. Решение не мое, но интересное. Поток не будет занимать процессор. Только точно 10 мс не выйдет.

VOID FASTCALL Sleep(IN ULONG ulMilSecs)
{
   KEVENT         kEvent;
   LARGE_INTEGER   qTimeout;

   qTimeout.QuadPart = 10000L;
   qTimeout.QuadPart *= ulMilSecs;
   qTimeout.QuadPart = -(qTimeout.QuadPart);

   KeInitializeEvent(&kEvent,SynchronizationEvent,FALSE);

   KeWaitForSingleObject((PVOID)&kEvent,Executive,KernelMode,FALSE,&qTimeout);
}

А можно использовать функцию KeDelayExecutionThread .
Записан
Zah
Гость
« Ответ #3 : 10-11-2003 12:03 » 

Спасибо. Получилось с KeDelayExecutionThread

Вот:

LARGE_INTEGER timeDue;   
timeDue = RtlConvertLongToLargeInteger( -100 );
status = KeDelayExecutionThread(KernelMode, FALSE, &timeDue);

Еще такой вопрос:
Какие функции надо применять чтоб я смог из драйвера прочитать параметр
из реестра. Например, прога на уровне пользователя выбирает что устройство
будет подключено к COM2 и пишет в реестр строку COM2. В DDK написано про ZwOpenKey и ZwQueryValueKey хотя в умной книжке советуют RtlQueryRegistryValues. Может кто-нибудь приведет маленький пример кода ?
А может при передаче парметров драйверу и без реестра можно обойтись ?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

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


« Ответ #4 : 10-11-2003 12:06 » 

Можно передавать драйверу строку параметров через DeviceIOCntrol()

Причем любые параметры в любой момент времени и на них реагировать в драйвере.
Записан

А птичку нашу прошу не обижать!!!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines