На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> перенос драйвера с ХР на 7 , написать драйвер для вин 7
    Приветствую ВСЕХ!!!
    Подскажите уважаемые Знатоки, чем воспользоваться для решения вот такой задачи!
    Написан драйвер под ХР еще годов так n назад… и встал вопрос переноса его на win7…
    Кто-то ХР дрова переносил, сталкивался с проблемами и какими подручными средствами лучше всего воспользоваться?!
    Спасибо!!!
      :huh: driverstudio под Win7 еще нет в природе?
        Как удалось выяснить driverstudio больше нет и проект закрыт… но есть другой способ … воспользоваться Jungo WinDrive … что я и сдела и в результате получил исподники в которых полный абзац! ((( пришлось потихоньку осваивать WDF Kernel Mode Driver Foundation.
        В хелпе с DDK толком мало что написано … понятного все как всегда от форточников сжато и ссылками на др. источник…
          Люди, посоветуйте книгу!!!
          Вот нашел: Программирование аппаратных средств в Windows
          Автор: Всеволод Несвижский
          Языки: Русский
          Издательство: БХВ-Петербург
          Серия: Профессиональное программирование
          ISBN 978-5-9775-0263-4; 2008 г.
            zhuravlev80, ты собрался на Ассемблере драйвер писать? Как бы не то чтобы странное желание, просто и под XP это было уже необязательно. Даже под Win98 я лично писал на C и горя не знал.
              Qraizer не конечно, не на Ассемблере, а на С!)))
              какой я дурень... не в том разделе создал тему!
              Админы, перенесите тему в раздел С/С++ системное программирование!
              Спасибо!!!!
              Сообщение отредактировано: zhuravlev80 -
                а что за драйвер-то? может он и так "заведется" на семерке)) хотя, под х64 портировать наверное таки придется
                  GAGARIN на семерке не заводится х32 ... а под х64 тем более...
                    Да еще драйвер нужно будет подписать у мелкософта, а это немалых денег нужно им отдать
                      Цитата zhuravlev80 @
                      Подскажите уважаемые Знатоки, чем воспользоваться для решения вот такой задачи!
                      Написан драйвер под ХР еще годов так n назад… и встал вопрос переноса его на win7…
                      Кто-то ХР дрова переносил, сталкивался с проблемами и какими подручными средствами лучше всего воспользоваться?!

                      1. переписать код с учётом специфики win7. Если код написан правильно, то скорее всего это не нужно
                      2. перекомпилить
                        Ребята спасибо за помощь! Но драйвер написан не под DDK а в Numega и просто так перекомпилировать не получится !!!
                        С Билом и его форточкой разберемся!)))
                        Вот как выглядит код драйвера который сгенерировала очень давно Numega с внесенными корректировками… (в прикрепренном файле)

                        Что можно сделать, Ваши предложения!
                        Спасибо!!!
                        Сообщение отредактировано: zhuravlev80 -
                          Уважаемые знатоки, как правильно представить функцию в ДДК NTSTATUS MDMAI_IO_READ_Handler(PIRP I) которая была сгенерирована в NuMega??
                          ExpandedWrap disabled
                            KIoRange            m_IoPortRange0;
                             
                            struct XDSP_READ_WRITE_IO_ARGS
                            {
                                ULONG PortOffset;
                                ULONG Data;
                            };//тут понятно!
                            ...
                            NTSTATUS MDMAI_IO_READ_Handler(PIRP I)
                            {
                                NTSTATUS status = STATUS_SUCCESS;
                                XDSP_READ_WRITE_IO_ARGS* pArgs = (XDSP_READ_WRITE_IO_ARGS*)I.IoctlBuffer();
                                KMemory Mem(I.Mdl());  // не понятно, и, ниже!
                                ULONG* pBuffer = (ULONG*)Mem.MapToSystemSpace();
                             
                                pArgs->Data = m_IoPortRange0.ind(pArgs->PortOffset);
                                *pBuffer = pArgs->Data;
                             
                                I.Information() = 0;
                             
                                return status;
                            }

                          Потому, что почти на каждой строчке ошибка и некоторые строки не понятно зачем нужны!! Растолкуйте и помогите!!!
                          Спасибо!!!
                          Сообщение отредактировано: zhuravlev80 -
                            Прошу взглянуть компетентным взглядом!!! Потому, что меня смущает написанное, пока не тестил… счас еще кусок переписываю.
                            Подскажите в том направлении, я хоть, двигаюсь?! Спасибо!
                            Вот седня переделал и внес изменения:
                            ExpandedWrap disabled
                              NTSTATUS MDMAI_IO_READ_Handler(PIRP Irp, PIO_STACK_LOCATION pIoStackIrp, UINT *pdwDataWritten)
                              {
                                  NTSTATUS status = STATUS_UNSUCCESSFUL;    
                                  PCHAR pInputBuffer;
                                  PCHAR pOutputBuffer;
                                  PCHAR pReturnData;
                                  UINT dwDataRead = 0, dwDataWritten = 0;
                                  UINT dwDataSize = sizeof(ULONG);    
                                  USHORT Port;
                               
                                       DbgPrint("ReadDirectOutIO Called \r\n");
                               
                                  pInputBuffer = (PCHAR)Irp->AssociatedIrp.SystemBuffer;
                                  pOutputBuffer = NULL;
                               
                                  if(Irp->MdlAddress)
                                  {
                                       pOutputBuffer = (PCHAR)MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);
                                  }
                                
                                    if(pInputBuffer && pOutputBuffer)
                                    {
                                       if(pIoStackIrp->Parameters.DeviceIoControl.OutputBufferLength >= dwDataSize)
                                       {
                                          Port = pInputBuffer[0];
                                           pReturnData = (PCHAR)READ_PORT_UCHAR((PUCHAR)Port); // ну очень смущает!!!!!!!!!
                                                /*
                                                 * We use "RtlCopyMemory" in the kernel instead of memcpy.
                                                 * RtlCopyMemory *IS* memcpy, however it's best to use the
                                                 * wrapper in case this changes in the future.
                                                 */
                                                RtlCopyMemory(pOutputBuffer, pReturnData, dwDataSize);
                                                *pdwDataWritten = dwDataSize;
                                                status = STATUS_SUCCESS;
                                       }
                                       else
                                       {
                                               *pdwDataWritten = dwDataSize;
                                                status = STATUS_BUFFER_TOO_SMALL;
                                       }  
                                    }    
                                  return status;
                              }

                            проверил!
                            ExpandedWrap disabled
                               Port = pInputBuffer[0];
                                           pReturnData = (PCHAR)READ_PORT_UCHAR((PUCHAR)Port); // ну очень смущает!!!!!!!!!

                            не работает!(((
                            Сообщение отредактировано: zhuravlev80 -
                              ВСЕМ СПАСИБО!!!
                              Написал свой первый драйвер! Шишки набил... но теперь разобрался... и все замечательно работает... для любых способов обращения к PCI!
                              воспользовался WDM замечательно работает как под 7 так и под ХР!
                              причешу код и выложу... или если забуду, пишите в личку, помогу! )))))))

                              только вот с ДМА не разобрался как его перенаправить с режима порта в память! может кто-то что-то делал или читал?! подскажите! думаю что это будит следующая тема!
                              Сообщение отредактировано: zhuravlev80 -
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0332 ]   [ 16 queries used ]   [ Generated: 14.06.25, 16:50 GMT ]