DeviceIoControl

Тема в разделе "WASM.NT.KERNEL", создана пользователем XshStasX, 28 ноя 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Как правильно сказать "ваш буфер маленький, нужный буфер такого размер" ?

    Просто в msdn пишут что нужно возвращать 0 в lpBytesReturned когда выходной буфер маленький.

    И как бы правила "хорошего тона" не позволяют вернуть STATUS_BUFFER_TOO_SMALL а в lpBytesReturned записать нужный размер буфера.

    Или стоит забить на эти правила ?..
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Если клиент твой, то можно и забить, разумеется.
     
  3. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    x64
    Клиент то мой, но всеже как красивее сделать ?
    Или всеже еще нужен доп. ирп/параметр чтоб получить нужный размер буфера.
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    STATUS_BUFFER_OVERFLOW
    Возвращается, если в выходной буфер уместилось хоть что-то.
    В этом случае IoStatus.Information должно содержать кол-во записанных данных.

    STATUS_BUFFER_TOO_SMALL
    Возвращается, если в выходной буфер не умещается вообще ничего.
    В этом случае IoStatus.Information может содержать необходимый размер буфера.

    STATUS_INVALID_BUFFER_SIZE
    Возвращается, если размер выходного буфера фиксирован и указан неверно.
    В этом случае IoStatus.Information может содержать необходимый размер буфера или ноль.

    Что тут непонятно?
     
  5. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    а ещё есть STATUS_INFO_LENGTH_MISMATCH
    ох как я намучался с ним. обычно я всегда использую STATUS_BUFFER_TOO_SMALL, так вот, пишу я функцию, которая выдаёт какую-то там инфу о чём-то, и вот чёрт меня дёрнул вернуть STATUS_INFO_LENGTH_MISMATCH если буффер маленький. При использовании этой функции я по привычке проверяют результат на STATUS_BUFFER_TOO_SMALL, я целые сутки не понимал почему функция отказывается работать и возвращает ерунду. На вторые сутки я только заметил что функция возвращает STATUS_INFO_LENGTH_MISMATCH (именно когда начал трассировать весь код пошагово).
    мой совет: если драйвер свой (или функция своя), то лучше использовать только одно и не отходить от собственной привычки.