2016-10-10 5 views
-2

Ich möchte NtReadFile einhaken, so dass es Text ändern kann, der aus der Datei gelesen wird. Aber wenn ich versuche, eine Datei zu lesen, bekomme ich die Meldung "Diese Anwendung konnte nicht gestartet werden, da die Anwendungskonfiguration falsch ist".Hook NtReadFile. Ändern Sie den Text

Hier ist mein Code. Was ist los mit dir?

NTSTATUS HookNtReadFile (
    IN HANDLE FileHandle, 
    IN HANDLE Event, 
    IN PIO_APC_ROUTINE ApcRoutine, 
    IN PVOID ApcContext, 
    OUT PIO_STATUS_BLOCK IoStatusBlock, 
    OUT PVOID Buffer, 
    IN ULONG Length, 
    IN PLARGE_INTEGER ByteOffset, 
    IN PULONG Key) 
{ 
    NTSTATUS retstatus; 

    retstatus = glRealNtReadFile (FileHandle, Event, ApcRoutine, ApcContext, IoStatusBlock, Buffer, Length, ByteOffset, Key); 

    IoStatusBlock->Information = 3; 
    Length = 3; 
    Buffer = ExAllocatePool(PagedPool, Length); 
    Buffer = "hi"; 

    return retstatus; 
} 
+0

Haben Sie versucht, die [Schritte] (https://support.microsoft.com/en-us/kb/948854) für diese Fehlermeldung aufgeführt? –

+0

Warum versuchen Sie das zu tun? – andlabs

+0

@andlabs es ist eine meiner Aufgaben in uni. Ich habe einen anderen Haken (NtCreateFile, NtOpenFile ...), aber mit NtReadFile habe ich ein paar Probleme. –

Antwort

1

klar geht, nicht zu arbeiten:

Buffer = ExAllocatePool(PagedPool, Length); 
Buffer = "hi"; 

Sie das Zuweisen von Speicher, dann sofort die Adresse zu verwerfen. Dies ist nicht, wie Sie Zeichenfolgen in C kopieren. Sie müssen strcpy oder vorzugsweise eine der sichereren Alternativen verwenden.

Es ist auch erwähnenswert, dass die native API keine ASCII-Zeichen verwendet. Im Allgemeinen werden alle Strings als breite Strings erwartet.

Zuletzt sollten Sie nur die Werte ändern, wenn der Rückgabecode Erfolg anzeigt und (wie andere in den Kommentaren darauf hingewiesen haben), wenn das Dateihandle der bestimmten Datei zugeordnet ist, die Sie ändern möchten.

Verwandte Themen