🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#334666
From: xbary
Date: Tue, 10 Jan 2012 22:43
211 lines
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-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>

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