我想 Hook 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;
}
最佳答案
这显然行不通:
Buffer = ExAllocatePool(PagedPool, Length);
Buffer = "hi";
您正在分配内存,然后立即丢弃该地址。这不是在 C 中复制字符串的方式。您需要使用 strcpy
,或者最好是更安全的替代方案之一。
还值得指出的是,Native API 不使用 ASCII 字符。一般来说,所有字符串都应该是宽字符串。
最后,只有当返回代码指示成功时,并且(正如其他人在评论中指出的那样)当文件句柄与您尝试更改的特定文件关联时,您才应该更改这些值。
关于c - Hook NtReadFile。更改文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39964005/