Ускоренный метод экспорта встроенных данных - PullRequest
1 голос
/ 14 февраля 2010

По некоторым причинам я использую метод, описанный здесь: http://geekswithblogs.net/TechTwaddle/archive/2009/10/16/how-to-embed-an-exe-inside-another-exe-as-a.aspx

Он начинается с первого байта внедренного файла и проходит 4,234,925 байтов один за другим! Финишная обработка занимает около 40 секунд.

Существуют ли другие способы копирования внедренного файла на жесткий диск? (Я могу ошибаться здесь, но я думаю, что встроенный файл читается из памяти)

Спасибо.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2010

Как только вы знаете местоположение и размер встроенного exe-файла, вы можете сделать это за одну запись.

LPBYTE pbExtract; // the pointer to the data to extract
UINT   cbExtract; // the size of the data to extract.

HANDLE hf;
hf = CreateFile("filename.exe",          // file name
                GENERIC_WRITE,           // open for writing 
                0,                       // no share
                NULL,                    // no security 
                CREATE_ALWAYS,           // overwrite existing
                FILE_ATTRIBUTE_NORMAL,   // normal file 
                NULL);                   // no template 

if (INVALID_HANDLE_VALUE != hf)
{
   DWORD cbWrote;
   WriteFile(hf, pbExtract, cbExtract, &cbWrote, NULL);
   CloseHandle(hf);
}
1 голос
/ 14 февраля 2010

Как говорит человек, напишите больше файла (или всего этого) за вызов WriteFile. Вызов WriteFile на байт будет смехотворно медленным, да.

...