Article View: pl.comp.lang.delphi
Article #334666Re: Przejęcie odwołania funkcji obsługi plików w DLL
From: xbary
Date: Tue, 10 Jan 2012 22:43
Date: Tue, 10 Jan 2012 22:43
211 lines
6939 bytes
6939 bytes
On 10 Sty, 22:33, "marfi" <marfi @bb.onet.pl> wrote:
> U ytkownik "xbary" <xb...@wp.pl> napisa w wiadomo cinews:6615b546-461c-4d82-97ed-5d3bdbdc8fb6@k5g2000vba.googlegroups.com...
> On 10 Sty, 21:49, "marfi" <marfi @bb.onet.pl> wrote:
>
> > U ytkownik "xbary" <xb...@wp.pl> napisa w wiadomo
> > cinews:aeeff612-d8a5-4248-aee6-9951277f5f03@z1g2000vbx.googlegroups.com...
>
> > >Rozumiem :) ...czyli tak:
> > >- w tym w tku sobie czeka procedura ConnectNamedPipe na otwarcie tego
> > >pliku '\\.\pipe\mypipe' i dopiero jak zostanie gdzie otwarty to
> > >wykonywana jest funkcja WriteFile wype niaj ca bufor.
>
> > Tak, ale dalsze dzia ania uzale nij od tego czy biblioteka " yknie" dane z
> > pipe jak z pliku :)
>
> > --
> > marfi
> >Biblioteka powinna ykn bo korzysta z funkcji systemowych i napisana
> >jest w C na wiele platform systemowych.
>
> Ale np. SetFilePointer(...) jest funkcj systemow i gwarantuje
> niepowodzenie w przypadku pipe.
>
> >Pytanie tylko czy zgodno systemowa Windows w XP visty 7 demki itd
> >czy zareaguj na to tak samo...:) jeszcze dzi przepisze we w tku ten
> >wynalazek i napisz jaki rezultat
>
> Mysl , e tak - named pipe to jest staro ytna funkcjonalno system w MS.
>
> --
> marfi
no i spłodziłem taki Unit
UNIT U_XBEngine;
INTERFACE
USES
forms,
classes,
windows,
messages,
graphics,
registry,
SysUtils;
TYPE
TPipeThread = CLASS(TThread)
PROTECTED
PROCEDURE Execute(); OVERRIDE;
PUBLIC
pipeindx: Integer;
END;
APipeTH = RECORD
HPipe: Cardinal;
PipeName: STRING;
Thread: TPipeThread;
Stream: TMemoryStream;
Point: Cardinal;
Size: Cardinal;
FileName: TFileName;
END;
FUNCTION XB_CreateThereadPipeFile(fn: TFileName; VAR APipeName:
STRING): Integer; OVERLOAD;
FUNCTION XB_CreateThereadPipeFile(ms: TMemoryStream; APoint: Integer;
ASize: Integer; VAR APipeName: STRING): Integer; OVERLOAD;
VAR
pipes: ARRAY OF APipeTH;
IMPLEMENTATION
FUNCTION XB_CreateThereadPipeFile(fn: TFileName; VAR APipeName:
STRING): Integer;
VAR
ms: TMemoryStream;
r: Integer;
BEGIN
ms := NIL;
Result := -1;
TRY
ms := TMemoryStream.Create;
ms.loadfromfile(fn);
ms.Position := 0;
r := XB_CreateThereadPipeFile(ms, ms.Position, ms.Size,
APipeName);
IF r < 0 THEN
BEGIN
ms.Free;
Result := -2;
Exit;
END;
pipes[r].FileName := fn;
Result := 0;
FINALLY
END;
END;
FUNCTION XB_CreateThereadPipeFile(ms: TMemoryStream; APoint: Integer;
ASize: Integer; VAR APipeName: STRING): Integer; OVERLOAD;
VAR
indx: Integer;
BEGIN
Result := -1;
TRY
setlength(pipes, Length(pipes) + 1);
indx := High(pipes);
WITH pipes[indx] DO
BEGIN
Thread := TPipeThread.Create(True);
PipeName := '\\.\pipe\' + IntToStr(indx) + '.bmp';
Point := APoint;
Size := ASize;
Stream := ms;
APipeName := PipeName;
Thread.Resume;
END;
Result := indx;
FINALLY
END;
END;
PROCEDURE TPipeThread.Execute();
VAR
bret: LongBool;
wr: Cardinal;
P: Pointer;
BEGIN
WITH pipes[pipeindx] DO
BEGIN
REPEAT
HPipe := CreateNamedPipe(
PChar(PipeName),
PIPE_ACCESS_OUTBOUND OR FILE_FLAG_WRITE_THROUGH,
PIPE_TYPE_BYTE OR PIPE_WAIT,
2,
Size,
Size,
1000,
NIL);
CASE HPipe OF
INVALID_HANDLE_VALUE:
BEGIN
MessageBox(0, 'NVALID_HANDLE_VALUE', 'ERROR', 0);
Exit;
END;
ERROR_INVALID_PARAMETER:
BEGIN
MessageBox(0, 'ERROR_INVALID_PARAMETER', 'ERROR', 0);
Exit;
END;
PIPE_UNLIMITED_INSTANCES:
BEGIN
MessageBox(0, 'PIPE_UNLIMITED_INSTANCES', 'ERROR', 0);
Exit;
END;
END;
bret := ConnectNamedPipe(HPipe, NIL);
IF bret THEN
BEGIN
P := Pointer(Cardinal(Stream.Memory) + Point);
bret := WriteFile(HPipe, P, Size, wr, NIL);
END;
CloseHandle(HPipe);
HPipe := 0;
UNTIL Terminated;
END;
END;
INITIALIZATION
pipes := NIL;
FINALIZATION
END.
i niestety ... nie działa w ogóle.
funkcja wspomnianej biblioteki w ogóle nie obudzi ConnectNamedPipe -
czyli już du.a.
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...
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.
Ramdysk to też klamizerstwo niestety bo po stworzeniu i tak widać go w
systemie. A druga rzecz to tworzenie programowo ramdysku to makabra
jak Jan to wspomniał...
Czyli problem otwarty nadal...
Technical Details
Message-ID:
<7f0b7d34-90fa-44d2-a7d4-760bf5e6ac0f@j9g2000vby.googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed1.plix.pl!goblin2!goblin.stu.neva.ru!feeder3.cambriumusenet.nl!feeder1.cambriumusenet.nl!feed.tweaknews.nl!postnews.google.com!j9g2000vby.googlegroups.com!not-for-mailReferences:
<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>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed1.plix.pl!goblin2!goblin.stu.neva.ru!feeder3.cambriumusenet.nl!feeder1.cambriumusenet.nl!feed.tweaknews.nl!postnews.google.com!j9g2000vby.googlegroups.com!not-for-mail From: xbary <xbary@wp.pl> Newsgroups: pl.comp.lang.delphi Subject: Re: Przejęcie odwołania funkcji obsługi plików w DLL Date: Tue, 10 Jan 2012 14:43:56 -0800 (PST) Organization: http://groups.google.com Lines: 216 Message-ID: <7f0b7d34-90fa-44d2-a7d4-760bf5e6ac0f@j9g2000vby.googlegroups.com> 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> NNTP-Posting-Host: 83.23.77.177 Mime-Version: 1.0 X-Trace: posting.google.com 1326235535 29710 127.0.0.1 (10 Jan 2012 22:45:35 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Tue, 10 Jan 2012 22:45:35 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: j9g2000vby.googlegroups.com; posting-host=83.23.77.177; posting-account=YqNsWQoAAAA_7yhX7SRaVTGU6Fb5-oXn User-Agent: G2/1.0 X-Google-Web-Client: true X-Google-Header-Order: HUALESNKRC X-HTTP-UserAgent: Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1,gzip(gfe) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit