Передача данных из драйвера в приложение.

Тема в разделе "WASM.NT.KERNEL", создана пользователем ni3, 3 май 2009.

  1. ni3

    ni3 New Member

    Публикаций:
    0
    Регистрация:
    3 май 2009
    Сообщения:
    2
    Необходимо передавать в приложение сообщения переменного размера... Как это реализовать?
    При этом не используя всякие там пайпы, LPC, shared memory и т.п., т.е. желательно именно через IOCTL.

    Пока надумал два метода, оба из них мне кажутся очень убогими:

    1. Посылать из пользовательского приложения два IOCTL запроса на каждое сообщение, т.е. сначала что-то вроде IOCTL_GET_MESSAGE_SIZE для того, чтобы получить размер сообщения, а потом IOCTL_GET_MESSAGE.
    2. Установить фиксированный размер сообщения и большие сообщения дробить на более мелкие фиксированного размера.
    3. Выделять память в пользовательском пространстве через ZwAllocateVirtualMemory. Ну это уже совсем изврат.

    Оба способа не нравятся. Был бы рад, если кто подсказал вариант получше.
     
  2. ni3

    ni3 New Member

    Публикаций:
    0
    Регистрация:
    3 май 2009
    Сообщения:
    2
    fix: Три метода, все способы.
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    1 IOCTL, если не хватает ресурсов, тогда возвращать статус, что буфер слишком мал.
    Приложение перевыделяет и вновь запрашивает данные.
     
  4. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    1 IOCTL, просто async completion:
    1) IoMarkIrpPending(irp);
    2) IoCompleteRequest(irp, IO_NO_INCREMENT);