Нет такого ограничения. Вы ошибаетесь.
Очевидно, что вы ограничены адресным пространством и требованием, чтобы буфер представлял собой непрерывный блок виртуальной памяти. В 32-битной системе каждый процесс может адресовать только 2 ГБ виртуальной памяти. Более того, вы не сможете выделить 2 ГБ непрерывного блока памяти.
Но это общие ограничения. ReadFile
API с радостью прочитает настолько большой буфер, насколько вы можете выделить.
Вы утверждаете, что достигли лимита в 8 КБ, но я только что успешно написал и прочитал файл объемом 1 ГБ, используя WriteFile
и ReadFile
. Очевидно, у вас есть проблемы, но это не то, что вы думаете. Если бы вы могли показать остальную часть кода, особенно ту, которая вызывает ваш p / invoke, тогда я уверен, что это станет очевидным.
И теперь, когда вы опубликовали свой полный код, мы можем видеть, в чем проблема. Вы не читаете файл, а вместо этого выполняете чтение физического диска. Теперь я понимаю, что вы имели в виду под «чтением непосредственно с диска», но я думаю, что вы могли бы быть более конкретным!
В любом случае, я не знаю подробностей того, что здесь происходит, но проблема явно не в ReadFile
как таковая, а в том, что ваш дескриптор относится к физическому диску, а не к файлу.
Документация для CreateFile
гласит:
Том содержит одну или несколько смонтированных файловых систем. Дескрипторы тома можно открывать как некэшированные по усмотрению конкретной файловой системы, даже если в CreateFile не указана опция без кэширования. Следует предположить, что все файловые системы Microsoft открывают дескрипторы томов как некэшированные. Ограничения на некэшированный ввод / вывод для файлов также распространяются на тома.
Файловая система может требовать или не требовать выравнивания буфера, даже если данные не кэшированы. Однако если при открытии тома указана опция без кэширования, выравнивание буфера применяется независимо от файловой системы на томе. Во всех файловых системах рекомендуется открывать дескрипторы томов как некэшированные и следовать ограничениям ввода-вывода без кэширования.
Я думаю, вам следует задать новый вопрос о том, как читать с физических дисков.