-
Items
584 -
Registratiedatum
-
Laatst bezocht
Inhoudstype
Profielen
Forums
Store
Berichten die geplaatst zijn door droompje
-
-
PortTalk NT4/2000/XP IO Driver Saturday, 12 January 2002 [
PortTalk - A Windows NT/2000/XP I/O Port Device Driver
A problem that plagues Windows NT/2000 and Windows XP, is it's strict control over I/O ports. Unlike Windows 9x
& ME, Windows NT/2000/XP will cause an exception (Privileged Instruction) if an attempt is made to access an IO
port that a usermode program is not privileged to talk too. Actually it's not Windows NT that does this, but any 386
or higher processor running in protected mode.
Accessing I/O Ports in protected mode is governed by two events, The I/O privilege level (IOPL) in the EFLAGS
register and the I/O permission bit map of a Task State Segment (TSS).
Under Windows NT, there are only two I/O privilege levels used, level 0 & level 3. Usermode programs will run in
privilege level 3, while device drivers and the kernel will run in privilege level 0, commonly referred to as ring 0. This
allows the trusted operating system and drivers running in kernel mode to access the ports, while preventing less
trusted usermode processes from touching the I/O ports and causing conflicts. All usermode programs should talk
to a device driver which arbitrates access.
The I/O permission bitmap can be used to allow programs not privileged enough (I.e. usermode programs) the
ability to access certain I/O ports. When an I/O instruction is executed, the processor will first check if the task is
privileged enough to access the ports. Should this be the case, the I/O instruction will be executed. However if the
task is not allowed to do I/O, the processor will then check the I/O permission bitmap.
The I/O permission bitmap, as the name suggests uses a single bit to represent each I/O address. If the bit
corresponding to a port is set, then the instruction will generate an exception however if the bit is clear then the I/O
operation will proceed. This gives a means to allow certain processes to access certain ports. There is one I/O
permission bitmap per task.
Accessing I/O Ports under NT/2000/XP
There are two solutions to solving the problem of I/O access under Windows NT/2000/XP. The first solution is to
write a device driver which runs in ring 0 (I/O privilege level 0) to access your I/O ports on your behalf. Data can be
passed to and from your usermode program to the device driver via IOCTL calls. The driver can then execute your
I/O instructions. The problem with this, is that it assumes you have the source code to make such a change.
Another possible alternative is to modify the I/O permission bitmap to allow a particular task, access to certain I/O
ports. This grants your usermode program running in ring 3 to do unrestricted I/O operations on selected ports, as
per the I/O permission bitmap. This method is not really recommended, but provides a means of allowing existing
applications to run under windows NT/2000/XP. Writing a device driver to support your hardware is the preferred
method. The device driver should check for any contentions before accessing the port.
However, using a driver such as PortTalk can become quite inefficient. Each time an IOCTL call is made to read or
write a byte or word to a port, the processor must switch from ring 3 to ring 0 perform the operation, then switch
back. If your intentions were to write, for example a microcontroller programmer which is programmed serially using
a parallel port pin, it would make better sense to send a pointer to a buffer of x many bytes. The device driver
would then serialise the data and generate the handshake necessary in the programming of a PIC device.
Such an example is the USBLPTPD11 driver at This driver
accepts a buffer of bytes via the IOCTL_WRITE_I2C IoDeviceCall and then big bangs this out in I2C format on a
parallel port pin. The source code for this driver is available and is well worth a look.
The porttalk device driver comes complete with source code. It provides the facility to modify the IO permission
bitmap and/or write and read to I/O ports via IOCTL calls.
Compatibility - Using existing applications under Windows NT/2000/XP
PortTalk can be used in conjunction with allowio to make existing programs that access the I/O ports work under
Windows NT/2000/XP. As you already know, any 32bit program will cause a Privileged Instruction Exception. As
most programming languages these days do not provide functions to read and write to ports, many hacks have
been produced for Windows 9x and ME such as .DLL libraries. However should you need to run such a program
under Windows NT, an exception will occur. This is where allowio and PortTalk will help.
PortTalk NT4/2000/XP IO Driver Saturday, 12 January 2002 16 Bit Windows and DOS programs will run on virtual machines. In many cases existing applications should be
transparent on Windows NT/2000/XP. However others just refuse to run. The virtual machines has support for
communication ports, video, mouse, and keyboard. Therefore any program using these common I/O ports should
run, however there is often a problem with timing. Other MS-DOS programs accessing specific hardware requires
VDDs (Virtual Device Drivers) written to enable them to be used with Windows NT.
The Virtual Machine will intercept I/O operations and send them to an I/O handler for processing. The way the
Virtual Machine does this, is by giving insufficient rights to I/O operations and creating an exception handler to dig
back into the stack, find the last instruction and decode it. By giving the VDM full rights to I/O ports, it has no means
of intercepting I/O operations, thus creating less problems with timing or the need to provide VDDs for obscurer
hardware.
In order to change a processes IOPM, we must first have the process ID for the process we want to grant access
too. This is accomplished by creating the process ourselves, so we can pass the ProcessID to our device driver. A
small application is used which accepts the program name as an argument. This application then creates the
process (i.e. executes the program) which starts and continues as another process in the system.
Note : We can also register a callback with the operating system which notifies our driver of any processes started
and what their ID is. We can then keep a directory of processes that we want to have access to certain ports. When
this process is executed, the callback informs the driver it has started and what it's process ID is. We could then
automatically change the IOPM of this process. See the Process Monitor driver at Process.zip
When a Windows 32 bit program is started using CreateProcess(), it will return the ProcessID for the 32 Bit
Program. This is passed to the Device Driver using an IOCTL Call.
Create Process
User Defined
Process Starts
Running
Send ProcessID to
Device Driver
Convert ProcessID to
Pointer to Process
Copy New IOPM to
TSS of Process
Adjust IOPM
Offset Pointer
User Mode Application
Ring 3
Kernel Mode Driver
Ring 0
PID = X
PID = Y
End
User Executes Program
Process Y now has exclusive
access to Hardware
IOCTL
Call
DOS programs do not have their own ProcessID's. They run under the Windows NT Virtual DOS Machine
(NTVDM.EXE) which is a protected environment subsystem that emulates MS-DOS. When a DOS program is
called using this program, it will get the ProcessID for NTVDM.EXE and as a result changes NTVDM's IOPM.
However if NTVDM is already resident (if another DOS Program is running) it will return a process ID of zero. This
doesn't cause a problem if the NT Virtual DOS Machine's IOPM is already set to allow any IO operation, however if
the first DOS program was called from the command line without using "AllowIo", the NTVDM will not have the
modified IOPM.
Windows 3.1 programs will run using WOW (Windows on Win32). This is another protected subsystem that runs
within the NTVDM process. Running a Win3.1 program will return the ProcessID of NTVDM in accordance with the
problem set out above.
PortTalk NT4/2000/XP IO Driver Saturday, 12 January 2002 When the device driver has the ProcessID, it finds the pointer to process for our newly created program and sets
the IOPM to allow all I/O instructions. Once the ProcessID has been given to our PortTalk device driver, the allowio
programs finishes.
Running a DOS/Win 3.1 program normally under NTVDM.EXE should not create any major problems. NTVDM will
normally intercept most IO calls and check these resources against the registry to make sure they are not in use.
Should they be in use, a message box will pop up giving the user the option to terminate the program or ignore the
error. If the user chooses to ignore the error, access will NOT be granted to the offending I/O Port.
However using PortTalk to remove all I/O Protection will grant the application full rights to any port. As a result if it
wants to talk to your mouse on COM1, it will. Result - Your mouse freezes. Using this program should be done at
the discretion of the informed and educated user. If not, system instability will result. One solution to this problem is
to be selective to what ports you allow full access too.
Calling your application using
C:\>allowio Test.exe /a
will grant test.exe exclusive access to all ports. However if you use,
C:\>allowio Test.exe 0x378
this will grant test.exe access only to 0x378 to 0x37F. As one byte represents 8 port addresses and that most
devices will use a bank of 8 or 16 addresses, you need not specify every port address, only one port in the 8 byte
boundary. Thus 0x378 will grant test.exe access to LPT1, including the data, status and control registers.
Manipulating the IOPM (I/O Permission Bitmap)
Changing the IOPM within your Kernel Mode Drivers requires the knowledge of a couple of undocumented calls.
These are Ke386IoSetAccessProcess, Ke386SetIoAccessMap and PsLookupProcessByProcessId.
PsLookupProcessByProcessId(IN ULONG ulProcId,OUT struct _EPROCESS ** pEProcess);
The IOPM routines use a Pointer to Process and not the ProcessID. Therefore our first task is to convert the
ProcessID to a Pointer to Process. There are documented calls such as PsGetCurrentProcess(), however we don't
want the current process but rather the pointer to process of the process we wish to grant access to. This
information is passed to the driver in the form of a processID. We must then use the undocumented call
PsLookupProcessByProcessId to convert our ProcessID to a Pointer to Process.
Once we have a Pointer to Process we can start manipulating the I/O permission bitmap using the following
undocumented calls
void Ke386SetIoAccessMap(int, IOPM *);
void Ke386QueryIoAccessMap(int, IOPM *);
void Ke386IoSetAccessProcess(PEPROCESS, int);
Ke386SetIoAccessMap will copy the IOPM specified to the TSS. Ke386QueryIoAccessMap will read it from the
TSS. The IOPM is a 8192 byte array specifying which ports are allowed access and which ones aren't. Each
address is represented by one bit, thus the 8192 bytes will specify access up to 64K. Any zero bit will allow access,
while a one will deny access.
After the IOPM has been copied to the TSS, the IOPM offset pointer must be adjusted to point to our IOPM. This is
done using the Ke386IoSetAccessProcess. The int parameter must be set to 1 to enable it to be set. Calling the
function with zero will remove the pointer.
Talking to the Device Driver - User Mode APIs
PortTalk also has IOCTLs to allow reading and writing to I/O Ports. In this case, your usermode program would
open the PortTalk device driver and pass data to the driver through IOCTL calls. The driver then talks to the I/O
port(s) in ring 0.
PortTalk NT4/2000/XP IO Driver Saturday, 12 January 2002 Starting and installing the driver
In most cases, the PORTTALK.SYS driver isn't required to be explicitly installed. When running the usermode
executable such as allowio.exe, it will check for the device driver and if it cannot be opened, it will install and start
the driver for you. However for this to happen correctly, the PORTTALK.SYS driver must be in the same directory
than the usermode executable ran and the user must have administrator privileges. Once the driver has been
installed for the first time, any user with normal user privileges can access the device driver normally. This is ideal
in classroom/corporate environments where security is paramount.
The driver can also be installed manually using the registry file included. Copy the PORTTALK.SYS to your
/system32/drivers directory and click on the PORTTALK.REG file to load the required registry keys. Then reboot
the computer and on boot-up the PORTTALK.SYS driver will load and start automatically. This is recommended for
classroom/corporate use where the driver can be stored away securely in the system directory.
Check and Free Driver Versions
Two versions of the driver exist. The standard distribution is a free compiled version which has debugging
statements removed and thus execute faster. However when writing your own code, or debugging problems such
as buffer overuns, a checked version of the driver is provided which displays debugging. These debug messages
can be read with any good debug viewer. One such recommended viewer is the System Internals DebugView
which can be downloaded from their website The checked build of the driver is provided in the checked folder of the distribution. Simply replace the
PORTTALK.SYS with this driver and reload to display debug information.
Recompiling the code
The code for the device driver has been compiled using Microsoft Visual C and the Windows 2000 DDK. The
source code is provided, but during the normal development cycle it is not required to be recompiled. It has also
been built for testing purposes on the Windows XP DDK which includes build tools and is no longer dependent on
Microsoft Visual C being installed. (Excellent for Borland Folks)
Revision History
12th January 2002 – Version 2.0, tested on Windows 2000 SP2 and Windows XP RTM.
Self installs driver for ease of use.
Improved type checking.
Distributed with IoExample code showing use of inportb/outportb() inp/outp() macros and IOCTL calls.
6th September 2001 – Version 1.02
Fixed .reg file after previous fix broke Windows 2000 Support. Now supports Windows NT/2000/XP.
26th June 2001 – Version 1.01
Fixed .reg file to support both Windows 2000 and Windows NT4.
13th March 1999 – Version 1.0 first public release for Windows NT4.
PortTalk IOCTL Call Summary
IOCTL_IOPM_RESTRICT_ALL_ACCESS
Operation
Fills the IO Permission Bitmap with 1’s, denying I/O to all ports.
Input/Output
None
Status I/O Block
The Information member is set to zero.
The Status member is set to one of the following values:
STATUS_SUCCESS Operation Succeeded
IOCTL_IOPM_ALLOW_EXCUSIVE_ACCESS
Operation
Fills the IO Permission Bitmap with 0’s, allowing access to all ports.
Input/Output
None
Status I/O Block
The Information member is set to zero.
The Status member is set to one of the following values:
STATUS_SUCCESS Operation Succeeded.
IOCTL_SET_IOPM
Operation
Sets a one byte chunk of the IOPM with a specified offset to Value.
The IOPM (I/O Permission Bitmap) contains one bit for every port value up to 64KB of I/O space. This
equates to an array of 8192 bytes. For example, If it is desired to allow access to 0x378 then you will need
to send a IOCTL_SET_IOPM DeviceIOControl call with an offset of 0x6F (0x378 / 8) and a value of 0xFE
(bit zero cleared). The AllowIO program accompanying PortTalk simply allows access to blocks of 8 bytes
sending a value of 0x00 for each call.
Input
The AssociatedIrp.SystemBuffer member points to three bytes. The first two bytes specify the offset
within the IOPM. The third byte specifies the byte value to write to the IOPM.
The Parameters.DeviceIoControl.InputBufferLength member specifies the input parameter size. 3
Bytes.
Output
None.
Status I/O Block
The Information member is set to the number of bytes read.
The Status member is set to one of the following values:
STATUS_SUCCESS The requested number of bytes were read from the I2C device.
STATUS_BUFFER_TOO_SMALL The input or output buffers are too small.
STATUS_ARRAY_BOUNDS_EXCEEDED The offset has exceeded the bounds of the IOPM
(e.g >= 0x2000)
PortTalk NT4/2000/XP IO Driver Saturday, 12 January 2002 IOCTL_ENABLE_IOPM_ON_PROCESSID
Operation
Enables the current IOPM on the process indicated by ProcessID
Input
The AssociatedIrp.SystemBuffer member points to a ULONG holding the ProcessID.
The Parameters.DeviceIoControl.InputBufferLength member specifies the input parameter size. (4
bytes)
Status I/O Block
The Information member is set to zero.
The Status member is set to one of the following values:
STATUS_SUCCESS The requested number of bytes were send to the I2C device.
STATUS_BUFFER_TOO_SMALL The input buffer is too small.
IOCTL_READ_PORT_UCHAR
Operation
Reads a byte wide I/O Port indicated by PortAddress.
Input
The AssociatedIrp.SystemBuffer member points to a USHORT containing the PortAddress.
The Parameters.DeviceIoControl.InputBufferLength member specifies the size. 2 Bytes.
Output
The AssociatedIrp.SystemBuffer member points to the buffer of bytes read.
Status I/O Block
The Information member is set to 1. (1 byte returned)
The Status member is set to one of the following values:
STATUS_SUCCESS Operation Succeeded.
STATUS_BUFFER_TOO_SMALL Input or Output buffer length too small.
IOCTL_WRITE_PORT_UCHAR
Operation
Writes the byte, value to an I/O Port indicated by PortAddress.
Input
The AssociatedIrp.SystemBuffer member points to a USHORT containing the PortAddress.
The Parameters.DeviceIoControl.InputBufferLength member specifies the size. 2 Bytes.
Output
None.
Status I/O Block
The Information member is set to zero.
The Status member is set to one of the following values:
STATUS_SUCCESS Operation Succeeded.
STATUS_BUFFER_TOO_SMALL Input buffer length too small.
PortTalk NT4/2000/XP IO Driver Saturday, 12 January 2002
Example I/O Program using PortTalk
The Porttalk driver contains two IOCTL calls to read from and write to I/O Ports. A c source file, pt_iotcl.c can be
used to provide easy support based on the popular inportb/outportb and inp/outp calls supported in earlier
programming environments. By simply including pt_ioctl.c and calling OpenPortTalk when you program starts and
ClosePortTalk when your program finishes you can have the functionality of the inportb/outportb and inp/outp calls.
#include <stdio.h>
#include <windows.h>
#include <pt_ioctl.c>
void __cdecl main(void)
{
unsigned char value;
OpenPortTalk();
outportb(0x378, 0xFF);
value = inportb(0x378);
printf("Value returned = 0x%02X \n",value);
outp(0x378, 0xAA);
value = inp(0x378);
printf("Value returned = 0x%02X \n",value);
ClosePortTalk();
}
The sample program above is included in the IoExample directory along with the pt_ioctl.c. The pt_ioctl can be
used as an example of how to load and open the driver and then make IOCTL_WRITE_PORT_UCHAR and
IOCTL_READ_PORT_UCHAR calls.
-
ik heb hem uitgelegd hoe hij via de afstandbediening de client kan programmeren cardserv is default instelling
en staat dus achter in de string kan je ook een andere naam voor geven:
CWS = dreambox 10001 root dreambox 01 02 03 04 05 06 07 08 09 10 11 12 13 14 lan cardserv
-
ik zou gewoon met je afstandbediening op de client bij uitgebreide emu instellingen voor newcam nog eens op blauw drukken en dan op de gele toets naam vd server ip adres van de dreambox in je netwerk 10.0..... en bij user de naam,wachtwoord,des hetgeen je op de server hebt aangemaakt net op lan en cardserver cardserv dan drukken op de groene toets op beide boxen even emu opnieuw starten en als je alles goed hebt ingevoerd moet het werken.
-
De geruchten gaan al even, maar nu stromen er toch wel heel veel mailtjes binnen waarin staat dat volgens zeer betrouwbare bronnen Prins Bernhard is overleden. De RVD ontkent tot nu toe nog en zegt dat het juist beter gaat met Prins Bernhard. Het schijnt dat in dit soort gevallen men het nieuws "synchroniseert" zodat iedereen het tegelijk kan brengen. Het is een bijzondere week... Update: Binnen SBS6 is gecommuniceerd dat Prins Bernhard is overleden, maar vooralsnog wordt het niet uitgezonden. Update 2: Het mediapark wordt momenteel helemaal in gereedheid gebracht.Update 3: hoewel de RVD ontkent.
Dit is dus geen grap, staat op meerdere sites geschreven!!
(bron $#@%!%#$#@#!)
-
leuk voor de Mol, jammer voor de kids die wild zijn van nickolodeon Kon die geen eigen transponder huren, zeker te duur voor iemand met zo;n vermogen. <img src="/ubbthreads/images/graemlins/anoniem.gif" alt="" /> <img src="/ubbthreads/images/graemlins/loldev.gif" alt="" />
Laten we maar hopen dat hij naast voetbal ook echt iets gaat toevoegen en de zender een aanwinst is
-
er komt een migratietraject van ird1 naar ird2, er is kennelijk echter veel ruis hoe dit gaat verlopen,
De helpdesk van C+ geeft aan dat de duidelijkheid eind 2004/begin 2005 gaat komen.
Met bijvoorbeeld radegast of newcamd 5.24 kan de ird2 kaart die ook een maandelijkse update krijgt prima overweg en evenals seca2 geen zorgen over de update.
Belangrijk is dus gewoon dat. zo als het ook hoort, je gewoon een goed geregistreerde gebruiker bent van C+.
Iedereen die nu zonder kaart kijkt gaat in de loop van volgend jaar op zwart v.w.b. het nederlandse pakket. <img src="/ubbthreads/images/graemlins/anoniem.gif" alt="" />
-
hoe heb je de schotel ingesteld, begonnen bij Sirius of Astra?
-
Dit maakt wel verschil hangt overigens ook van de diameter v-d schotel af.
Advies draai naar een ´zwakke´ satelliet stel dan af op het beste signaal en daarna terug naar de overige en controleer ook daar even het signaal.
Door het verschuiven ontstaat er een ander hoek! ga het wiskundig maar eens narekenen.
-
kijk op de site van de fabrikant klik bij poducts type dreambox aan en dan in het volgende scherm de goedgekeurde harddisks.
Zet je de maxtor erin die op zich wel werkt in de dreambox plaats dan ook de voedingmodificatie zie via de zoekfunctie het Topick daarover van het saterelid M.....l
-
CanalDigitaal BV
Postbus 444
1200 JJ Hilversum
Wil je een brief aan de directie sturen dan t.a.v. de heer C.F.Bohnen
-
Ach als het niet te ver is wil ik ook wel mee! <img src="/ubbthreads/images/graemlins/loldev.gif" alt="" /> <img src="/ubbthreads/images/graemlins/loldev.gif" alt="" /> <img src="/ubbthreads/images/graemlins/loldev.gif" alt="" /> <img src="/ubbthreads/images/graemlins/loldev.gif" alt="" />
-
In de dreambox autodchp uitsetten en adres toekennen, in de router even dreambox aanmken met een vast adres, moet vlgs mij het probleem verholpen zijn.
-
En is dus een goedgekeurde ontvanger, als je beschikt over een geregistreerde Multichoicekaart krijg vlgs mededeling straks een irdeto 2 kaart toegezonden, controleer wel even of alle gegevens kloppen, kan nu door te bellen.
Einde van het jaar zal dit waarschijnlijk ook wel via internet kunnen zoals bij de seca 2 overgang.
CDS bedoeld met illegale ontvangers waarschijnlijk alle machines die op emu's of funkaarten draaien, ja daar is straks het beeld zwart op het nederlandese pakket.
-
Eén van mijn dreamboxen is een versie 3c die zonder cam nog al eens wat storing (freezes) gaf sinds ik met 108 draai en de laatste rudream draait ook deze box nu probleemloos.
Dus in 108 zitten kennelijk wel wat verbeteringen die in ieder geval dit probleem hebben opgelost.
-
ik heb geleerd kopen in buitenland is prima maar dan wel zelf halen, ik koop nogal eens wat in duitsland, het is eve rijden maar dan weet je zeker dat wat je gekocht hebt ook echt krijgt want daar zit het probleem.
-
Als je een geregistreerde seca 2 en ird 2 kaart is het vlgs de helpdesk een brief schrijven, ik heb ze dit laatst een keer gevraagd. Ik heb nu ird2 C+ abbo seca2 basis pakket.
-
Volgens de helpdesk van C+ zijn er inmiddels weer dealers die ook de irdetokaarten 2 verkopen, dus als je geen originele geregistreerde kaart hebt ird 1 is dit in maart ook een alternatief.
-
Citaat:geef je prdehoop even een dreun van me ?
Moeten we je missen dan op die zondag nabij mijn woonplaats Ome Merde? <img src="/ubbthreads/images/graemlins/loldev.gif" alt="" />
-
Ik heb meegemaakt dat mijn ird 2 kaart C+ niet meer werkte, uodate aangevraagd en binnen notime terwijl ik aan de lijn hing weer beeld, dus inderdaad een maandelijkse update, doet ie ut niet gewoon bellen met het speciale nummer en ze verzenden de update.
-
lees mijn antwoord nu gewoon goed, een brief sturen!
-
volgens mij staan de tijden nu wel goed, zowel op teletekst stond gisteren(bij C+) ook verkeerd als op epg
-
Thanks, naar binnengehaald en inderdaad beeld, itv 1 & 2 echter niet, weet je ook die fta frequentie of is dat noge te vroeg?
Kijk net even naar ITV news, betreft hier een nieuw kanaal!
-
Dit is een versie die ook bij mijn kinderen draait, maar ja het is al laat, zet in het pmt menu optie 8 & 9 maar eens aan en uit wil ook wel eens helpen.
(kan het nu eve niet testen heb hier geen nokia bij de hand.
-
Probeer eens het volgende:
Menu (blauwe knop)
Info (rode knop)
6- Autoswith op OFF zetten.
Hoe downloaden vanaf dreambox ???
in Dreambox
Geplaatst:
wat in ieder geval nodig is is een verbinding met internet name server ip adres provider of router ,gateway ip adres router, hierna zou het normaal moeten werken.