Autor Beitrag
pc-crack
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 15.11.09 12:23 
Ich möchte auf dem LPT Port zugreifen.
Das mach mit einem Treiber der in 378h liegt.
dazu hab ich eine Demo gefunden das auch läuft aber wenn ich den Code selber compiliere kommt immer bei "Out dx,ax" immer die Meldung "Privilegierte Anweisung".



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure LptWrite(Addr: word; Maske: word);  //  Maske = Bitmuster welches geschrieben wird
begin                                         //  0 = alle Ausgaenge 0-Pegel
   Maske:= (Maske* 256)+Maske;
   asm
      Mov ax,Maske
      Mov dx,Addr
      Out dx,ax
   end;
end;
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 15.11.09 12:29 
Unter Windows Darfst Du das nicht. Du musst einen Treiber verwenden oder selbst einen schreiben. Und das ist einer der Nachteile von Delphi: Treiber schreiben is nich weil geht nich.

_________________
Na denn, dann. Bis dann, denn.
pc-crack Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 15.11.09 12:37 
aber das schon compilierte Programm kann es ja auch machen.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 15.11.09 13:23 
Es gibt bei x86-basierten (und auch AMD64-Systemen), sowas, das nennt sich Protected Mode, im Gegensatz zu sowas, was sich Real Mode schimpft.

Im Protected Mode läuft deine Anwendung, im Real Mode startet z.B. DOS.

Unterschied (kurz, damit kann man nämlich ganze Regale füllen):
- Im Realmode wird der Speicher anders gehandhabt und Geräte sind i.d.R. im Speicher eingeblendet (Memory Mapped IO).
- Im Protected Mode ist nur der Speicher sichtbar, auf den ein Prozess zugreifen darf. Hardware wird hier oft verborgen (ODER kontrolliert eingeblendet z.B. für Grafikanwendungen)

Beim Protected Mode gibt es zwar noch verschiedene Schutzmodi (Ring 0 bis 3), die angeben, wieviel ein Prozess, der in diesem Modus läuft darf. Windowsanwendungen laufen typisch in Ring 3 (User-Mode), während Treiber im Ring 0 (Kernel Mode) laufen. Das sich hier auch noch mal das Memory Management ändert, steht NOCHMAL auf einem anderen Blatt.

Und zu der Anwendung von dir, die das kann: Die geht sicherlich über die WinAPI ODER holt sich über CreateFile die Treiber-Schnittstelle (z.B. \\.\LPT1) für das Gerät. Außerdem: 378h war IIRC nicht LPT, sondern COM ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
pc-crack Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 15.11.09 14:43 
naja ich will euch nicht widersprechen aber
ausblenden Delphi-Quelltext
1:
2:
3:
4:
constructor TLptComp.Create(AOwner: TComponent);
begin
   SetLpt(1);
end;


wurde nicht aufgerufen und daher wurde kein LPT Port gesetzt was dazu für das versucht wurde auf h000 zu schreiben.
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mo 16.11.09 15:48 
richtige variante wäre über die winAPI mit Createfile zu gehen.
alternativ kann man sich unter WXP mittels uallRing0 auch vom Usermode in den kernel "hacken"
funktioniert sehr gut, aber auch sehr gefährlich, wenn man nicht weiß was man macht!
am besten selbst nen treiber erstellen mittels WDK und C

BTW: du hast geschrieben, das die Demo läuft?
dann zeig mal bitte die Demo.