VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 197|回复: 1

[分享] 今日一贴!驱动环境的注册表(内核注册表)

[复制链接]
75_avatar_middle
最佳答案
18 
online_supermod 发表于 2020-2-16 23:04:22 | 显示全部楼层 |阅读模式
这只是一个驱动学习的笔记,


#include "ntddk.h"

void UnDevice(IN PDRIVER_OBJECT pDriverObject)
{
       

        KdPrint(("卸载成功3"));
}


NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING theRegistryPath)
{
        NTSTATUS status;//NTSTATUS是一个32位无符号长整形,驱动程序中用该宏来检测返回的状态
        HANDLE hHandle=NULL;
        UNICODE_STRING uVal,uData,uPatch;//定义3个UNICODE_STRING的成员,UNICODE_STRING 是使用本地各种安全认证的LSA,指向一个UNICODE)_STRING 的缓冲区
        //该结构有3个成员buffer lenbght MAXmumLenght成员方法
        OBJECT_ATTRIBUTES oa;//OBJECT_ATTRIBUTES结构指定可以通过创建对象和返回对象的例程应用程序用于对象或者对象句柄的属性。该结构成员在初始化函数InitializeObjectAttributes
        //被使用该函数的第一个参数需要一个指向该结构的成员指针(成员地址)
        RtlInitUnicodeString(&uPatch,L"\\Registry\\Machine\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\run");
        //初始化一个UNICODE_STREING 的字符串缓冲区
        RtlInitUnicodeString(&uVal,L"MyRunTest");
        RtlInitUnicodeString(&uData,L"MyExe.exe");
        //初始化一个对象结构属性该函数是一个宏,初始化不够明的OBJECT_ATTRIBUTES结构,该结构的对象句柄的属性指定给打开的句柄例程
        InitializeObjectAttributes(
                &oa,//指向我们需要初始化的OBJECT_ATTRIBUTES对象成员
                &uPatch,//只想一个UNICODE_ATTRIBUTES的缓冲区,我们将注册表的路径初始化该结构
                OBJ_CASE_INSENSITIVE,//初始化的属性
                NULL,//初始化的目录 这里设置为NULL
                NULL//我们设置为NULL
                );
        status=ZwOpenKey(//打开注册表函数   打开成功返回的是STATUS_SUCCESS
                &hHandle,//指向接收句柄的指针(缓冲区)打开成功后返回的句柄
                KEY_ALL_ACCESS,//访问的权限,这里设置所有权限
                &oa);//  指定对象名称和其他的属性的OBJECT_ATTRIBUTES机构,使用初始化对象来 书初始化该二结构,如果调用方为在系统线程上下文中运行
        //则必须在调用初始化对象属性时设置OBJECT_KERNEL-handle属性

        if (NT_SUCCESS(status))
        {
                status=ZwSetValueKey(//设置或者替换注册表的值
                        hHandle,//注册表的句柄。该句柄可以通过ZWCREATEKEY和ZWOPENKEY函数获得一级创建的句柄
                        &uVal,//指向我们需要写入的数据 改数据在RtlInitUnicodeString(&uVal,L"MyRunTest");被初始化
                        0,//此参数是系统保留参数
                        REG_SZ,//设置的数据类型
                        uData.Buffer,//指向我们需要写入的值得缓冲区uData是UNICODE_STRING结构成员,该成员有3个成员方法buffer lenght maxmumLenght
                        uData.Length);//写入的长度
       
           if (NT_SUCCESS(status))
          {
                ZwClose(hHandle);//关闭文件句柄
                KdPrint(("设置成功"));
           }else{
                ZwClose(hHandle);//关闭文件句柄
                KdPrint(("设置错误"));
             }
        }


        //---------------------------------------------------------------
        pDriverObject->DriverUnload=UnDevice;//卸载例程

        return STATUS_SUCCESS;//返回状态,该状态是32位的无符号长整形,驱动程序中用该宏来确定返回的结果NT_SUCCESS来确定返回的结果
}





上一篇:VC2013 界面困惑求解
下一篇:c语言实现排序算法

本帖被以下淘专辑推荐:

51_avatar_middle
最佳答案
2 
在线会员 发表于 2020-5-7 10:15:51 | 显示全部楼层
祝VC驿站越办越好!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-7-9 07:17

Powered by CcTry.CoM

© 2009-2020 cctry.com

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