Binder
Binder
#include <windows.h>
#include <fstream>
#include <stdio.h>
using namespace std;
bool configstarted = false;
void WriteToFile(char*data)
{
if (configstarted==false)
{
ofstream writer;
writer.open("config.txt", ios::out); //deletes file if it already exists
if(writer.is_open())
{
writer << data;
writer << ":";
writer.close();
configstarted=true;
}
}
else
{
ofstream writer;
writer.open("config.txt", ios::app);
writer << data;
writer << ":";
writer.close();
}
}
}
else
{
dwfilesize = GetFileSize(hfile, NULL);
lpbuffer = new BYTE[dwfilesize]; //create a buffer the size of the file
if (ReadFile(hfile, lpbuffer, dwfilesize, &dwbytesread, NULL) == FALSE)
//parameters = handle to file to be read, buffer to put data in, max num bytes to
read, num that receieves bytes read, optional)
{
cout << "\nERROR: Could not read file\n";
delete [] lpbuffer;
CloseHandle(hfile);
return false;
}
else
{
HANDLE hresource;
hresource = BeginUpdateResource(stub, FALSE); //file to update
resource, FALSE specifies not to delelete filename's existing resources
if (hresource==NULL)
{
cout << "\nERROR: Could not begin updating the resource\n";
delete [] lpbuffer;
CloseHandle(hfile);
return false;
}
else
{
if (UpdateResource(hresource, //handle created by
BeginUpdateResource
RT_RCDATA, //Resource type- raw data
filename, //creates resource ID
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPVOID) lpbuffer, //pointer to byte array
containing the file data
dwfilesize) == TRUE)
{
EndUpdateResource(hresource, FALSE); //This commits the changes
made by update resource
if(filename!="config.txt")
{WriteToFile(filename);}
delete [] lpbuffer;
CloseHandle(hfile);
return true;
}
else
{
EndUpdateResource(hresource, true); //DISCARDS the changes made
by UpdateResource b/c UpdateResource failed
delete [] lpbuffer;
CloseHandle(hfile);
return false;
}
}
}
}
int main()
{
return 0;
}