В общем, я бы исправил так: добавил локальную переменную
Abort: Boolean;
в TWinHTTPClient.DoExecuteRequest, до цикла передачи данных вызвал бы коллбек с объёмом файла, так же как происходит при загрузке файла на ПК - первый коллбек вызывается с нулевым объёмом переданных данных.
LRequest.DoReceiveDataProgress(0, DataLength, 0, Abort);
В цикл добавил бы проверку на прекращение загрузки
while (LRequest.FSourceStream.Position < LRequest.FSourceStream.Size) and (not Abort) do
В конце цикла вызывал бы коллбек с объёмом файла и количеством переданных байт.
Первый параметр коллбека - StatusCode получить на данном этапе скорее всего нельзя, или я не понял как, поэтому передаю ноль.
LRequest.DoReceiveDataProgress(0, DataLength, LRequest.FSourceStream.Position, Abort);
Полный текст исправленной функции.