c - Hook NtReadFile。更改文字

标签 c winapi hook wdk

我想 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/

相关文章:

c - 如果该元素不在列表中,则在链表的头部添加一个元素

c++ - 如何处理笔记本电脑上的电源关闭按钮

创建 3 个线程并使用 WSAWaitForMultipleEvents() 和 WSAEnumNetworkEvents() 时 CPU 使用率 100%

pthread_create 的钩子(Hook)

DLL 源代码中的 C++ 函数 Hook

python - 如何从 Mercurial Input 或 Changeset Hook 访问提交消息

c++ - 无法将 PFX 导入 Microsoft 示例 key 存储提供程序(加密提供程序开发工具包)

c - main() 中的 GDB 断点无法访问内存

c++ - 仅提供宽字符串逻辑字符串比较的动机

c++ - 如何防止 Win32 应用程序在主窗口关闭后在后台运行?