《Windows内核安全与驱动开发》4.1 文件操作

《Windows内核安全与驱动开发》阅读笔记 -- 索引目录

《Windows内核安全与驱动开发》4.1 文件操作

从 C:\a.txt 中读取一部分内容并利用 DbgPrint 输出。

#include <ntifs.h>


//提供一个卸载函数,让程序能卸载,如果没有这个函数,驱动将不能卸载。
VOID UnDriver(PDRIVER_OBJECT driver)
{
    KdPrint(("卸载驱动成功"));
}
//入口函数,相当于main。
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
    // 要返回的文件句柄
    HANDLE file_handle = NULL;

    // 返回值
    NTSTATUS status;

    // 文件状态
    IO_STATUS_BLOCK io_status;

    // 首先初始化含有文件路径的OBJECT_ATTRIBUTE
    OBJECT_ATTRIBUTES object_attributes;
    UNICODE_STRING ufile_name = RTL_CONSTANT_STRING(L"\\??\\C:\\a.txt");
    InitializeObjectAttributes(
        &object_attributes,
        &ufile_name,
        OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
        NULL,
        NULL);

    // 以FILE_OPEN_IF 方式打开文件
    status = ZwCreateFile(
        &file_handle,
        GENERIC_READ | GENERIC_WRITE,
        &object_attributes,
        &io_status,
        NULL,
        FILE_ATTRIBUTE_NORMAL,
        FILE_SHARE_READ,
        FILE_OPEN_IF,
        FILE_NON_DIRECTORY_FILE | FILE_RANDOM_ACCESS | FILE_SYNCHRONOUS_IO_NONALERT,
        NULL,
        0);

    // 申请缓冲区 
    UCHAR buf[512];
    // 读出文件内容并且打印出来
    status = ZwReadFile(
        file_handle, NULL, NULL, NULL,
        &io_status, buf, 512, NULL, NULL);
    // 打印出来
    DbgPrint("%s",buf);
    driver->DriverUnload = UnDriver;
    return STATUS_SUCCESS;
}

猜你喜欢

转载自www.cnblogs.com/onetrainee/p/11995226.html