mikrocontroller.net

Forum: PC-Programmierung API & Kernel


Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich arbeite mich gerade in den Aufbau und die Funktion eines
Betriebssystems ein und bin nun bei einer Frage stecken geblieben:
Der Kernel von z.B. Windows stellt ja viele Funktionen zur verfügung.
Sind diese Funktionen die in den API des Betriebssystems vorhandenen
Funktionen? Oder sind das verschiedene Interfaces?

Würde mich über Hilfe freuen!
Gruß Tobias

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Windows bietet verschiedene APIs. Die für normale Usermode-Programme
übliche Win32-API (die in einigen Fällen Aufrufe mehr oder weniger
direkt an den Kernel "durchreicht") und unter anderem auch die
Kernel-API, die für Programme zur Verfügung steht, die im Kernelmode
laufen. Das sind in der Regel Devicetreiber, die wiederum nicht auf die
Win32-API zugreifen können.
Der Aufruf von Kernel-APIs durch Usermode-Programme ist nicht
vorgesehen.

Literaturhinweis: "Inside Windows NT" von Helen Custer
Link: www.sysinternals.com mit vielen interessanten Aufsätzen unter
anderem von Mark Russinovich
Noch'n Link: www.osr.com - da gibt es den "OSR Insider", eine sehr
anspruchsvolle Publikation, die sich mit den Aspekten der
Devicetreiberprogrammierung beschäftigt, aber auch auf den generellen
Aufbau von Windows NT eingeht.

Achja: Windows 2000 und XP sind Windows NT und haben mit Windows 95 und
seinen Aufgüssen 98 und Me nichts gemein.

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antowrt!

Dann ist die Win32-API also ein Interface, das wiederum Funktionen aus
dem Kernel aufruft, die das Kernel-API bilden. Wenn ich nun ein
Programm mit z.B. C oder ähnlichem schreibe, dann greift dieses
Programm nie direkt auf den Kernel zu, sondern über das Win32
Interface? Ich hoffe ich habs richtig verstanden!

Gruß Tobias

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, genau so läuft das ab.

Autor: Marillion (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus:

>Windows 2000 und XP sind Windows NT und haben mit Windows 95 und
seinen Aufgüssen 98 und Me nichts gemein.

Das betrifft doch sicher nur die Innereien der BS. Ein API-Aufruf mit
einer bestimmten Funktion in W95, wird in XP die gleiche Funktion
ausführen, oder liege ich falsch?



Marillion

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz oberflächlich gesehen führen die gleichen Win32-API-Funktionen auf
beiden Windows-Varianten dasselbe aus.
Im Detail aber eben gar nicht, da sich große Teile der Implementierung
massiv unterscheiden. Windows 95 & Konsorten unterstützt nur einen
Bruchteil der Funktionen von NT, und das teilweise auch nur mit
erheblichen Einschränkungen, die vielen Programmierern schon so oder so
die Finger gebrochen haben.

Du musst Dir nur mal die Kommentare zu etlichen API-Funktionen ansehen;
MS beschreibt da (mittlerweile) ganz gut die jeweiligen
Einschränkungen.

Beispiele:
- nur sehr unvollständige Unicode-Implementierung in Windows 95 etc.

  Auszug aus der Dokumentation von CreateFile:

  lpFileName
    [in] Pointer to a null-terminated string that specifies
    the name of the object to create or open.

    Windows NT/2000/XP:
    In the ANSI version of this function, the name is
    limited to MAX_PATH characters. To extend this limit
    to nearly 32,000 wide characters, call the Unicode
    version of the function and prepend "\\?\" to the path.

    Windows 95/98/Me: This string must not exceed MAX_PATH
    characters.

Das bedeutet also, daß a) CreateFile unter Windows95 keine
Unicode-Dateinamen kennt und b) entsprechend keine sehr langen Pfade
verwendet werden können (MAX_PATH ist 255).

- Beschränkung vieler API-Parameter auf 16-Bit-Int-Werte (Scrollbars,
Länge des Textes, der von Edit-Controls verarbeitet werden kann)

  Auszug aus der Dokumentation von EM_LIMITTEXT:

    Edit controls on Windows 95/98/Me: For single-line edit
    controls, the text limit is either 0x7FFE bytes or the
    value of the wParam parameter, whichever is smaller.
    For multiline edit controls, this value is either 0xFFFF
    bytes or the value of the wParam parameter, whichever
    is smaller.

Dazu kommt, daß gerade im Bereich der Benutzerkonten,
Berechtigungsverwaltung etc. Windows 95 etc. sehr viele Funktionen gar
nicht aufweist; so gibt es keine Dienste und auch keine Impersonation.
Letzteres ist der Grund für viele ärgerliche Probleme, wenn Windows 95
etc. in einem Netzwerk verwendet werden sollen.

Autor: Ingo H. (putzlowitsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei ich gut 32000 Zeichen in einem einzeiligen Eingabefeld nicht
wirklich für eine Beschränkung halte.

Da ist das 64k Problem bei mehrzeiligen Editfeldern schon deutlich
unangenehmer. Leider begegnet einem diese 64k-Grenze bisweilen auch
heute noch an anderen Stellen, und nicht nur unter Windows 95/98/ME.
Dabei sollte man meinen, das im Zeitalter des Übergangs von 32 nach 64
Bit derartige Dinge der Vergangenheit angehören.
Ich habe erst kürzlich seltsame Dinge bei VBA in Word erlebt, weil ein
Modul (von einem Dritthersteller) grad knapp unter der ominösen
64k-Grenze lag und ich dieses erweitern sollte...

Gruß
Ingo

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider scheint die Limitierung auch bei mehrzeiligen Eingabefeldern zu
existieren. Dort kommt es allerdings auf die Version (rich edit 1/2,
plain/rich usw..) an, die man benutzt. Ich weiss leider nicht, welche
Versionen welche Win-Version unterstützt

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
EditControl != RichTextControl

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, wieder was dazugelernt. wx differenziert da nicht, deshalb meine
falsche Vermutung

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.