
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.121] |
![]() |
|
![]() |
|
|
Приветствую ВСЕХ!!!
Подскажите уважаемые Знатоки, чем воспользоваться для решения вот такой задачи! Написан драйвер под ХР еще годов так n назад… и встал вопрос переноса его на win7… Кто-то ХР дрова переносил, сталкивался с проблемами и какими подручными средствами лучше всего воспользоваться?! Спасибо!!! |
Сообщ.
#2
,
|
|
|
![]() |
Сообщ.
#3
,
|
|
|
Как удалось выяснить driverstudio больше нет и проект закрыт… но есть другой способ … воспользоваться Jungo WinDrive … что я и сдела и в результате получил исподники в которых полный абзац! ((( пришлось потихоньку осваивать WDF Kernel Mode Driver Foundation.
В хелпе с DDK толком мало что написано … понятного все как всегда от форточников сжато и ссылками на др. источник… |
Сообщ.
#4
,
|
|
|
Люди, посоветуйте книгу!!!
Вот нашел: Программирование аппаратных средств в Windows Автор: Всеволод Несвижский Языки: Русский Издательство: БХВ-Петербург Серия: Профессиональное программирование ISBN 978-5-9775-0263-4; 2008 г. |
![]() |
Сообщ.
#5
,
|
|
zhuravlev80, ты собрался на Ассемблере драйвер писать? Как бы не то чтобы странное желание, просто и под XP это было уже необязательно. Даже под Win98 я лично писал на C и горя не знал.
|
Сообщ.
#6
,
|
|
|
Qraizer не конечно, не на Ассемблере, а на С!)))
какой я дурень... не в том разделе создал тему! Админы, перенесите тему в раздел С/С++ системное программирование! Спасибо!!!! |
Сообщ.
#7
,
|
|
|
а что за драйвер-то? может он и так "заведется" на семерке)) хотя, под х64 портировать наверное таки придется
|
Сообщ.
#8
,
|
|
|
GAGARIN на семерке не заводится х32 ... а под х64 тем более...
|
Сообщ.
#9
,
|
|
|
Да еще драйвер нужно будет подписать у мелкософта, а это немалых денег нужно им отдать
|
Сообщ.
#10
,
|
|
|
Цитата zhuravlev80 @ Подскажите уважаемые Знатоки, чем воспользоваться для решения вот такой задачи! Написан драйвер под ХР еще годов так n назад… и встал вопрос переноса его на win7… Кто-то ХР дрова переносил, сталкивался с проблемами и какими подручными средствами лучше всего воспользоваться?! 1. переписать код с учётом специфики win7. Если код написан правильно, то скорее всего это не нужно 2. перекомпилить |
Сообщ.
#11
,
|
|
|
Ребята спасибо за помощь! Но драйвер написан не под DDK а в Numega и просто так перекомпилировать не получится !!!
С Билом и его форточкой разберемся!))) Вот как выглядит код драйвера который сгенерировала очень давно Numega с внесенными корректировками… (в прикрепренном файле) Что можно сделать, Ваши предложения! Спасибо!!! |
Сообщ.
#12
,
|
|
|
Уважаемые знатоки, как правильно представить функцию в ДДК NTSTATUS MDMAI_IO_READ_Handler(PIRP I) которая была сгенерирована в NuMega??
![]() ![]() 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; } Потому, что почти на каждой строчке ошибка и некоторые строки не понятно зачем нужны!! Растолкуйте и помогите!!! Спасибо!!! |
Сообщ.
#13
,
|
|
|
Прошу взглянуть компетентным взглядом!!! Потому, что меня смущает написанное, пока не тестил… счас еще кусок переписываю.
Подскажите в том направлении, я хоть, двигаюсь?! Спасибо! Вот седня переделал и внес изменения: ![]() ![]() 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; } проверил! ![]() ![]() Port = pInputBuffer[0]; pReturnData = (PCHAR)READ_PORT_UCHAR((PUCHAR)Port); // ну очень смущает!!!!!!!!! не работает!((( |
Сообщ.
#14
,
|
|
|
ВСЕМ СПАСИБО!!!
Написал свой первый драйвер! Шишки набил... но теперь разобрался... и все замечательно работает... для любых способов обращения к PCI! воспользовался WDM замечательно работает как под 7 так и под ХР! причешу код и выложу... или если забуду, пишите в личку, помогу! ))))))) только вот с ДМА не разобрался как его перенаправить с режима порта в память! может кто-то что-то делал или читал?! подскажите! думаю что это будит следующая тема! |