I am creating a program to populate a disk with a dummy file system.
Currently, I am writing files of variable sizes using WriteFile.
WriteFile(hFile, FileData, i * 1024, &dwWrote, NULL);
err = GetLastError();
err returns #1784 which translates to
The supplied user buffer is not valid for the requested operation. ERROR_INVALID_USER_BUFFER
So for the first 24 files, the write operation works. For file #25 on, the write operation fails.
The files are still created but the WriteFile function does not populate the files.
Any ideas on how to get past ERROR_INVALID_USER_BUFFER?
Every reference I can find to the error is limited to crashing programs and I cannot figure out how it relates to the issue I am experiencing.
EDIT:
FileData = (char *) malloc(sizeof(char) * (size_t)k * 1024);
memset(FileData, 245, sizeof(char) * (size_t)k * 1024);
FileData is set and allocated to the size of the maximum anticipate buffer.
i is the loop variable that iterates until it increments to the Maximum Size (k).
My guess is that
FileDatais not large enough for you to writei * 1024bytes from it. Isithe loop control variable for your list of files? If so, you need the write bufferFileDatato grow 1K at a time as you loop through your files.This is an unusual construct. Are you sure the logic is correct here? Post more code (specifically, all usage of
FileDataandi) for better accuracy in the answers.Note that you should not always be checking
GetLastErrorhere – you need to checkWriteFile‘s return code before you rely on that being meaningful. Otherwise you could be picking up an error from some unrelated part of your code – whatever failed last.