Question

I am writing an application that used to backup some specified file, therefore using the backup API calls i.e CreateFile BackupRead and WriteFile API's.

getting errors Access violation reading location.

I have attached code below.

#include <windows.h>

int main()
{
    HANDLE hInput, hOutput;

//m_filename is a variable holding the file path to read from
hInput = CreateFile(L"C:\\Key.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);

//strLocation contains the path of the file I want to create.
hOutput= CreateFile(L"C:\\tmp\\", GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, NULL, NULL); 


DWORD dwBytesToRead = 1024 * 1024 * 10;
BYTE *buffer;
buffer = new BYTE[dwBytesToRead];
BOOL bReadSuccess = false,bWriteSuccess = false;
DWORD dwBytesRead,dwBytesWritten;
LPVOID lpContext;
//Now comes the important bit:

do
{
    bReadSuccess = BackupRead(hInput, buffer, sizeof(BYTE) *dwBytesToRead, &dwBytesRead, false, true, &lpContext);

    bWriteSuccess= WriteFile(hOutput, buffer, sizeof(BYTE) *dwBytesRead, &dwBytesWritten, NULL); 

}while(dwBytesRead == dwBytesToRead);

return 0;

}

Any one suggest me how to use these API's?

Thanks.

Was it helpful?

Solution

Read the documentation. Specifically, the second paragraph of the documentation for BackupRead:

You must set the variable pointed to by lpContext to NULL before the first call to BackupRead for the specified file or directory.

Your code is also in dire need of error handling--you do no checking for errors at all, when in fact many of these APIs may fail (check the documentation for each API to learn how the function may fail and what happens when it fails). You should also implement correct resource handling, e.g. by closing the file handles.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top