Чтение запросов в Windows UMDF драйвер вопрос

Я пытаюсь написать свой собственный драйвер Virtual Serial для Windows, используя UMDF2 framework. Я использовал пример проекта VirtualSerial2 из репозитория образцов драйверов Windows от Microsoft ( https://github.com/Microsoft/Windows-driver-samples/tree/master/serial/VirtualSerial2). Я могу скомпилировать код без ошибок. Я пытаюсь ввести данные в последовательный порт, используя отдельный поток в драйвере. Я делаю это, записывая данные в кольцевой буфер объекта устройства.

DWORD WINAPI ThreadFunc(void* arg) {

    Sleep(100);
    PDEVICE_CONTEXT DeviceContext = (PDEVICE_CONTEXT)arg;

    QUEUE_CONTEXT * qc = (QUEUE_CONTEXT *)DeviceContext->DefaultQueue;
    while (1)
    {
        RingBufferWrite(&(qc->RingBuffer), (BYTE*)"HELLO\r\n", 8);
        Sleep(1000);
    }
    return 0;
}

Данные записываются в кольцевой буфер, но не отправляются через последовательный интерфейс (если я открываю последовательный порт с помощью Putty, я его не вижу), за исключением случаев, когда я отправляю какие-либо данные в окно терминала, и в этом случае все данные, которые находится в буфере сбрасывается на терминал. Из того, что я могу сказать, Driver Framework должен вызвать обратный вызов EvtIoRead объекта очереди для данных, считываемых из кольцевого буфера.

EvtIoRead(
    _In_  WDFQUEUE          Queue,
    _In_  WDFREQUEST        Request,
    _In_  size_t            Length
    )
{
    NTSTATUS                status;
    PQUEUE_CONTEXT          queueContext = GetQueueContext(Queue);
    WDFMEMORY               memory;
    size_t                  bytesCopied = 0;

    ...

    status = RingBufferRead(&queueContext->RingBuffer,
                            (BYTE*)WdfMemoryGetBuffer(memory, NULL),
                            Length,
                            &bytesCopied);

Я хотел бы знать следующее: когда платформа драйвера отправляет запросы на чтение, которые в конечном итоге вызывают событие READ? Нужно ли уведомлять драйвер, что в буфере есть данные? Что-то в корне не так с моим пониманием того, как работают драйверы?

Любая помощь будет оценена.

С уважением

0 ответов

Другие вопросы по тегам