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

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

ru
Offline Offline
Пол: Мужской

« : 13-12-2005 09:43 » 

Сгенерировал с помошью DriverStudio 3.1 код.
Полный профан в драйверах - понемножку разбираюсь.
В частности вопрос:

Это чтение
Код:
NTSTATUS dramaReadDispatch(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    )
{
    PDRAMA_DEVICE_EXTENSION    deviceExtension;
    NTSTATUS                     status;
    PIO_STACK_LOCATION    irpStack;
    PVOID                           readBuffer;
    ULONG                          readLength;

    deviceExtension = (PDRAMA_DEVICE_EXTENSION)DeviceObject->DeviceExtension;

    status = dramaCheckIoLock(&deviceExtension->IoLock, Irp);
    if (!NT_SUCCESS(status) || (status == STATUS_PENDING))
    {
        return status;
    }

    // Get our IRP stack location
    irpStack = IoGetCurrentIrpStackLocation(Irp);

    // Get the read buffer length
    readLength = irpStack->Parameters.Read.Length;
    if (readLength == 0)
    {
        status = STATUS_SUCCESS;

        Irp->IoStatus.Information = 0;
        Irp->IoStatus.Status = status;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);

        dramaDecrementIoCount(&deviceExtension->IoLock);

        return status;
    }

    readBuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);

    status = STATUS_NOT_IMPLEMENTED;
    Irp->IoStatus.Information =  readLength; //!!!!!!!!!!!!!!!!!!!
    Irp->IoStatus.Status = status;

    IoCompleteRequest (Irp, IO_NO_INCREMENT);

    dramaDecrementIoCount(&deviceExtension->IoLock);

    return status;
}

Как посмотреть данные в readBuffer'е?
И аналогично для записи - коды одинаковые  Круто!.
« Последнее редактирование: 17-12-2007 05:08 от Алексей1153++ » Записан
ILIS
Гость
« Ответ #1 : 13-12-2005 11:08 » 

А под отладчиком не получается посмотреть? Или ты не пробовал? Без отладчика можно сдампить данные по адресу readBuffer в файл...
Записан
Kife
Помогающий

by
Offline Offline

« Ответ #2 : 13-12-2005 11:34 » 

PBYTE bB;
int i;
pB=readBuffer;
for(i=0;i<readLength;i++)
{
DbgPrint("%i",*pB);
pB++;
}

->выведет в окно дебага (напр. в программу Driver Monitor)
Записан

_______
Да поможет нам F1,  и да сохранит нас F2 ...
cooler
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 13-12-2005 12:02 » 

Немножко неправильно задал вопрос   Так больше нельзя...

Из приложения вызываю ReadFile(....),в драйвере отлавливается
функция dramaReadDispatch(...).
И чё дальше-то делать? Как из железяки(USB-железяка моя) прочитать данные.
Пока в readBuffer сидит информация при вызове ReadFile.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines