Autor Thema: [Erledigt] Port-Verwaltung  (Gelesen 9707 mal)

FlashBurn

  • Beiträge: 844
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 11. August 2010, 15:38 »
Dir fällt aber die Rendundanz und Sinnlosigkeit der Bitmap im UserSpace auf, oder?

Programm Noob

  • Gast
Gespeichert
« Antwort #21 am: 11. August 2010, 15:46 »
Diese Redudanz ist gewollt, sollte ein Treiber meinen, er müsse die eigene Bitmap verändern und dann auf den Port zugreifen, wird der Prozess sofort beendet. damit sollen Treiber, die das System Lahmlegen sollen ausgeschaltet werden.

Programm Noob

FlashBurn

  • Beiträge: 844
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 11. August 2010, 15:56 »
Ja, aber es ist doch sinnlos! Vorallem kostet es Performance wenn jedes Mal erst im UserSpace nachguckst und dann nochmal genau das selbe im Kernel machst, also wozu die Bitmap im UserSpace?

Programm Noob

  • Gast
Gespeichert
« Antwort #23 am: 11. August 2010, 16:40 »
Den einen Grund hae ich schon gesagt und hier kommt der zweite:
Wenn in der Userspace map das entsprechende bit nicht gesetzt ist, wird der Syscall nicht ausgeführt, sondern die Funktion  return ohne etwas gemacht zu haben und soll später dann nach stderr eine Fehlermeldung schreiben. Auserdem muss ich im Kernel nicht in einer bitmap gucken, sondern in einem Array.

Programm Noob
« Letzte Änderung: 11. August 2010, 16:42 von Programm Noob »

FlashBurn

  • Beiträge: 844
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 11. August 2010, 16:53 »
Gut dann noch eine Frage, warum sollte ein Treiber auf einen Port zugreifen wollen, auf den er nicht/den er nicht braucht?

Vorallem finde ich den Unterschied krass. Einmal passiert gar nichts und einmal wird der Prozess beendet.

Der Punkt ist doch, ein Treiber der nur das macht was er soll/darf wird nie auf einen Port zugreifen der für ihn nicht freigegeben ist. Also kostet das Nachgucken im UserSpace nur Zeit/Performance.

Das mit stderr kannst du auch aus dem Kernel heraus machen.

Zitat
Auserdem muss ich im Kernel nicht in einer bitmap gucken, sondern in einem Array.
Das ist erstens egal und zweitens ist das Array sogar schnell, verbraucht halt nur mehr Speicher.

Programm Noob

  • Gast
Gespeichert
« Antwort #25 am: 11. August 2010, 17:00 »
Es soll ja Schadprogramme geben, die sich als Treiber tarnen und das System lahm legt. Und du hast recht ich sollte wenn ein Prozess auf einen Port zugreifen will, den er nicht registriert hat den Prozess beenden.

FlashBurn

  • Beiträge: 844
    • Profil anzeigen
Gespeichert
« Antwort #26 am: 11. August 2010, 17:19 »
Was die Schadprogramme betrifft die sich als Treiber tarnen.

Also ich würde mir darüber an sich eigentlich keine Gedanken machen (weil wieso sollte man ein Schadprogramm für dein OS schreiben?), aber besser jetzt als später.

Allerdings kommt es jetzt noch drauf an, wie du die Treiber lädst. Ich will damit sagen, das es einen unterschied macht, ob sich ein Treiber irgendwo selbst einträgt oder ob z.B. ein Device-Manager einen vermeintlichen Treiber fragt, ob er für diese eine bestimmte Hardware (für die er gerade einen Treiber sucht) ein Treiber ist.
Gut jetzt könnte der Treiber immer sagen das er für die Hardware zuständig ist.

Ich wollte das ganze so lösen, das ich nur 1 oder 2 bestimme Verzeichnisse habe, wo sich die Treiber befinden.
Entweder ich lade jeden Treiber kurz und dieser nennt mir die Hardware welcher er implementiert und ich trage das ganze in eine Liste ein oder jeder Treiber muss eine spezielle Sektion (ich meine hier ein Segment/Sektion einer ELF Datei) haben, in der mind 1 Eintrag einer bestimmten Struktur steht, welche Hardware er implementiert (das wird dann wieder in eine Liste geschrieben).
Die letzte Methode ist die sicherste und auch von der Performance her beste Methode.

Vorteil ist hier das ich einfach ne Art "Beobachter" installieren kann, dieser sagt mir dann jedes Mal bescheid wenn sich in dem Verzeichnis was ändern sollte und ich kann einfach den Treiber aus der Liste nehmen, bzw. ihn neu hinzufügen. Damit wird die Installation von Treiber natürlich verdammt einfach und effizient.

Programm Noob

  • Gast
Gespeichert
« Antwort #27 am: 11. August 2010, 18:30 »
Es werden alle Treiber gestartet und in eine Liste eingetragen.danach werden PCI USB und so gescant und dann der Treiber der zu dem Gerät gehört in die Geräte liste eingetragen. Wenn jetzt ein Treiber soweit programmiert wird, das er sich richtig einträgt und so, kann er nicht als falscher Treiber erkannt werden. Deshalb diese vorkehrungen.

 

Einloggen