2016-10-10 4 views
-2

Я хочу подключить NtReadFile, чтобы он мог изменять текст, который считывается из файла. Но когда я пытаюсь прочитать файл, я получаю сообщение «Это приложение не запускалось, потому что неправильная конфигурация приложения».Крючок NtReadFile. Изменить текст

Вот мой код. Что не так?

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

Вы попробовали [шаги] (https://support.microsoft.com/en-us/kb/948854), указанные для этого сообщения об ошибке? –

+0

Почему вы пытаетесь это сделать? – andlabs

+0

@andlabs это одно из моих заданий в uni. Я сделал еще один крючок (NtCreateFile, NtOpenFile ...), но с NtReadFile у меня есть некоторые проблемы. –

ответ

1

Это явно не будет работать:

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

Вы выделения памяти, а затем сразу же отбросить этот адрес. Это не то, как вы копируете строки в C. Вам нужно использовать strcpy, или предпочтительно одну из более безопасных альтернатив.

Следует также отметить, что Native API не использует символы ASCII. Как правило, все строки должны быть широкими.

Наконец, вы должны изменять значения только в том случае, если код возврата указывает на успех, и (как указывали другие в комментариях), когда дескриптор файла связан с конкретным файлом, который вы пытаетесь изменить.