syscall aufrufen



  • Hallo!

    Ich weiß nicht genau ob ich in diesem Forum hier richtig bin. Ich möchte aus meiner Win32 Anwendung einen syscall ausführen. Leider habe ich von Assembler keine Ahnung und was ein syscall ist, habe ich gerade in der Wikipedia gelesen.

    Könnte mir also jemand erklären wie ich so einen syscall aus der Anwendung heraus aufrufe?

    Gruß
    Georg



  • Entsprechenden Header inkludieren und Library linken, dann einfach aufrufen.
    Simon



  • theta schrieb:

    Entsprechenden Header inkludieren und Library linken, dann einfach aufrufen.
    Simon

    So würde ich es mit einer normalen API-Funktion machen. Jedoch an einen syscall komme ich doch so nicht heran!?

    Gruß
    Georg



  • Dann habe ich syscall falsch verstanden, ich nahm an, das sei ein OS Aufruf.
    Simon



  • WAS willst Du denn mit einen "syscall"?



  • Jochen Kalmbach schrieb:

    WAS willst Du denn mit einen "syscall"?

    Es geht um SendInput. Ich möchte einige Daten an ein Fenster setzen, das aber auch höhere Rechte als mein eigenes haben kann. In diesem Fall schälgt SendInput fehl ohne einen Fehlercode mitzuteilen. Das würde ich aber gerne dem Benutzer mitteilen.

    Als ich im Forum mal nach Möglichkeiten gesucht habe, habe ich diesen Beitrag. Im verlinkten pdf ist zu lesen, dass NtUserCheckAccessForIntegrityLevel ein syscall ist.

    Also würde ich diesen gerne aufrufen und im Vorfeld zu gucken, ob SendInput klappt.

    Gruß
    Georg



  • Du willst also "NtUserCheckAccessForIntegrityLevel " aufrufen...

    Mach Dir die Signatur der Funktion als typedef, lade ntdll.dll und verwende GetprocAddress um den Zeiger auf die Funktion zu bekommen; dann kannst Du sie aufrufen...



  • Jochen Kalmbach schrieb:

    Du willst also "NtUserCheckAccessForIntegrityLevel " aufrufen...

    Mach Dir die Signatur der Funktion als typedef, lade ntdll.dll und verwende GetprocAddress um den Zeiger auf die Funktion zu bekommen; dann kannst Du sie aufrufen...

    Wie ist denn die PROCESSINFO struct definiert? Habe ich leider keine Informationen dazu.



  • Zieh' die doch einfach das DDK, da findest du alle nötigen Strukturen/Funktionsprototypen etc.



  • hustbaer schrieb:

    Zieh' die doch einfach das DDK, da findest du alle nötigen Strukturen/Funktionsprototypen etc.

    Ist leider nicht darin enthalten.



  • Die PROCESSINFO ist wohl "opaque". D.h. du musst die von Windows bereitgestellten Funktionen verwenden um darauf zuzugreifen.
    Da du nur Zeiger auf PROCESSINFO rumreichen wirst, reicht hier eine fwd. decl.



  • hustbaer schrieb:

    Die PROCESSINFO ist wohl "opaque".

    Hmm, das nehme ich an, da die Funktionen auch nicht "vorhanden" sind.

    hustbaer schrieb:

    D.h. du musst die von Windows bereitgestellten Funktionen verwenden um darauf zuzugreifen. Da du nur Zeiger auf PROCESSINFO rumreichen wirst, reicht hier eine fwd. decl.

    Das versteht ich nicht ganz. Welche Windows Funktionen soll ich nutzen und wie mache ich hier die forward decl.?

    Gruß
    Georg



  • Sind die Prototypes im neuesten DDK nicht vorhanden? (Ich hab nur ein älteres hier, da gibt es nix.)
    Wenn nicht, musst du dich wohl oder übel auf die Suche begeben.

    Wenn du garnix findest, könntest du dich im WINE Projekt umsehen. Da die Windows emulieren, müssen die alle möglichen und unmöglichen Funktionen implementieren. Die Prototypes kann man sich da meist schön rauskopieren, da sie den Originalen entsprechen (müssen). Und Informationen über die Verwendung/Bedeutung einzelner Aufrufe kann man vielleicht aus der Implementierung rauslesen.

    Ansonsten vielleicht mal in MS-lastigeren Foren, oder in Treiber-Entwickler Foren/Newsgroups fragen. Hat zwar mit Treibern nix zu tun, aber die Treiber-Leute kennen die ganzen NTDLL Funktionen besser als sonstwer (ausgenommen den Kernel-Entwicklern bei MS hoffentlich 🙂 ).

    p.S.: mit "Windows-Funktionen" meine ich nicht die die im SDK dokumentiert sind, sondern die ganzen NTDLL Funktionen (ala ZwCreateFile, ...).


Log in to reply