BUF_SIZE — размер читаемого блока данных, здесь может быть переменная с размером буфера, но это и логично — читаемый блок не должен быть больше буфера что бы не залезть в чужой участок памяти… и равенство этих величин так же логично..
&nIn — ссылка на переменную, куда надо будет вписать число прочитанных байт по факту. пояснение — в переменной выше может быть запрошено байтов больше чем осталось до конца файла. фактическое значение укажет размер ценной информации. все остальное в буфере следует считать мусором
NULL — специальная фишка для асинхронной работы с файлом — когда функция может вернуть значение раньше чем операция завершится физически. тут указывается ссылка на спец структуру для работы с файлами открымы для асинхронного режима. в данном случае не используются эти фичи
ReadFile возвращает логическое значение успех/не успех, подробнее в описании. в общем случае истина это без ошибок, однако при этом может быть считано 0 байт — указатель и так уже был на конце файла
while- задет цикл по смыслу — пока чтение-из-файла-без-ошибок И считано-больше-0-байтов — делать…