реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Драйвер PCI, перенос с ХР на win7
sabbatazh
сообщение Mar 21 2012, 21:13
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 20-12-11
Пользователь №: 68 986



Приветствую ВСЕХ!!!
Подскажите уважаемые Знатоки, чем воспользоваться для решения вот такой задачи!
Написан драйвер под ХР, для платы PCI еще годов так n назад, в nuMega… и встал вопрос переноса его на win7…
Кто-то ХР дрова переносил, сталкивался с проблемами и какими подручными средствами лучше всего воспользоваться?!
пересмотрел примеры из ДДК и стряпал первый пробник...
и пытаюсь прочитать с помощью
Код
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;
}

в результате ни чего и ошибки!(
направьте на путь истинный!
Спасибо!!!
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 28 2012, 08:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 sabbatazh
Из общих замечаний: сначала вы должны сделать map/translate ресурсов вашей карточки, это будет выглядеть как то так:
Цитата
..
rawResourceList = &ioStack->Parameters.StartDevice.AllocatedResources->List[0].PartialResourceList;
rawResource = &rawResourceList->PartialDescriptors[0];

translatedResourceList = &ioStack->Parameters.StartDevice.AllocatedResourcesTranslated->List[0].PartialResourceList;
translatedResource = &translatedResourceList->PartialDescriptors[0];
...
for (i = 0; i < rawResourceList->Count; i++, rawResource++, translatedResource++)
...
deviceExtension->MemoryLength[idx] = translatedResource->u.Memory.Length;
deviceExtension->MemoryStart[idx] = MmMapIoSpace (
translatedResource->u.Memory.Start,
translatedResource->u.Memory.Length,
MmNonCached);
deviceExtension->Memory[idx] = translatedResource->u.Memory.Start;
...


Ну а потом пишем читаем как то так:
Цитата
...
*pBufferDW = READ_REGISTER_ULONG ((PULONG) address_32);
...

где "address_32" - это как раз наш map адрес + какое то смещение

Я работал с девайсами которые имели только Mem, у вас судя по всему это IO, там заменить процедуры надоlaughing.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 11:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01354 секунд с 7
ELECTRONIX ©2004-2016