Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Технологии программирования > Железо. Написание драйверов
Перезагрузить страницу Устанавливаю свой драйвер как сделать
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Vitaliy® Vitaliy® вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2005
По умолчанию Устанавливаю свой драйвер как сделать - 28.11.2005, 09:07

Доброго всем времени суток.
Ситуация такая:
Мне в инсте выдали задание написать драйвер для прямого достыпа к портам портов COM и LPT в XP. До этого момента о дряйверах знал только как их устанавливать.
Купив книгу Солдатова худо бедно разобрался что там и как написал драйвер написал inf файл. Но при установки выдается ошибка "не удалось инициализировать драйвер этого устройства (код 37)".
В чем тут косяк где рыть в драйвере в inf файле или XP глючит.
Заранее спасибо.
Ответить с цитированием
  (#2 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 28.11.2005, 10:27

Попытайся его запустить так, без inf. может он у тебя из DriverEntry возвращает не 0.
Ответить с цитированием
  (#3 (permalink)) Старый
Vitaliy® Vitaliy® вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2005
По умолчанию 28.11.2005, 11:00

Т.Е. УЖЕ ПРИ УСТАНОВКЕ ДРАЙВЕРА ВЫЗЫВАЕТСЯ DriverEntry ?
Ответить с цитированием
  (#4 (permalink)) Старый
kelz kelz вне форума
Member
 
Сообщений: 511
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.05.2004
По умолчанию 28.11.2005, 11:22

Попробуй локализировать ошибку используя DbgPrint. Да, и на код неплохо было бы взглянуть.
Ответить с цитированием
  (#5 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 28.11.2005, 16:19

Да. Иначе откуда взяться такой ошибке?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Vitaliy® Vitaliy® вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2005
По умолчанию 28.11.2005, 18:21

"Да, и на код неплохо было бы взглянуть."

извенити за тупой вопрос а как файл с текстом выложить или его моно только текстом вставлять
Ответить с цитированием
  (#7 (permalink)) Старый
Vitaliy® Vitaliy® вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2005
По умолчанию 29.11.2005, 07:37

пробовал из DriverEntry сразу возвращать STATUS_SUCCESS все равно та же ошибка.
вот код DriverEntry подскажите что не так:
Код:
extern "C" NTSTATUS DriverEntry (IN PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath)
{
    NTSTATUS status;
    //регистрация рабочих процедур
  pDriverObject->DriverUnload=(PDRIVER_UNLOAD)DriverUnload;
    pDriverObject->MajorFunction[IRP_MJ_CREATE]=DispatchCreate;
    pDriverObject->MajorFunction[IRP_MJ_CLOSE]=DispatchClose;
    pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]=DeviceControlRoutine;
    pDriverObject->DriverStartIo=StartIo;
    
    return CreateDevice(pDriverObject,0x3f8,0x4);
}
////----------------------------------------------------------------------------------------
NTSTATUS  CreateDevice (IN PDRIVER_OBJECT pDriverObject, IN ULONG portBase, IN ULONG Irq)
{
    NTSTATUS status;
    PDEVICE_OBJECT pDevObj;
    PDEVICE_EXTENSION pDevExt;

    UNICODE_STRING devName;    
    RtlInitUnicodeString(&devName,L"DeviceCOMPORT");
  status=IoCreateDevice(pDriverObject,
   sizeof(DEVICE_EXTENSION),
   &devName,
   FILE_DEVICE_UNKNOWN,
   0,
   TRUE,
   &pDevObj);
  if(!NT_SUCCESS(status))return status;

  pDevExt=(PDEVICE_EXTENSION)pDevObj->DeviceExtension;
  pDevExt->pDevice=pDevObj;
  pDevExt->ustrDeviceName=devName;
  pDevExt->Irq=Irq;
  pDevExt->portBase=(PUCHAR)portBase;
  pDevExt->pIntObj=NULL;
  pDevExt->pEvent=NULL;
  pDevExt->hEvent=NULL;
  pDevExt->DataForSendFull = FALSE;
  pDevExt->ReciveBufferFull = FALSE;
  pDevExt->EndReciveBuffer = 0;
  pDevExt->StartReciveBuffer = 0;
  pDevExt->EndSendBuffer = 0;
  pDevExt->StartSendBuffer = 0;

  
    
  IoInitializeDpcRequest(pDevObj,DpcForIsr);
//  WriteControlRegister(pDevExt,CR_DEFAULT);
  //создаем и подключаем объект прирываний
  KIRQL kirql;
  KAFFINITY kAffinity;
  ULONG kVector=HalGetInterruptVector(Isa, 0, pDevExt->Irq, pDevExt->Irq, &kirql, &kAffinity);
  status=IoConnectInterrupt(&pDevExt->pIntObj, Isr, pDevExt, NULL, kVector, kirql, kirql, Latched, TRUE, kAffinity, FALSE);
  if(!NT_SUCCESS(status))
  {
   IoDeleteDevice(pDevObj);
   return status;
  }
  //создаем символьную ссылку
  UNICODE_STRING symLinkName;
  RtlInitUnicodeString(&symLinkName, SYM_LINK_NAME);
  status=IoCreateSymbolicLink(&symLinkName, &devName);
  if(!NT_SUCCESS(status))
  {
   IoDisconnectInterrupt(pDevExt->pIntObj);
   IoDeleteDevice(pDevObj);
   return status;
  }
   
  WriteInterruptIncludeRegister(pDevExt,0x0F ); //разрешаем все прирывания
  pDevExt->ustrSymLinkName = symLinkName;
  return STATUS_SUCCESS;
}
Ответить с цитированием
  (#8 (permalink)) Старый
kelz kelz вне форума
Member
 
Сообщений: 511
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.05.2004
По умолчанию 29.11.2005, 10:11

Ты проверял, что CreateDevice возвращает? Может она и не доходит до return STATUS_SUCCESS;
Настоятельно рекомендую вот это:
Код:
#if DBG
        DbgPrint("NTSTATUS = 0x%0X",status);
#endif
Ответить с цитированием
  (#9 (permalink)) Старый
Vitaliy® Vitaliy® вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2005
По умолчанию 29.11.2005, 11:02

ПРОБОВАЛ ВМЕСТО ВЫЗОВА CreateDevice возвращать сразу ctatus_seccses все равно не робит
Ответить с цитированием
  (#10 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 29.11.2005, 13:22

А не через inf нормально запускается?
Ответить с цитированием
  (#11 (permalink)) Старый
Vitaliy® Vitaliy® вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2005
По умолчанию 29.11.2005, 16:57

А НЕ ЧЕРЕЗ ИНФ ЭТО КАК
Ответить с цитированием
  (#12 (permalink)) Старый
Vitaliy® Vitaliy® вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2005
По умолчанию 29.11.2005, 16:57

А НЕ ЧЕРЕЗ ИНФ ЭТО КАК
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Dian Dian вне форума
Member
 
Сообщений: 5,243
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.09.2004
По умолчанию 29.11.2005, 17:52

Смотри MSDN OpenSCManager
Ответить с цитированием
  (#14 (permalink)) Старый
Vitaliy® Vitaliy® вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.11.2005
По умолчанию 29.11.2005, 17:54

спасибо попробую
Ответить с цитированием
  (#15 (permalink)) Старый
kelz kelz вне форума
Member
 
Сообщений: 511
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.05.2004
По умолчанию 30.11.2005, 13:12

Не, я думаю Service Control Manager здесь не поможет (раз драйвер сам не устанавливается). С виду все написано правильно. Это не совет, а скорее идея: может виндовский менеджер PnP виноват? Попробуй установить диспечер IRP_MJ_PNP и вернуть STATUS_SUCCESS при обработке IRP_MN_START_DEVICE - сей глюк имел место быть года полтора назад - я тогда дня два убил пытаясь понять почему драйвер USB устройства не ставится.

З.Ы. Кстати, я тоже по книге Солдатова разбирался
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать родной драйвер nvidia основным? edvaldo Видеокарты 2 22.08.2011 08:22
Помогите сделать свой FTP argonopa Windows XP 2 04.03.2011 16:53
Устанавливаю драйвер нвидио ,перестает грузиться ОС. rerix Любые вопросы от новичков 18 26.12.2010 15:23
Как сделать свой системный трей Shturmovik Delphi 6 08.04.2007 00:19
Как сделать свой просмотрщик реестра Shturmovik Delphi 12 18.01.2007 18:27
Как в миранде сделать свой чат <<LexuS>> Мысли вслух 26 01.02.2005 00:21
Как написать свой bgi драйвер semix С/С++ 9 25.11.2004 16:33
Можно ли сделать свой компонент приложения в виде отдельных классов Mike. Visual C++ 0 21.09.2004 20:12
Как можно сделать в ListView свой цвет фон для разных строк evg Delphi 1 05.08.2004 11:34
Как сделать драйвер sys имея vxd Anonymous Железо. Написание драйверов 1 07.08.2003 14:57
Floppy + WinXP + свой драйвер GreK Железо. Написание драйверов 1 02.06.2003 15:10



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов