吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 557|回复: 7
收起左侧

[求助] 驱动

[复制链接]
zishen 发表于 2023-11-18 11:36
#include <iostream>
#include <Windows.h>
#include <stdlib.h>
int main()
{
    HANDLE hdevice = NULL;
    UCHAR readBuffer[50] = { 0 };
    DWORD bread = 0;
    hdevice = CreateFile("\\\\.\\MyFirstDevice",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

    if (hdevice == INVALID_HANDLE_VALUE) {
        printf("Open Device Faile\n");
        system("pause");
        return 0;
    }

    printf("Open Sucess\n");
    system("pause");

    ReadFile(hdevice, (PVOID)readBuffer, 50, &bread, NULL);

    printf("--%p--%s--%d--\n", readBuffer, readBuffer, bread);

    printf("Write!\n");
    system("pause");

    WriteFile(hdevice, "This Message come from R3.", strlen("This Message come from R3."), &bread, NULL);

    CloseHandle(hdevice);

    system("pause");

    return 0;
}这是R3代码

以下是驱动的部分关键代码:
#include <ntifs.h>

#define DEVICE_NAME L"\\Device\\MyFirstDevice"
#define SYM_NAME L"\\??\\MyFirstDevice"
void nothing(HANDLE ppid, HANDLE mypid, BOOLEAN bcreate) {
        DbgPrint("ProcessNotify\n");
}
NTSTATUS MyWrite(PDEVICE_OBJECT pdevice, PIRP pirp) {
        NTSTATUS status = STATUS_SUCCESS;

        DbgPrint("My Device has be Writeed\n");

        PIO_STACK_LOCATION pstack = IoGetCurrentIrpStackLocation(pirp);

        ULONG Writesize = pstack->Parameters.Write.Length;

        PCHAR Writebuffer = pirp->AssociatedIrp.SystemBuffer;

        RtlZeroMemory(pdevice->DeviceExtension,200);
        RtlCopyMemory(pdevice->DeviceExtension,Writebuffer, Writesize);

        DbgPrint("--%llx--%s\n", Writebuffer, (PCHAR)pdevice->DeviceExtension);

        pirp->IoStatus.Status = status;
        pirp->IoStatus.Information = 13;

        IoCompleteRequest(pirp, IO_NO_INCREMENT);
        return STATUS_SUCCESS;
}


//入口函数,相当于main函数
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath) {
        //驱动程序的入口
        NTSTATUS status = STATUS_SUCCESS;

        UNICODE_STRING devicename = { 0 };

        //设置卸载函数
        pDriverObject->DriverUnload = DriverUnload;

        RtlInitUnicodeString(&devicename, DEVICE_NAME);
        //创建设备
        PDEVICE_OBJECT pdevice = NULL;
        status = IoCreateDevice(pDriverObject, 0, &devicename, FILE_DEVICE_UNKNOWN, 0, TRUE, &pdevice);
        if (!NT_SUCCESS(status)) {
                DbgPrint("Create Device Failed:%x\n", status);
                return status;
        }

        //设置交互数据的方式
        pdevice->Flags |= DO_BUFFERED_IO;

        //创建符号连接名称
        UNICODE_STRING symname = { 0 };
        RtlInitUnicodeString(&symname, SYM_NAME);
        //创建符号链接
        status = IoCreateSymbolicLink(&symname, &devicename);
        if (!NT_SUCCESS(status)) {
                DbgPrint("创建符号链接失败!\n");
                DbgPrint("Create SymbolicLink Failed :%x\n", status);

                IoDeleteDevice(pdevice);
                return status;
        }

        pDriverObject->MajorFunction[IRP_MJ_CREATE] = MyCreate;
        pDriverObject->MajorFunction[IRP_MJ_CLOSE] = MyClose;
        pDriverObject->MajorFunction[IRP_MJ_CLEANUP] = MyCleanup;
        pDriverObject->MajorFunction[IRP_MJ_READ] = MyRead;
        pDriverObject->MajorFunction[IRP_MJ_WRITE] = MyWrite;
        return 0;
}
在实际测试的时候,安装好驱动,R3的那个代码一运行到
WriteFile(hdevice, "This Message come from R3.", strlen("This Message come from R3."), &bread, NULL);
就直接蓝屏
有没有大佬知道该怎么解决?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

苏紫方璇 发表于 2023-11-18 13:07
蓝屏得有dump文件才好分析判断
 楼主| zishen 发表于 2023-11-18 13:33
苏紫方璇 发表于 2023-11-18 13:07
蓝屏得有dump文件才好分析判断

代码是我跟着视频一行一行敲的,视频中win7的可以,我的是win10,不知道咋就出事了感觉应该是代码错了
苏紫方璇 发表于 2023-11-18 13:57
搞内核编程还是先搭建一下双机调试环境吧,能直接看变量值啥的,找bug效率会高不少

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
FruitBaby + 1 + 1 我很赞同!

查看全部评分

董督秀 发表于 2023-11-18 14:55
驱动项目里的,属性,平台设置成 Desktop win10 试试。
 楼主| zishen 发表于 2023-11-19 15:17
董督秀 发表于 2023-11-18 14:55
驱动项目里的,属性,平台设置成 Desktop win10 试试。

设置的就是Windows 10 or higher
A学习的小菜鸟 发表于 2023-11-23 15:05
这个还是版主说的对啊,你是不是写的内核程序啊,如果是的话,你要先搭建好双机调试啊,然后dump出内存,然后才好给你说明啊,不然,没办法给你指出来,不过,我看到你说是跟着视频一步步来的,会不会视频里慢的是win7 32位,你却用win10来运行啊,毕竟64位后如果要加载驱动要过pg的
 楼主| zishen 发表于 2023-11-23 20:24
A学习的小菜鸟 发表于 2023-11-23 15:05
这个还是版主说的对啊,你是不是写的内核程序啊,如果是的话,你要先搭建好双机调试啊,然后dump出内存,然 ...

谢谢大佬回复,问了视频的作者,给我指出来了,是语法的错误。双机调试已经搭建好了,但是我还不会分析dmp文件
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表