Avatar billede jps2mt Nybegynder
04. august 2001 - 10:53 Der er 43 kommentarer og
1 løsning

Hvordan omgåes beskyttelse af LPT porten i Win2k??

Hejsa...

Jeg er interesseret i at høre, hvordan man kan omgå beskyttelsen af LPT porten i W2K, da jeg skal til at lave noget software, som skal kunne drive et LCD panel via LPT porten, men for at jeg kan skrive til panelet, skal jeg jo uden om låsen...

Hvordan kan jeg så forbigå den??

Håber der er nogen der kan hjælpe mig med mit problem...

Mvh. Morten
Avatar billede dr.truti Nybegynder
04. august 2001 - 12:44 #1
Hej Morten !!
Jeg har engang lavet et projekt hvor jeg kørte over Com2 porten og kunne få en robot til at gøre nogle for skellige ting. jeg vil meget gerne sende dig Kilde Koden. Den skal nok lige om programmeres lidt men alt i alt tror jeg at du kan bruge den...... en del (ca. 33 %)af den er fra en bog men det skulle jo ikke gøre det dårligere.

Hvad er din Mail ???

ellers kontakt mig på:
Mail: maac@mail1.stofanet.dk
ICQ: 72755522
Avatar billede driis Nybegynder
04. august 2001 - 13:36 #2
Du skal bruge en såkaldt kernel-mode driver; som forbigår beskyttelsen af LPT porten. En sådan kan have form som en .DLL skrevet i C. For at skrive til LPT porten, kalder du så bare funktioner i din . DLL. Rent kodemæssigt lader det sig ikke gøre at skrive direkte til LPT porten, du skal have en komponent til at hjælpe dig.

Jeg har selv lavet noget med at styre en robot over LPT porten, og her brugte jeg en DLL fil: DLPortIO.DLL. Jeg kan sende den til dig, med eksempel, hvis du er interesseret.
Avatar billede dr.truti Nybegynder
04. august 2001 - 14:08 #3
driis > Laver vi alle sammen robotter *loller*
Avatar billede driis Nybegynder
04. august 2001 - 14:15 #4
åbenbart, hehe
Avatar billede jps2mt Nybegynder
04. august 2001 - 22:25 #5
driis >> Det må du meget gerne...

Mvh. Morten
Avatar billede dr.truti Nybegynder
05. august 2001 - 00:04 #6
driis > Gidder du ikke også at sende den der LPT kode til mig på:
maac@mail1.stofanet.dk
Avatar billede jps2mt Nybegynder
05. august 2001 - 00:05 #7
driis >> Sorry...Glemte at poste min E-Mail...

morten@trab.dk
Avatar billede driis Nybegynder
05. august 2001 - 14:12 #8
Er sendt til jer begge.
Avatar billede jps2mt Nybegynder
06. august 2001 - 21:40 #9
Findes der ikke andre måder?? Jeg kan ikke umiddelbart få det driis sendte til at virke...

Mvh. Morten
Avatar billede jps2mt Nybegynder
21. august 2001 - 02:40 #10
Mjallo??

Fik i kolde fødder, fordi det ikke virker, eller gider i bare ikke hjælpe??

Mvh. Morten
Avatar billede driis Nybegynder
21. august 2001 - 14:06 #11
Sorry, jeg havde ikke set, at du ikke kunne få det til at virke - mails fra Eksperten.dk har en tendens til at ryge lidt hurtigt ud af min postkasse, hvis der er for mange af dem ;-)

Men anyways - hvilken fejlmeddelelse får du? Hvornår opstår fejlen?

Når du \'leger\' med parallelporten, er det ret praktisk at have mulighed for at se om de enkelte databits på porten er høje eller lave - til det formål lavede jeg et testerkabel: Tag et 25 pols kabel med alm. paralelportsstik i den ene ende. Forbind så ben 2-9 (på kablet) til hver sin lysdiode (alt efter hvilken lysdiode du bruger, skal du nok også have en modstand med i kredsløbet - databenene giver +5V). Forbind så lysdioderne til 0V på kablet (ben 19-22), og husk at vende dioderne rigtigt. Nu har du et kabel med 8 dioder, der lyser, hvis den tilsvarende databit er høj - Jeg fandt det ret praktisk under udviklingsarbejdet.
Se evt. http://www.driis.mobilixnet.dk/pport.jpg
Avatar billede jps2mt Nybegynder
22. august 2001 - 00:43 #12
Well...
Jeg får ingen fejlmeldinger, men der sker heller ikke noget...

De HEX koder jeg sender til displayet, kommer ikke igennem...
Avatar billede driis Nybegynder
22. august 2001 - 11:50 #13
Prøv at vise mig din kode - og gerne noget teknisk dokumentation på det display, du bruger.

Prøv også at gå ind i BIOS, og se hvilket mode parallelporten kører i - Prøv at sætte den til Bi-Directional eller \'Simple Parallel\'.
Avatar billede jps2mt Nybegynder
24. august 2001 - 11:23 #14
Her kommer koden:

frmMain:
------------
Private Sub Form_Load()
DlPortWritePortUlong &H378, &H38
End Sub

LCDModule:
------------
\'****************************************************************************
\'*  @doc INTERNAL
\'*  @module dlportio.bas |
\'*
\'*  DriverLINX Port I/O Driver Interface
\'*  <cp> Copyright 1996 Scientific Software Tools, Inc.<nl>
\'*  All Rights Reserved.<nl>
\'*  DriverLINX is a registered trademark of Scientific Software Tools, Inc.
\'*
\'*  Win32 Prototypes for DriverLINX Port I/O
\'*
\'*  Please report bugs to:
\'*  Scientific Software Tools, Inc.
\'*  19 East Central Avenue
\'*  Paoli, PA 19301
\'*  USA
\'*  E-mail: support@sstnet.com
\'*  Web: www.sstnet.com
\'*
\'*  @comm
\'*  Author: RoyF<nl>
\'*  Date:  09/26/96 14:08:58
\'*
\'*  @group Revision History
\'*  @comm
\'*  $Revision: 1 $
\'*  <nl>
\'*  $Log: /DLPortIO/API/DLPORTIO.BAS $
\'
\' 1    9/27/96 2:03p Royf
\' Initial revision.
\'*
\'****************************************************************************


Public Declare Function DlPortReadPortUchar Lib \"dlportio.dll\" (ByVal Port As Long) As Byte
Public Declare Function DlPortReadPortUshort Lib \"dlportio.dll\" (ByVal Port As Long) As Integer
Public Declare Function DlPortReadPortUlong Lib \"dlportio.dll\" (ByVal Port As Long) As Long

Public Declare Sub DlPortReadPortBufferUchar Lib \"dlportio.dll\" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)
Public Declare Sub DlPortReadPortBufferUshort Lib \"dlportio.dll\" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)
Public Declare Sub DlPortReadPortBufferUlong Lib \"dlportio.dll\" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)

Public Declare Sub DlPortWritePortUchar Lib \"dlportio.dll\" (ByVal Port As Long, ByVal Value As Byte)
Public Declare Sub DlPortWritePortUshort Lib \"dlportio.dll\" (ByVal Port As Long, ByVal Value As Integer)
Public Declare Sub DlPortWritePortUlong Lib \"dlportio.dll\" (ByVal Port As Long, ByVal Value As Long)

Public Declare Sub DlPortWritePortBufferUchar Lib \"dlportio.dll\" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)
Public Declare Sub DlPortWritePortBufferUshort Lib \"dlportio.dll\" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)
Public Declare Sub DlPortWritePortBufferUlong Lib \"dlportio.dll\" (ByVal Port As Long, Buffer As Any, ByVal Count As Long)


Min NIOS understøtter ikke bi-dir parallel, men den står til SPP mode.

Displayet er et som beskrevet på denne side:

http://www.ocmod.com/code/show_art.php?id=24&pg=1

Mvh. Morten
Avatar billede jps2mt Nybegynder
24. august 2001 - 11:25 #15
NIOS = BIOS

Desuden kan du hente de 2 filer jeg har (info om det display jeg har, samt benforbindelser) på http://www.blackchart.dk/tools/lcd.exe

Mvh. Morten
Avatar billede driis Nybegynder
24. august 2001 - 12:40 #16
Hvordan har du forbundet LPT porten til displayet? (Hvilket ben til hvilket ben?)
Avatar billede jps2mt Nybegynder
24. august 2001 - 12:55 #17
Det står på førstnævnte link hvordan de skal forbindes...

Testprogrammet der findes til det (fra samme side) virker fint, og skriver hvad det skal, men jeg kan bare ikke selv skrive til det, så det er ikke forbindelserne der er noget galt med...

Mvh. Morten
Avatar billede driis Nybegynder
24. august 2001 - 13:05 #18
Prøv lige:

Private Sub Form_Load()
DlPortWritePortUChar &H378, &H38
End Sub


I stedet. Hvor har du i øvrigt købt dit LCD display? - jeg har så småt fået blod på tanden for at gå i gang med sådan et projekt selv...
Avatar billede jps2mt Nybegynder
24. august 2001 - 13:31 #19
Du kan købe det hos www.brinck.dk

Men...Hmmm...Kom til at tænke på at det testprogram der står på siden, bruger _3_ porte (378, 379 og 37A) så vidt jeg husker...Og deraf er der vist noget med at den ene er dataport...

Hmmm...Mon man skulle se om man kunne knække den C++ kode på siden (jeg har ikke et hak forstand på C++, så det bliver nok lidt svært)

Mvh. Morten
Avatar billede driis Nybegynder
24. august 2001 - 13:39 #20
Det virker ikke, når du bruger DlPortWritePortUChar i stedet for DlPortWritePortULong ?
Avatar billede jps2mt Nybegynder
24. august 2001 - 13:40 #21
Har ikke prøvet endnu, men reset/init koden skal skrives til data-porten (mener jeg, ellers var det til kontrol-porten, og det er ikke den samme)

Mvh. Morten
Avatar billede driis Nybegynder
24. august 2001 - 14:27 #22
Prøv at sætte ben 6 på dit display til +5V. Ben 4 skal stadig være sat til ben 1 på parallelporten. Prøv så flg. kode:


I et modul:
-----------

Public Declare Sub DlPortWritePortUchar Lib \"dlportio.dll\" (ByVal Port As Long, ByVal Value As Byte)
Public Declare Sub Sleep Lib \"kernel32\" (ByVal dwMilliseconds As Long)
Public Const LPT As Long = &H378
Public Const Con As Long = &H37A

Public Sub Out(Port As Long, Value As Byte)
DlPortWritePortUchar Port, Value
Sleep 50  \'Sørg for at displayet har opfattet instruktionen, før næste kommando sendes.
End Sub



----------
For at skrive \'HI\' i displayet:
----------

Private Sub Command1_Click()
Out Con, 0  \'Vi kan nu skrive instruktioner på LPT1
Out LPT, 48
Out LPT, 14
Out LPT, 6
Out Con, 1  \'Vi kan nu skrive data til LPT1
Out LPT, 72
Out LPT, 73
End Sub


Jeg har naturligvis ingen mulighed for at teste, men jeg tror nok, at ovenstående burde virke.

Avatar billede jps2mt Nybegynder
24. august 2001 - 15:28 #23
Det gør det desværre ikke...

Der er +5V på ben 6 som std. men så snart jeg kører den kode du lige har givet, falder spændingen til +0.1V og bliver der. Og der sker intet på displayet...
Avatar billede jps2mt Nybegynder
24. august 2001 - 15:35 #24
Hmmmmm....Hvis jeg initializer displayet med det test-prog fra OCmod, kan jeg få det til at skrive I

Men hvordan sletter jeg så displayet, og hvordan kan jeg så skrive andet til det, da jeg kan se at det du lige har lavet kører som byte, og de char-set jeg har oversigt over benytter HEX...
Avatar billede driis Nybegynder
24. august 2001 - 15:40 #25
Det jeg mente var, at du skulle kappe forbindelsen mellem parallelport og ben 6, og i stedet give ben 6 permanent +5V.
Avatar billede jps2mt Nybegynder
24. august 2001 - 15:48 #26
Det problem tror jeg at jeg har løst, men nu mangler jeg bare en metode der kan konvertere et tegn til den korrekte byte...

Samt koden til at slette displayet...
Avatar billede driis Nybegynder
24. august 2001 - 15:51 #27
Ben 6 er \'Enable Line\', og skal således være høj, når vi ønsker at skrive til displayet. Jeg kan  ikke hitte ud af, hvordan du sætter ben 17 på LPT højt (som ben 6 er tilsluttet); derfor foreslog jeg at sætte ben 6 til permanent 5V. En lidt mere elegant løsning ville være at tilslutte ben 6 til ben 14 på LPT. Hvis du gør det, skulle flg. virke:

Private Sub Command1_Click()
Out Con, 2  \'Vi kan nu skrive instruktioner til display  (Ben 4 lavt og ben 6 højt)
Out LPT, 48
Out LPT, 14
Out LPT, 6
Out Con, 3  \'Vi kan nu skrive data til display (Ben 4 højt og ben 6 højt)
Out LPT, 72
Out LPT, 73
Out Con, 0  \'Ben 6 lavt = line disabled. Displayet er låst, ligegyldigt hvilke data der kommer ud fra LPT, indtil ben 6 bliver højt igen (+5V)
End Sub
Avatar billede driis Nybegynder
24. august 2001 - 23:29 #28
Virker det?
Avatar billede jps2mt Nybegynder
24. august 2001 - 23:40 #29
Vi har lige været nede til Middelalderfestival, så jeg har ikke fået det testet endnu, men kigger lige på det med det samme...
Avatar billede jps2mt Nybegynder
24. august 2001 - 23:45 #30
Hvis det er ben 17 på LPT porten der skal være høj, så er det da ikke pin 6 på displayet...Pin 17 på LPT\'en går da til pin 4...

Den der sidder på pin 6 (display) er da pin 1 på LPT\'en...
Avatar billede driis Nybegynder
25. august 2001 - 00:04 #31
Hov, der var da noget, jeg har læst forkert. Men essensen er, at ben 6 skal være højt, mens du kommunikerer med displayet, og at ben 4 skal være lavt mens du giver instruktioner; og højt mens du skriver data. Når du skriver til &H37A kan du ændre på LPT ben 1 og 14, iht. http://www.beyondlogic.org/spp/parallel.htm#5 og www.driis.mobilixnet.dk/pport.jpg
Avatar billede jps2mt Nybegynder
25. august 2001 - 00:13 #32
Det fatter jeg ikke lige så meget af...

Men hvis man kan sætte ben 1 og 14 højt, MÅ man da også kunne sætte ben 1 og 17 højt...

Men stadig...

Hvordan sletter jeg displayet, og hvordan får du den til at skrive noget på displayet??

Mvh. Morten
Avatar billede jps2mt Nybegynder
25. august 2001 - 00:23 #33
Hmmm...Kan du fortælle mig hvordan jeg kan sætte ben 16 højt, istedet for ben 17??
Avatar billede driis Nybegynder
25. august 2001 - 00:33 #34
Jeg ved ikke hvordan du sætter ben 17; idet det ikke er på tabellen www.driis.mobilixnet.dk under D-Sub (IEEE 1284-A) - dermed kender jeg ikke benets navn, og kan så ikke se, hvilken bit der skal sættes iht. www.beyondlogic.org/spp/parallel.htm
Avatar billede jps2mt Nybegynder
25. august 2001 - 00:39 #35
Hvad så med ben 16??
Avatar billede driis Nybegynder
25. august 2001 - 00:44 #36
Ben 16 mener jeg skulle være bit 2 på &H37A.
Avatar billede driis Nybegynder
25. august 2001 - 00:46 #37
Dvs;
Out Con, 4    \'bit 2 på &H37A højt
Avatar billede jps2mt Nybegynder
25. august 2001 - 00:47 #38
Dvs. hvordan skal det så se ud??
Avatar billede jps2mt Nybegynder
25. august 2001 - 00:48 #39
Private Sub Command1_Click()
Out Con, 4 \'Vi kan nu skrive instruktioner til display  (Ben 4 lavt og ben 6 højt)
Out LPT, 48
Out LPT, 14
Out LPT, 6
Out Con, 3  \'Vi kan nu skrive data til display (Ben 4 højt og ben 6 højt)
Out LPT, 72
Out LPT, 73
Out Con, 0  \'Ben 6 lavt = line disabled. Displayet er låst, ligegyldigt hvilke data der kommer ud fra LPT, indtil ben 6 bliver højt igen (+5V)
End Sub

Eller??
Avatar billede driis Nybegynder
25. august 2001 - 00:55 #40
Hvis du har:
Ben 1 LPT --> Ben 6 display = Enable
Ben 16 LPT --> Ben 4 display = RS pin
Burde flg. virke:

Private Sub Command1_Click()
Out Con, 1 \'Vi kan nu skrive instruktioner til display  (Ben 4 lavt og ben 6 højt)
Out LPT, 48
Out LPT, 14
Out LPT, 6
Out Con, 5  \'Vi kan nu skrive data til display (Ben 4 højt og ben 6 højt)
Out LPT, 72
Out LPT, 73
Out Con, 0  \'Ben 6 lavt = line disabled. Displayet er låst, ligegyldigt hvilke data der kommer ud fra LPT, indtil ben 6 bliver højt igen (+5V)
End Sub
Avatar billede jps2mt Nybegynder
25. august 2001 - 00:58 #41
Okay...Skal lige ændre lidt på ledningsføringen, men det bliver ikke før imorgen, så skal jeg nok lige melde tilbage, om det virker eller ej...
Avatar billede jps2mt Nybegynder
31. august 2001 - 02:13 #42
Sorry...Dette projekt er sat lidt i bero, da jeg har fået nyt mobo og CPU, som volder mig en del stabilitets problemer, som jeg lige vil have rettet først...Skla nok vende tilbage til det hurtigst muligt...

Mvh. Morten
Avatar billede jps2mt Nybegynder
07. november 2001 - 17:49 #43
Har ikke længere brug for det, og fik det aldrig til at virke...

Mvh. Morten
Avatar billede jps2mt Nybegynder
07. november 2001 - 17:50 #44
Lukket!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester