nVidia-Graphiktreiber ruft Kernelfunktionen auf?
-
Hiho,
also mein Programm tut nichts ausser den Videobuffer zu clearen und dann anzuzeigen. Dubioserweise ruft die Funktion
DrvPresentBuffer
, die wahrscheinlich das Äquivalent zu meinem SFMLsf::RenderWindow::display
ist, dann irgendwelche Kernel-Funktionen auf, u.A.AllocateHeap
undAnsiStringToUnicodeString
.
Bild von einem Callstack Snapshot: https://i.imgur.com/YVrCNBg.png
Weiss jemand, ob das normal ist?Grüssle
-
Was genau ist für dich daran so überraschend? Ich mein, wir reden hier von einem Driver!? Sollte doch klar sein, dass der notwendigerweise Kernelfunktionen aufrufen wird...
-
Wieso konvertiert die Funktion, die dazu da ist, den Framebuffer zu swappen, einen ANSI string in einen Unicode string? Wenn das für dich nicht verwunderlich ist...
-
szyrgiyij schrieb:
Wieso konvertiert die Funktion, die dazu da ist, den Framebuffer zu swappen, einen ANSI string in einen Unicode string? Wenn das für dich nicht verwunderlich ist...
das was du da siehst ist eine stack ansicht. Es zeigt quasi die hierarchie der aufrufe auf, die funktionen darin rufen nur die unmittelbar darueber liegende funktion auf, alles darueber hinaus ist nicht mehr auf sie zurueck zu fuehren.
szyrgiyij schrieb:
Dubioserweise ruft die Funktion
DrvPresentBuffer
,.., dann irgendwelche Kernel-Funktionen auf, u.A.AllocateHeap
so ziemlich jede software allokiert speicher. das kann z.B. temporaerer speicher sein um daten aufzusetzen die dann an die GPU gereicht werden oder sonst was. Dubios sind allokationen nicht.
AnsiStringToUnicodeString
.Jetzt weisst du anhand meiner oberen beschreibung, dass der driver das nicht aufruft, sondern nur AllocateHeap. die AnsiStringToUnicodeString funktion wird dann aus der ntdll von AllocateHeap aufgerufen. Dafuer ist der treiber genausowenig verantwortlich wie die haupt applikation.
brauchst dir also eher keine sorgen deswegen machen, wer weiss schon was MS da anstellt.
-
Es kann sich um Stringformatierung für Fehlerausgaben handeln. Wenn du sowas schreibst:
if(DebugMode()) { sprintf(Text,...); outputstream(Text); }
Damm kann der compiler das sprintf rausziehen, sofern er Nebenwirkungen ausschliessen kann.