Как правильно сказать "ваш буфер маленький, нужный буфер такого размер" ? Просто в msdn пишут что нужно возвращать 0 в lpBytesReturned когда выходной буфер маленький. И как бы правила "хорошего тона" не позволяют вернуть STATUS_BUFFER_TOO_SMALL а в lpBytesReturned записать нужный размер буфера. Или стоит забить на эти правила ?..
x64 Клиент то мой, но всеже как красивее сделать ? Или всеже еще нужен доп. ирп/параметр чтоб получить нужный размер буфера.
STATUS_BUFFER_OVERFLOW Возвращается, если в выходной буфер уместилось хоть что-то. В этом случае IoStatus.Information должно содержать кол-во записанных данных. STATUS_BUFFER_TOO_SMALL Возвращается, если в выходной буфер не умещается вообще ничего. В этом случае IoStatus.Information может содержать необходимый размер буфера. STATUS_INVALID_BUFFER_SIZE Возвращается, если размер выходного буфера фиксирован и указан неверно. В этом случае IoStatus.Information может содержать необходимый размер буфера или ноль. Что тут непонятно?
а ещё есть STATUS_INFO_LENGTH_MISMATCH ох как я намучался с ним. обычно я всегда использую STATUS_BUFFER_TOO_SMALL, так вот, пишу я функцию, которая выдаёт какую-то там инфу о чём-то, и вот чёрт меня дёрнул вернуть STATUS_INFO_LENGTH_MISMATCH если буффер маленький. При использовании этой функции я по привычке проверяют результат на STATUS_BUFFER_TOO_SMALL, я целые сутки не понимал почему функция отказывается работать и возвращает ерунду. На вторые сутки я только заметил что функция возвращает STATUS_INFO_LENGTH_MISMATCH (именно когда начал трассировать весь код пошагово). мой совет: если драйвер свой (или функция своя), то лучше использовать только одно и не отходить от собственной привычки.