WriteFile returning error 1784

2019-02-26 03:43发布

问题:

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).

回答1:

My guess is that FileData is not large enough for you to write i * 1024 bytes from it. Is i the loop control variable for your list of files? If so, you need the write buffer FileData to 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 FileData and i) for better accuracy in the answers.

Note that you should not always be checking GetLastError here - you need to check WriteFile'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.



回答2:

I got a Error = 1784 and it was because I opened the file without specifying the size of records and then did block reads on the file.

Reset( FileHandle );

Should be

Reset( FileHandle, 1 );