🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #334667

Re: Przejęcie odwołania funkcji obsługi plików w DLL

#334667
From: dziobu
Date: Tue, 10 Jan 2012 23:07
96 lines
4645 bytes
Dnia 1/10/2012 11:43 PM, Użytkownik xbary napisał:
>
> a jak wpisałem
> \\.\pipe\0.bmp
> w uruchom systemowe to się obudziła ale i tak nic nie przekazuje i
> przeglądarka grafiki pokazuje błąd nagłówka itd...

Sprawdź dokładniej, bo to kulturalny sposób na ten problem.

>
> Będę chyba zmuszony zrobić odbicie kernel32.dll na np. wernel.dll ,
> zmienić odwołanie w bibliotece na otwrcie wernel.dll iii przejąć
> funkcje dyskowe i tam załatwić wczytywanie z z czego się chce. Jest
> problem bo musiałbym praktycznie wszystkie definicje kernel32 napisać
> od nowa, tzn przejąć je itd a tego jest raczej dużo i bez kodu
> źródłowego szablonowej biblioteki raczej nie będę się zabierał nawet
> za to w tej chwili.

Jakimkolwike disassemblerem otwierasz kernel32.dll (zależy na jakim 
systemie to ma działać, bo każdy ma swój różny; choć to zależy tak 
naprawde od tego czego używać będzie biblioteka z której korzystasz)
i eksportujesz listę funkcji. Parametry Cie nie interesują.

Potem troche obróbki tekstu (makro) i w kilkanascie sekund masz taką 
liste importów:

procedure xxx__hread; external kernel32 name '_hread';
procedure xxx__hwrite; external kernel32 name '_hwrite';
procedure xxx__lclose; external kernel32 name '_lclose';
procedure xxx__lcreat; external kernel32 name '_lcreat';
procedure xxx__llseek; external kernel32 name '_llseek';
procedure xxx__lopen; external kernel32 name '_lopen';
procedure xxx__lread; external kernel32 name '_lread';
procedure xxx__lwrite; external kernel32 name '_lwrite';
procedure xxx_AcquireSRWLockExclusive; external kernel32 name 
'AcquireSRWLockExclusive';
procedure xxx_AcquireSRWLockShared; external kernel32 name 
'AcquireSRWLockShared';
...


Kolejnym etapem jest wyeksportowanie wszystkiego:

exports
  xxx__hread name '_hread',
  xxx__hwrite name '_hwrite',
  xxx__lclose name '_lclose',
  xxx__lcreat name '_lcreat',
  xxx__llseek name '_llseek',
  xxx__lopen name '_lopen',
  xxx__lread name '_lread',
  xxx__lwrite name '_lwrite',
  xxx_AcquireSRWLockExclusive name 'AcquireSRWLockExclusive',
  xxx_AcquireSRWLockShared name 'AcquireSRWLockShared',
  ...



Kwestię przejrzystości masz już załatwioną. Tylko że teraz to pusty 
element pomiędzy biblioteką a kernel32.dll.


W związku z tym piszesz swoje funkcje które chcesz nadpisać i potem je 
eksportujesz w miejscę tych oryginalnych:

exports
  ...
  // xxx_CreateFileA name 'CreateFileA',
  My_CreateFileA name 'CreateFileA',
  ...

i gdzieś dalej:

function My_CreateFileA(lpFileName: PAnsiChar; dwDesiredAccess, 
dwShareMode: DWORD;
   lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, 
dwFlagsAndAttributes: DWORD;
   hTemplateFile: THandle): THandle; stdcall;
...



Myślę że z ewentualną obsługą otwierania innych plików przez tą 
biblioteke (nie znam jej) sobie poradzisz.

Mało to kulturalne rozwiązanie, ale działa.

Jeśli biblioteka będzie importowała funkcje dynamicznie, to masz szanse 
napisać jedną która by działała na każdym systemie. Ale ja sie już w to 
nie bawiłem.


-- 
Pozdrawiam
dziobu
xyzyk.pl
Technical Details
Message-ID: <jeigba$a46$1@inews.gazeta.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <75934d7e-dc45-4c01-a2ac-36a9e13814b9@i6g2000vbk.googlegroups.com> <4f0c8e2c$0$1465$65785112@news.neostrada.pl> <507a36b4-a163-4bf5-9044-c366f1e9efea@h13g2000vbn.googlegroups.com> <4f0c9bc5$0$1230$65785112@news.neostrada.pl> <aeeff612-d8a5-4248-aee6-9951277f5f03@z1g2000vbx.googlegroups.com> <4f0ca44b$0$1208$65785112@news.neostrada.pl> <6615b546-461c-4d82-97ed-5d3bdbdc8fb6@k5g2000vba.googlegroups.com> <4f0caeb4$0$1448$65785112@news.neostrada.pl> <7f0b7d34-90fa-44d2-a7d4-760bf5e6ac0f@j9g2000vby.googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: dziobu <dziobu@gazeta.pl>
Newsgroups: pl.comp.lang.delphi
Subject: Re: Przejęcie odwołania funkcji
 obsługi plików w DLL
Date: Wed, 11 Jan 2012 00:07:37 +0100
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 96
Message-ID: <jeigba$a46$1@inews.gazeta.pl>
References: <75934d7e-dc45-4c01-a2ac-36a9e13814b9@i6g2000vbk.googlegroups.com> <4f0c8e2c$0$1465$65785112@news.neostrada.pl> <507a36b4-a163-4bf5-9044-c366f1e9efea@h13g2000vbn.googlegroups.com> <4f0c9bc5$0$1230$65785112@news.neostrada.pl> <aeeff612-d8a5-4248-aee6-9951277f5f03@z1g2000vbx.googlegroups.com> <4f0ca44b$0$1208$65785112@news.neostrada.pl> <6615b546-461c-4d82-97ed-5d3bdbdc8fb6@k5g2000vba.googlegroups.com> <4f0caeb4$0$1448$65785112@news.neostrada.pl> <7f0b7d34-90fa-44d2-a7d4-760bf5e6ac0f@j9g2000vby.googlegroups.com>
NNTP-Posting-Host: abip208.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1326236842 10374 83.7.131.208 (10 Jan 2012 23:07:22 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Tue, 10 Jan 2012 23:07:22 +0000 (UTC)
X-User: dziobu
In-Reply-To: <7f0b7d34-90fa-44d2-a7d4-760bf5e6ac0f@j9g2000vby.googlegroups.com>
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit