
Zitat von
Metal_Snake2:
Leider sind Hooks durch das ausnutzen einiger user negative behaftet, obwohl Hooks dem programmierer viel macht verleiehen.
Manchmal sind sie sogar unumgänglich, siehe Registryzugriff auf Windows 2000. Ab XP gibt es einen Callback-Mechanismus vom System.

Zitat von
Metal_Snake2:
Jedoch kann man dies weiter Differenzieren. Treiber sind mehr als Module die Beim booten als Dienst aus der Registry geladen werden und nur zur steuerung von Harware Ressourcen dienen. Es gibt Treiber die auf andere Treiber schichten(Layered Drivers), manche nennen sie auch Sandwich Trieber. Solche Treiber werden meistens für Filter zweck verwendet, z.B. benutzen viele Kommerzielle Firewalls einen NDIS IM Treiber welcher die NDIS
API Hooken und zwichen der TDI und der NetCard schichten(daher auch Sandwich Treiber). Solche Treiber greifen also nicht direkt auf die Harware zu.
Sandwich höre ich in dem Zusammenhang zum ersten Mal

Zitat von
Metal_Snake2:
Generell sollte jeder einen Treiber(Kernel geschichten) in C mit der DDK schreiben. Microsoft hat sogar mit der WDM einen gewissen Standart für Treiber Programmierung herausgebracht.
... oder in C++ mit dem KMDF

Zitat von
Metal_Snake2:
Wer sich für Kernelprogrammierung interisiert soltte sich am besten enstprechende Bücher besorgen.
... oder an den entsprechenden Seminaren teilnehmen (OSR, Oney und wie sie alle heißen ...).
Der Glossar-Eintrag für "
Standart" ist ja Spitze
Nachtrag:

Zitat von
richard_boderich:
dort gibt es eine option
"I/O Permission Map Grid, die mir so aussieht als ob ich da zugriff auf nur bestimmte adressen zulassen kann. was haellst davon? das ist jetz gwioport. wie gesagt ich habs mit portio.sys
gemacht.
Das ist eigentlich fast noch heftiger als "normaler" generischer Port-I/O, weil er damit komplett die Beschränkungen des Systems umgeht

Zitat von
Graham Wideman:
Getting Permission From NT
Under NT, "user-mode" code (ie: applications written by mere mortals) is not allowed to
access hardware directly, hence when your application attempts to execute an I/O instruction you get an
exception. The idea is, of course, that hardware resources are things that no application should just take over at will, instead it should be up to the operating system (and its drivers) to arbitrate between different apps requests to use those resources.
That's the theory.
Turns out that the NT kernel maintains a map of I/O port addresses that each process is allowed to access, and for your apps that's normally set to "none". But we can tell NT to use a different I/O Permissions Map (IOPM) for our process and thereby gain
access to the ports.
This approach is of course very naughty from a disciplined OS standpoint, so not recommended for widely distributed commercial apps. But for those times when you just need to hack on some hardware, who has time to write a proper NT device driver?

Zitat von
Daniel G:
Ginge das auch öffentlich? Also, nicht das du Richards Code hier auseinandernimmst, sondern dass du sagst, wie's prinzipiell ginge. Weil ich mich etwas schlau gemacht hab' im Web und eigentlich eine Funktion zum Anzeigen der Temperatur in meinem Programm "CPUiD" integrieren will (in nächster Zeit). Allerdings wird dafür auch GIVEIO.SYS verwendet...
Der Code für einen Treiber wird wenn dann definitiv OpenSource, japp.
Noch'n Nachtrag:
Ich finde beide, giveio.sys und gwiopm.sys äußerst interessant vom technischen Standpunkt her, aber aus der im obigen Artikel beschriebenen Sicht bleibt mir fast der Atem weg.
Beispiel: dank gwiopm.sys kann man IN und OUT direkt aus seinem Delphi-Programm anwenden. Nichtmal NT-Treiber benutzen IN und OUT direkt, weil es dazu Wrapper in der HAL.DLL gibt. Diese Wrapper garantieren, daß sich das ganze auch dann noch sauber verhält, wenn es für ein anderes System kompiliert wird. Siehe READ_PORT_* und READ_REGISTER_* ...