RtlCopyMemory() von Kernel32.dll richtig aufrufen



  • Geht mir nur darum, dass falls ich die Funktion mal brauche, sie auch mit mir herumtragen kann.
    Ich habe ja nichts gegen die Simplere.



  • In meinem kernel32.dll gibt es eine Funktion mit dem Namen RtlCopyMemory.



  • #ifdef RtlZeroMemory
    #undef RtlZeroMemory
    #endif
    DECLSPEC_IMPORT VOID WINAPI RtlCopyMemory(PVOID, PVOID, SIZE_T);
    


  • So natürlich, wie komm ich auf zero..

    Cu30p3 schrieb:

    #ifdef RtlCopyMemory
    #undef RtlCopyMemory
    #endif
    DECLSPEC_IMPORT VOID WINAPI RtlCopyMemory(PVOID, PVOID, SIZE_T);
    


  • roflo schrieb:

    while(l --> 0)
    		*e++ = v;
    
    while(l --> 0)
    		*e = v, e -=- true;
    


  • So natürlich, wie komm ich auf zero..

    Cu30p3 schrieb:
    C:
    #ifdef RtlCopyMemory
    #undef RtlCopyMemory
    #endif
    DECLSPEC_IMPORT VOID WINAPI RtlCopyMemory(PVOID, PVOID, SIZE_T);

    "Fehler LNK2019 Verweis auf nicht aufgel÷stes externes Symbol ""__declspec(dllimport) void __stdcall RtlCopyMemory(void *,void *,unsigned long)" (__imp_?RtlCopyMemory@@YGXPAX0K@Z)" in Funktion "_main"."

    Die anderen kernel Funktion funktionieren, kann also nicht am Linken liegen.



  • schreib extern "C" davor:

    extern "C"
    {
        DECLSPEC_IMPORT VOID WINAPI RtlCopyMemory(PVOID, PVOID, SIZE_T);
    }
    


  • "Fehler LNK2019 Verweis auf nicht aufgelöstes externes Symbol "__imp__RtlCopyMemory@12" in Funktion "_main""

    Außerdem sind die zwei auch immer dabei:
    "Fehler LNK2019 Verweis auf nicht aufgelöstes externes Symbol "@__security_check_cookie@4" in Funktion "_main""
    "Fehler LNK2019 Verweis auf nicht aufgelöstes externes Symbol "___security_cookie" in Funktion "_main""



  • Wenn du die CRT etc nicht mitlinkst sind die letzten beiden klar. Einfach in den Projekteinstellungen unter C++ alle sicherheitsüberprüfungen deaktivieren oder auf standard setzen.
    Edit: hab mir jetzt mal eigenhändigs die kernel32.dll unter die lupe genommen und siehe da, sie exportiert keine funktion 'RtlCopyMemory'.
    Aber 'RtlMoveMemory', was genau das gleiche macht.



  • Hab ich nach Biolunar's post auch gemacht, und jop, keine copy memory 😃





  • Kommt wohl darauf an,ob man für x86 oder x64 baut. In syswow64's kernel32.dll gibts (bei mir jedenfalls) kein rtlcopymemory. Allgemein sollte man nicht setzen, dass die funktionen im windows sdk auch wirklich in irgendwelchen dlls stecken.
    Bau einfach memcpy etc nach, musst du eh, der Compiler kann nämlich einfach so random calls zu diesen machen.



  • Hat jetzt echt keiner von euch auf die MSDN Seite zu RtlCopyMemory geguckt?
    Die Funktion ist in der NTDLL.DLL zu finden.

    roflo schrieb:

    Allgemein sollte man nicht setzen, dass die funktionen im windows sdk auch wirklich in irgendwelchen dlls stecken.

    Wieso nicht? Jedes Windows Programm setzt darauf.



  • hustbaer schrieb:

    Hat jetzt echt keiner von euch auf die MSDN Seite zu RtlCopyMemory geguckt?
    Die Funktion ist in der NTDLL.DLL zu finden.

    Ich meine was von wegen makro gelesen zu haben. Hast aber recht.

    hustbaer schrieb:

    roflo schrieb:

    Allgemein sollte man nicht setzen, dass die funktionen im windows sdk auch wirklich in irgendwelchen dlls stecken.

    Wieso nicht? Jedes Windows Programm setzt darauf.

    Ich erzähl mal wieder Müll.



  • roflo schrieb:

    Ich meine was von wegen makro gelesen zu haben. Hast aber recht.

    Weil das eine Funktion für Treiber ist, die wahrscheinlich aber doch irgendwo verwendet wurde und Microsoft sich nicht traut, sie ohne weiteres aus dem SDK rauszunehmen.



  • Naja, da es auch bei Treibern mittlerweile nicht akzeptabel ist wenn diese in der nächsten Windows Version auf einmal nicht mehr funktionieren, macht das nicht wirklich nen grossen Unterschied, oder? 🙂


Anmelden zum Antworten