洋县| 长岭| 鄄城| 犍为| 温县| 黎川| 中牟| 谷城| 阜阳| 平遥| 同安| 曲周| 江源| 开化| 枣强| 永定| 孟津| 东光| 阿荣旗| 德州| 桐柏| 冠县| 海门| 丁青| 道县| 中宁| 上高| 灵宝| 柏乡| 彰武| 黎城| 叶城| 金川| 封开| 王益| 墨竹工卡| 古田| 灌云| 赣县| 诸城| 安图| 围场| 纳溪| 大方| 河曲| 小河| 巧家| 荥经| 科尔沁左翼中旗| 囊谦| 丹徒| 夹江| 五河| 乳源| 石家庄| 仪陇| 西峡| 蓬莱| 革吉| 八达岭| 昌都| 宣恩| 托克逊| 沾益| 甘泉| 民丰| 文登| 沿河| 延安| 循化| 沙河| 卢氏| 围场| 罗城| 湖州| 乡城| 景谷| 舞阳| 耿马| 漠河| 五寨| 阿瓦提| 青河| 确山| 柯坪| 黑水| 滴道| 邹城| 代县| 新建| 洛川| 澄江| 洞头| 宁都| 兴宁| 北流| 呼伦贝尔| 沿滩| 永定| 泽库| 威信| 加查| 华池| 盈江| 祁东| 柳江| 兴国| 盘山| 范县| 淅川| 喀什| 永德| 达县| 济南| 保靖| 会同| 肃宁| 乌兰| 八宿| 望谟| 茂港| 繁昌| 临川| 通化县| 宿州| 弓长岭| 镇安| 马尾| 新竹县| 蔚县| 甘泉| 河曲| 墨脱| 灯塔| 大足| 治多| 昭通| 秭归| 常山| 上林| 洪湖| 湛江| 平利| 拜泉| 济阳| 通辽| 澧县| 平山| 舒城| 平阳| 盘山| 吉水| 昌邑| 镇康| 宣城| 六枝| 额济纳旗| 防城港| 永年| 黄梅| 日照| 扎赉特旗| 双阳| 通山| 延长| 巴林左旗| 江陵| 凤台| 卓尼| 惠山| 包头| 荣成| 兖州| 古浪| 塘沽| 密云| 杨凌| 靖宇| 嫩江| 浠水| 云安| 常州| 得荣| 左贡| 梁山| 吉安市| 扎兰屯| 乌鲁木齐| 夏河| 临泉| 新源| 桂林| 戚墅堰| 合浦| 巨鹿| 井陉矿| 思茅| 平潭| 南木林| 泗阳| 祁阳| 揭东| 电白| 阳信| 柳城| 砚山| 楚雄| 墨脱| 下花园| 陵水| 塔什库尔干| 乐亭| 凌源| 谷城| 个旧| 东光| 资源| 华安| 汉中| 博白| 清远| 扎囊| 澜沧| 襄城| 贵池| 平度| 涿州| 大丰| 古蔺| 连平| 柳州| 柳江| 龙井| 泌阳| 泰州| 金阳| 于都| 滦南| 盐边| 英德| 平塘| 喜德| 白河| 甘德| 惠水| 喀什| 梁平| 吉安县| 米泉| 金坛| 江达| 德江| 日土| 和平| 乌当| 灌云| 饶河| 宜春| 花都| 南陵| 射洪| 水城| 南山| 黑河| 威尼斯人注册送29mg

金沙会 全新体验wnsr8999

2018-04-26 02:34 来源:南充人网

  金沙会 全新体验wnsr8999

  word2007展会现场负责人介绍称。四查项目建设弄虚作假,搞形象工程政绩工程的问题,改进项目的评价考核办法,严格项目申报,科学全面评估,严把质量效益关,严禁盲目铺摊子上项目。

该科主任吴农艳教授说,家长溺爱式唠叨要适度,即便事情没做好,也要换个角度、换种方式督促他,避免硬碰硬。今日,阴天到多云,还有阵阵微风,在外赏花让人感觉舒适。

  她自学按摩技术,在社区为邻居义务按摩理疗已26年。在科幻影片经常出现的场面变成现实展现在观众面前,不禁让人啧啧赞叹。

  我们是街道办事处城管科的,贴的不是交警那种罚单,拍摄的这些照片和违法数据会提交给交警,他们审核通过后才会处罚。报道称,在为家人准备好早餐、打扫完房间之后,林福敬通常在早上6点30分开始她的日常生活,她平均每天至少花10个小时辅导粉丝。

要强化能力作风建设,保持昂扬奋斗姿态,始终心存敬畏,忠诚履职担当,充分发挥人大职能作用,努力为全省改革发展增光添彩。

  各职能部门按照管行业就要管行风的要求切实履行监管责任,及时发现和纠正本系统本行业范围内存在的形式主义、官僚主义问题,强化监管、健全制度。

  物联网技术的应用推进了精准农业发展,合作社果菜病虫害发生率下降一半,农药使用减少一半,产品达到绿色食品要求。从州领导到村干部,人人以豁出去的政治勇气与担当,为完成好全年脱贫计划背水一战。

  我们的生产计划没有受到什么影响,目前还在按原计划进行。

  除了气温起伏大,本周青岛的气温还有一个特点是南北温差大。原标题:济南大学泉城学院东山校区或9月投用位于蓬莱位于蓬莱市海滨西路的济南大学泉城学院东山校区正快马加鞭加紧建设,今年9月份将投入使用。

  他看我妈一个30多岁的苦命女人带着两个孩子,心生同情,两个同病相怜的人就走到了一起,之后就有了我。

  威尼斯人在线娱乐城省级基金将不再设立经办机构,市级基金经办机构具体挂靠单位自行确定。

  在科幻影片经常出现的场面变成现实展现在观众面前,不禁让人啧啧赞叹。安排高等教育内涵提升资金亿元,支持部属高校和省属高校建设一流大学和一流学科,加强高水平应用型大学、民办高校基础能力建设,实施高校协同创新计划、泰山学者优势特色学科人才团队支持计划、研究生教育质量提升计划等。

  博狗开户平台 日博网址 007真人官网

  金沙会 全新体验wnsr8999

 
责编:

吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1878|回复: 62
上一主题 下一主题

金沙会 全新体验wnsr8999

  [复制链接]
跳转到指定楼层
楼主
发表于 2018-4-18 18:23 | 只看该作者 回帖奖励 |倒序浏览
本帖最后由 谈笑人生 于 2018-4-19 16:28 编辑

吾爱专用:最近太忙  网络找了 一些代码 具体来分析  大神勿喷 基础的只是  小白学习。发截图 不如直接发代码 :

#include<ntddk.h>   //头文件
#include<string.h>  //头文件



//1.字符串初始化
VOID StringInitTest()   //自定义函数


{
        //(1)用RtlInitAnsiString 初始化字符串
        {
                ANSI_STRING  AnsiString1;
                CHAR * string1 = "hello";
                //初始化ANSI_STRING字符串
                RtlInitAnsiString(&AnsiString1, string1);
                DbgPrint("AnsiString1:%Z\n", &AnsiString1);//打印hello
                string1[0] = 'H';
                string1[1] = 'E';
                string1[2] = 'L';
                string1[3] = 'L';
                string1[4] = 'O';
                //改变string1,AnsiString1同样会导致变化
                DbgPrint("AnsiString1:%Z\n", &AnsiString1);//打印HELLO
        }
        //(2)程序员自己初始化字符串
        {
#define BUFFER_SIZE 1024
                UNICODE_STRING UnicodeString1 = { 0 };
                WCHAR* wideString = L"hello";
                //设置缓冲区大小
                UnicodeString1.MaximumLength = BUFFER_SIZE;
                //分配内存
                UnicodeString1.Buffer = (PWSTR)ExAllocatePool(PagedPool, BUFFER_SIZE);
                //设置字符长度,因为是宽字符,所以是字符长度的2倍
                UnicodeString1.Length = 2 * wcslen(wideString);
                //保证缓冲区足够大,否则程序终止
                ASSERT(UnicodeString1.MaximumLength >= UnicodeString1.Length);
                //内存拷贝,
                RtlCopyMemory(UnicodeString1.Buffer, wideString, UnicodeString1.Length);
                //设置字符长度
                UnicodeString1.Length = 2 * wcslen(wideString);
                DbgPrint("UnicodeString:%wZ\n", &UnicodeString1);
                //清理内存
                ExFreePool(UnicodeString1.Buffer);
                UnicodeString1.Buffer = NULL;
                UnicodeString1.Length = UnicodeString1.MaximumLength = 0;
        }
}

//2.字符串拷贝
VOID StringCopyTest() //自定义函数
{
        UNICODE_STRING UnicodeString1;
        UNICODE_STRING UnicodeString2 = { 0 };
        //初始化UnicodeString1
        RtlInitUnicodeString(&UnicodeString1, L"Hello World");
        //初始化UnicodeString2
        UnicodeString2.Buffer = (PWSTR)ExAllocatePool(PagedPool, BUFFER_SIZE);
        UnicodeString2.MaximumLength = BUFFER_SIZE;
        //将初始化UnicodeString2拷贝到UnicodeString1
        RtlCopyUnicodeString(&UnicodeString2, &UnicodeString1);
        //分别显示UnicodeString1和UnicodeString2
        DbgPrint("UnicodeString1:%wZ\n", &UnicodeString1);
        DbgPrint("UnicodeString2:%wZ\n", &UnicodeString2);
        //销毁UnicodeString2(UnicodeString1不用销毁)
        RtlFreeUnicodeString(&UnicodeString2);
}

//3.字符串比较
VOID StringCompareTest() //自定义函数
{
        UNICODE_STRING UnicodeString1;
        UNICODE_STRING UnicodeString2;
        //初始化UnicodeString1
        RtlInitUnicodeString(&UnicodeString1, L"Hello World");
        //初始化UnicodeString2
        RtlInitUnicodeString(&UnicodeString1, L"Hello");
        if (RtlEqualUnicodeString(&UnicodeString1, &UnicodeString2, TRUE))
                DbgPrint("UnicodeString1 and UnicodeString2 are equal\n");
        else
                DbgPrint("UnicodeString1 and UnicodeString2 are NOT equal\n");
}

//4.字符串变大写
VOID StringToUpperTest()  //自定义函数
{
        //初始化UnicodeString1
        UNICODE_STRING UnicodeString1;
        UNICODE_STRING UnicodeString2;
        RtlInitUnicodeString(&UnicodeString1, L"Hello World");
        //变化前
        DbgPrint("UnicodeString1:%wZ\n", &UnicodeString1);
        //变大写
        RtlUpcaseUnicodeString(&UnicodeString2, &UnicodeString1, TRUE);
        //变化后
        DbgPrint("UnicodeString2:%wZ\n", &UnicodeString2);
        //销毁UnicodeString2(UnicodeString1不用销毁)
        RtlFreeUnicodeString(&UnicodeString2);
}

//5.字符串与整型相互转化
VOID StringToIntegerTest()  //自定义函数
{
        //(1)字符串转换成数字
        {
                UNICODE_STRING UnicodeString1;
                ULONG lNumber;
                NTSTATUS nStatus;
                //初始化UnicodeString1
                RtlInitUnicodeString(&UnicodeString1, L"-100");
                nStatus = RtlUnicodeStringToInteger(&UnicodeString1, 10, &lNumber);
                if (NT_SUCCESS(nStatus))
                {
                        DbgPrint("Conver to integer succussfully!\n");
                        DbgPrint("Result:%d\n", lNumber);
                }
                else
                {
                        DbgPrint("Conver to integer unsuccessfully!\n");
                }
        }
        //(2)数字转换成字符串
        {
                NTSTATUS nStatus;
                UNICODE_STRING UnicodeString2 = { 0 };
                //初始化UnicodeString2
                UnicodeString2.Buffer = (PWSTR)ExAllocatePool(PagedPool, BUFFER_SIZE);
                UnicodeString2.MaximumLength = BUFFER_SIZE;
                nStatus = RtlIntegerToUnicodeString(200, 10, &UnicodeString2);
                if (NT_SUCCESS(nStatus))
                {
                        DbgPrint("Conver to string succussfully!\n");
                        DbgPrint("Result:%wZ\n", &UnicodeString2);
                }
                else
                {
                        DbgPrint("Conver to string unsuccessfully!\n");
                }
                //销毁UnicodeString2
                //注意!!UnicodeString1不用销毁
                RtlFreeUnicodeString(&UnicodeString2);
        }
}

//6. ANSI_STRING字符串与UNICODE_STRING字符串相互转换
VOID StringConverTest()
{
        //(1)将UNICODE_STRING字符串转换成ANSI_STRING字符串
        UNICODE_STRING UnicodeString1;
        ANSI_STRING AnsiString1;
        NTSTATUS nStatus;
        //初始化UnicodeString1
        RtlInitUnicodeString(&UnicodeString1, L"Hello World");
        nStatus = RtlUnicodeStringToAnsiString(&AnsiString1, &UnicodeString1, TRUE);
        if (NT_SUCCESS(nStatus))
        {
                DbgPrint("Conver succussfully!\n");
                DbgPrint("Result:%Z\n", &AnsiString1);
        }
        else
        {
                DbgPrint("Conver unsuccessfully!\n");
        }
        //销毁AnsiString1
        RtlFreeAnsiString(&AnsiString1);
        //(2)将ANSI_STRING字符串转换成UNICODE_STRING字符串
        {
                ANSI_STRING AnsiString2;
                UNICODE_STRING UnicodeString2;
                NTSTATUS nStatus;
                //初始化AnsiString2
                RtlInitString(&AnsiString2, "Hello World");
                nStatus = RtlAnsiStringToUnicodeString(&UnicodeString2, &AnsiString2, TRUE);
                if (NT_SUCCESS(nStatus))
                {
                        DbgPrint("Conver succussfully!\n");
                        DbgPrint("Result:%wZ\n", &UnicodeString2);
                }
                else
                {
                        DbgPrint("Conver unsuccessfully!\n");
                }
                //销毁UnicodeString2
                RtlFreeUnicodeString(&UnicodeString2);
        }
}


/*
以下代码为字符串转换代码
*/

//UNICODE_STRINGz转换为CHAR*
//输入UNICODE_STRING的指针,输出窄字符串,BUFFER需要已经分配好空间
VOID UnicodeToChar(PUNICODE_STRING dst, char *src)
{
        ANSI_STRING string;
        RtlUnicodeStringToAnsiString(&string, dst, TRUE);
        strcpy(src, string.Buffer);
        RtlFreeAnsiString(&string);
}
//WCHAR*转换为CHAR*
//输入宽字符串首地址,输出窄字符串,BUFFER需要已经分配好空间
VOID WcharToChar(PWCHAR src, PCHAR dst)
{
        UNICODE_STRING uString;
        ANSI_STRING aString;
        RtlInitUnicodeString(&uString, src);
        RtlUnicodeStringToAnsiString(&aString, &uString, TRUE);
        strcpy(dst, aString.Buffer);
        RtlFreeAnsiString(&aString);
}
//CHAR*转WCHAR*
//输入窄字符串首地址,输出宽字符串,BUFFER需要已经分配好空间
VOID CharToWchar(PCHAR src, PWCHAR dst)
{
        UNICODE_STRING uString;
        ANSI_STRING aString;
        RtlInitAnsiString(&aString, src);
        RtlAnsiStringToUnicodeString(&uString, &aString, TRUE);
        wcscpy(dst, uString.Buffer);
        RtlFreeUnicodeString(&uString);
}



VOID MyUnload(PDRIVER_OBJECT pDriverObject)            //卸载驱动 格式  都是死的
{
        
   

        ///卸载历程
        /*DbgPrint("1111111");*/
        DbgPrint("[MyDriver]Unloaded...\n");
        KdPrint(("驱动卸载成功"));
}

NTSTATUS DriverEntry(PDRIVER_OBJECT        pDriverObject, PUNICODE_STRING Reg_Path)    //加载 驱动格式  都是死的
{

        ///主程序
        KdPrint(("[MyDriver]Loaded...\n"));
        pDriverObject->DriverUnload = MyUnload;
        StringInitTest();
        StringCopyTest();
        StringCompareTest();
        StringToUpperTest();
        StringToIntegerTest();
        StringConverTest();
        return STATUS_SUCCESS;
}
---------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------

学习日志五注册表函数:
#include <ntddk.h>
#include <windef.h>

//PCWSTR C库文件自定义的字符串格式  解释如下:
//typedef _Null_terminated_ CONST WCHAR *LPCWSTR, *PCWSTR;
PVOID GetFunctionAddr(PCWSTR FunctionName)   
{   
        //UNICODE_STRING 自定义数据类型 UniCodeFunctionNam
     UNICODE_STRING UniCodeFunctionName;   
    /*RtlInitUnicodeString(  初始化ANSI_STRING字符串,参数:1.要初始化的字符2.字符串的内容
    _Out_ PUNICODE_STRING DestinationString,
    _In_opt_z_ __drv_aliasesMem PCWSTR SourceString
    );*/
    RtlInitUnicodeString(&UniCodeFunctionName, FunctionName);
        /*MmGetSystemRoutineAddress 得到系统导出函数的地址*/
    return MmGetSystemRoutineAddress(&UniCodeFunctionName);     
}

//NTKERNELAPI NTSTATUS ZwRenameKey(HANDLE KeyHandle, PUNICODE_STRING NewName);
//typedef 标识另起名字C本身的死命令 NTSTATUS:宏
//__fastcall:调用约定:它是通过寄存器来传送参数的(实际上,它用ecx和edx传送前两个双字(dword)或更小的参数,
//剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈)。
//PUNICODE_STRING:自定义数据类型然后又起了个别名
typedef NTSTATUS (__fastcall *ZWRENAMEKEY)(HANDLE KeyHandle, PUNICODE_STRING NewName);
ZWRENAMEKEY MyZwRenameKey=NULL;
//RegCreateKey,用于创建或打开注册表项
void RegCreateKey(LPWSTR KeyName)
{
        //typedef struct _OBJECT_ATTRIBUTES {
        //        ULONG Length;
        //        HANDLE RootDirectory;
        //        PUNICODE_STRING ObjectName;
        //        ULONG Attributes;
        //        PVOID SecurityDescriptor;        // Points to type SECURITY_DESCRIPTOR
        //        PVOID SecurityQualityOfService;  // Points to type SECURITY_QUALITY_OF_SERVICE
        //} OBJECT_ATTRIBUTES; 头文件的自定义数据类型  UNICODE_STRING:头文件的自定义数据类型
        OBJECT_ATTRIBUTES objectAttributes;
        UNICODE_STRING usKeyName;
        /*NTSTATUS ntStatus;库文件自定义返回类型*/

        NTSTATUS ntStatus;
        /*typedef void *HANDLE; 万能指针*/
        HANDLE hRegister;
        //上面有解释
        RtlInitUnicodeString( &usKeyName, KeyName);
        /*InitializeObjectAttributes(p, n, a, r, s) {
                \
                        (p)->Length = sizeof(OBJECT_ATTRIBUTES);          \
                        (p)->RootDirectory = r;                             \
                        (p)->Attributes = a;                                \
                        (p)->ObjectName = n;                                \
                        (p)->SecurityDescriptor = s;                        \
                        (p)->SecurityQualityOfService = NULL;               \
        }*/

        InitializeObjectAttributes(&objectAttributes,
                                   &usKeyName,
                                   OBJ_CASE_INSENSITIVE,//对大小写敏感
                                   NULL,
                                   NULL );
        //---------------------------------------------------------------------
        /*ZwCreateKey 指定的项不存在,则会直接创建该项*/
        //ZwCreateKey(
        //        OUT PHANDLE  KeyHandle,
        //        IN ACCESS_MASK  DesiredAccess, //访问权限,一般为KEY_ALL_ACCLESS
        //        IN POBJECT_ATTRIBUTES  ObjectAttributes,
        //        IN ULONG  TitleIndex, //一般为NULL
        //        IN PUNICODE_STRING  Class  OPTIONAL, //一般为NULL
        //        IN ULONG  CreateOptions, //一般为REG_OPTION_NON_VOLATILE
        //        OUT PULONG  Disposition  OPTIONAL //返回是打开成功还是创建成功
        //  );
        /*ZwOpenKey 例程打开一个已经存在的注册表键*/
        //----------------------------------------------------------------------
                /*ZwOpenKey(
                        OUT PHANDLE  KeyHandle,
                        IN ACCESS_MASK  DesiredAccess,
                        IN POBJECT_ATTRIBUTES  ObjectAttributes
                );*/
        ntStatus=ZwCreateKey(&hRegister, KEY_ALL_ACCESS, &objectAttributes, 0, NULL, REG_OPTION_NON_VOLATILE, NULL);
        if(NT_SUCCESS(ntStatus))
        {
                /*ZwClose  关闭对象句柄*/
                ZwClose(hRegister);
                DbgPrint("ZwCreateKey success!\n");
        }
        else
        {
                DbgPrint("ZwCreateKey failed!\n");
        }
}
//RegRenameKey 新建 KEY
void RegRenameKey(LPWSTR OldKeyName, LPWSTR NewKeyName)
{
        OBJECT_ATTRIBUTES objectAttributes;
        HANDLE hRegister;
        NTSTATUS ntStatus;
        UNICODE_STRING usOldKeyName,usNewKeyName;
        RtlInitUnicodeString(&usOldKeyName,OldKeyName);
        RtlInitUnicodeString(&usNewKeyName,NewKeyName);
        InitializeObjectAttributes(&objectAttributes,
                                   &usOldKeyName,
                                   OBJ_CASE_INSENSITIVE,//对大小写敏感
                                   NULL,
                                   NULL );
        ntStatus = ZwOpenKey( &hRegister, KEY_ALL_ACCESS, &objectAttributes);
        if(NT_SUCCESS(ntStatus))
        {
                ntStatus = MyZwRenameKey(hRegister,&usNewKeyName);
                ZwFlushKey(hRegister);
                ZwClose(hRegister);
                DbgPrint("ZwRenameKey success!\n");
        }
        else
        {
                DbgPrint("ZwRenameKey failed!\n");
        }
}
//RegDeleteKey 删除 KEY
void RegDeleteKey(LPWSTR KeyName)
{
        OBJECT_ATTRIBUTES objectAttributes;
        UNICODE_STRING usKeyName;
        NTSTATUS ntStatus;
        HANDLE hRegister;
        RtlInitUnicodeString( &usKeyName, KeyName);
        InitializeObjectAttributes(&objectAttributes,
                                   &usKeyName,
                                   OBJ_CASE_INSENSITIVE,//对大小写敏感
                                   NULL,
                                   NULL );
        ntStatus = ZwOpenKey( &hRegister, KEY_ALL_ACCESS, &objectAttributes);
        if (NT_SUCCESS(ntStatus))
        {
                ntStatus = ZwDeleteKey(hRegister);
                ZwClose(hRegister);
                DbgPrint("ZwDeleteKey success!\n");
        }
        else
        {
                DbgPrint("ZwDeleteKey failed!\n");
        }
}
//新建/设置 VALUE
void RegSetValueKey(LPWSTR KeyName, LPWSTR ValueName, DWORD DataType, PVOID DataBuffer, DWORD DataLength)
{
        OBJECT_ATTRIBUTES objectAttributes;
        UNICODE_STRING usKeyName,usValueName;
        NTSTATUS ntStatus;
        HANDLE hRegister;
        ULONG Type;
        RtlInitUnicodeString(&usKeyName, KeyName);
        RtlInitUnicodeString(&usValueName, ValueName);
        InitializeObjectAttributes(&objectAttributes,
                                   &usKeyName,
                                   OBJ_CASE_INSENSITIVE,//对大小写敏感
                                   NULL,
                                   NULL );
        ntStatus = ZwOpenKey(&hRegister, KEY_ALL_ACCESS, &objectAttributes);
        if (NT_SUCCESS(ntStatus))
        {
                ntStatus = ZwSetValueKey(hRegister, &usValueName, 0, DataType, DataBuffer, DataLength);
                ZwFlushKey(hRegister);
                ZwClose(hRegister);
                DbgPrint("ZwSetValueKey success!\n");
        }
        else
        {
                DbgPrint("ZwSetValueKey failed!\n");
        }
}

/*
typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
  ULONG TitleIndex;
  ULONG Type;
  ULONG DataLength;
  UCHAR Data[1];
} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
*/
//自定义函数
NTSTATUS RegQueryValueKey(LPWSTR KeyName, LPWSTR ValueName, PKEY_VALUE_PARTIAL_INFORMATION *pkvpi)
{
        ULONG ulSize;
        NTSTATUS ntStatus;
        PKEY_VALUE_PARTIAL_INFORMATION pvpi;
        OBJECT_ATTRIBUTES objectAttributes;
        HANDLE hRegister;
        UNICODE_STRING usKeyName;
        UNICODE_STRING usValueName;
        RtlInitUnicodeString(&usKeyName, KeyName);
        RtlInitUnicodeString(&usValueName, ValueName);
        InitializeObjectAttributes(&objectAttributes,
                                   &usKeyName,
                                   OBJ_CASE_INSENSITIVE,//对大小写敏感
                                   NULL,
                                   NULL );
        ntStatus = ZwOpenKey( &hRegister, KEY_ALL_ACCESS, &objectAttributes);
        if(!NT_SUCCESS(ntStatus))
        {
                DbgPrint("[RegQueryValueKey]ZwOpenKey failed!\n");
                return ntStatus;
        }
        ntStatus = ZwQueryValueKey(hRegister,
                                   &usValueName,
                                   KeyValuePartialInformation ,
                                   NULL,
                                   0,
                                   &ulSize);
        if (ntStatus==STATUS_OBJECT_NAME_NOT_FOUND || ulSize==0)
        {
                DbgPrint("ZwQueryValueKey 1 failed!\n");
                return STATUS_UNSUCCESSFUL;
        }
        pvpi = (PKEY_VALUE_PARTIAL_INFORMATION)ExAllocatePool(PagedPool,ulSize);
        ntStatus = ZwQueryValueKey(hRegister,
                                   &usValueName,
                                   KeyValuePartialInformation ,
                                   pvpi,
                                   ulSize,
                                   &ulSize);
        if (!NT_SUCCESS(ntStatus))
        {
                DbgPrint("ZwQueryValueKey 2 failed!\n");
                return STATUS_UNSUCCESSFUL;
        }
        //这里的pvpi是没有释放的用完要释放。ExFreePool(pvpi);
        *pkvpi=pvpi;
        DbgPrint("ZwQueryValueKey success!\n");
        return STATUS_SUCCESS;
}
//自定义函数
void RegDeleteValueKey(LPWSTR KeyName, LPWSTR ValueName)
{
        OBJECT_ATTRIBUTES objectAttributes;
        UNICODE_STRING usKeyName,usValueName;
        NTSTATUS ntStatus;
        HANDLE hRegister;
        RtlInitUnicodeString(&usKeyName, KeyName);
        RtlInitUnicodeString(&usValueName, ValueName);
        InitializeObjectAttributes(&objectAttributes,
                                   &usKeyName,
                                   OBJ_CASE_INSENSITIVE,//对大小写敏感
                                   NULL,
                                   NULL );
        ntStatus = ZwOpenKey(&hRegister, KEY_ALL_ACCESS, &objectAttributes);
        if (NT_SUCCESS(ntStatus))
        {
                ntStatus = ZwDeleteValueKey(hRegister,&usValueName);
                ZwFlushKey(hRegister);
                ZwClose(hRegister);
                DbgPrint("ZwDeleteValueKey success!\n");
        }
        else
        {
                DbgPrint("ZwDeleteValueKey failed!\n");
        }
}
//自定义
VOID EnumSubKeyTest()
{
        WCHAR MY_KEY_NAME[] = L"\\Registry\\Machine\\Software";
        UNICODE_STRING RegUnicodeString;
        HANDLE hRegister;
        OBJECT_ATTRIBUTES objectAttributes;
        NTSTATUS ntStatus;
        ULONG ulSize,i;
        UNICODE_STRING uniKeyName;
        PKEY_FULL_INFORMATION pfi;
        //初始化UNICODE_STRING字符串
        RtlInitUnicodeString( &RegUnicodeString, MY_KEY_NAME);
        //初始化objectAttributes
        InitializeObjectAttributes(&objectAttributes,
                                                        &RegUnicodeString,
                                                        OBJ_CASE_INSENSITIVE,//对大小写敏感
                                                        NULL,
                                                        NULL );
        //打开注册表
        ntStatus = ZwOpenKey( &hRegister,
                                                        KEY_ALL_ACCESS,
                                                        &objectAttributes);
        if (NT_SUCCESS(ntStatus))
        {
                DbgPrint("Open register successfully\n");
        }
        //第一次调用ZwQueryKey为了获取KEY_FULL_INFORMATION数据的长度
        ZwQueryKey(hRegister,KeyFullInformation,NULL,0,&ulSize);
        pfi = (PKEY_FULL_INFORMATION)ExAllocatePool(PagedPool,ulSize);
        //第二次调用ZwQueryKey为了获取KEY_FULL_INFORMATION数据的数据
        ZwQueryKey(hRegister,KeyFullInformation,pfi,ulSize,&ulSize);
        for (i=0;i<pfi->SubKeys;i++)
        {
                PKEY_BASIC_INFORMATION pbi;
                //第一次调用ZwEnumerateKey为了获取KEY_BASIC_INFORMATION数据的长度
                ZwEnumerateKey(hRegister,i,KeyBasicInformation,NULL,0,&ulSize);
                pbi =(PKEY_BASIC_INFORMATION)ExAllocatePool(PagedPool,ulSize);
                //第二次调用ZwEnumerateKey为了获取KEY_BASIC_INFORMATION数据的数据
                ZwEnumerateKey(hRegister,i,KeyBasicInformation,pbi,ulSize,&ulSize);
                uniKeyName.Length = (USHORT)pbi->NameLength;
                uniKeyName.MaximumLength = (USHORT)pbi->NameLength;
                uniKeyName.Buffer = pbi->Name;
                DbgPrint("The %d sub item name:%wZ\n",i,&uniKeyName);
                ExFreePool(pbi);
        }
        ExFreePool(pfi);
        ZwClose(hRegister);
}
//自定义
VOID EnumSubValueTest()
{
        WCHAR MY_KEY_NAME[] = L"\\Registry\\Machine\\Software\\Microsoft\\.NETFramework";
        UNICODE_STRING RegUnicodeString;
        HANDLE hRegister;
        OBJECT_ATTRIBUTES objectAttributes;
        ULONG ulSize,i;
        UNICODE_STRING uniKeyName;
        PKEY_FULL_INFORMATION pfi;
        NTSTATUS ntStatus;
        //初始化UNICODE_STRING字符串
        RtlInitUnicodeString( &RegUnicodeString, MY_KEY_NAME);
        //初始化objectAttributes
        InitializeObjectAttributes(&objectAttributes,
                                                        &RegUnicodeString,
                                                        OBJ_CASE_INSENSITIVE,//对大小写敏感
                                                        NULL,
                                                        NULL );
        //打开注册表
        ntStatus = ZwOpenKey( &hRegister,KEY_ALL_ACCESS,&objectAttributes);
        if (NT_SUCCESS(ntStatus))
        {
                DbgPrint("Open register successfully\n");
        }
        //查询VALUE的大小
        ZwQueryKey(hRegister,KeyFullInformation,NULL,0,&ulSize);
        pfi = (PKEY_FULL_INFORMATION)        ExAllocatePool(PagedPool,ulSize);
        ZwQueryKey(hRegister,KeyFullInformation,pfi,ulSize,&ulSize);
        for (i=0;i<pfi->Values;i++)
        {
                PKEY_VALUE_BASIC_INFORMATION pvbi;
                //查询单个VALUE的大小
                ZwEnumerateValueKey(hRegister,i,KeyValueBasicInformation,NULL,0,&ulSize);
                pvbi = (PKEY_VALUE_BASIC_INFORMATION)ExAllocatePool(PagedPool,ulSize);
                //查询单个VALUE的详情
                ZwEnumerateValueKey(hRegister,i,KeyValueBasicInformation,pvbi,ulSize,&ulSize);
                uniKeyName.Length = (USHORT)pvbi->NameLength;
                uniKeyName.MaximumLength = (USHORT)pvbi->NameLength;
                uniKeyName.Buffer = pvbi->Name;
                DbgPrint("The %d sub value name:%wZ\n",i,&uniKeyName);
                if (pvbi->Type==REG_SZ)
                {
                        DbgPrint("The sub value type:REG_SZ\n");
                }
                else if (pvbi->Type==REG_MULTI_SZ)
                {
                        DbgPrint("The sub value type:REG_MULTI_SZ\n");
                }
                else if (pvbi->Type==REG_DWORD)
                {
                        DbgPrint("The sub value type:REG_DWORD\n");
                }
                else if (pvbi->Type==REG_BINARY)
                {
                        DbgPrint("The sub value type:REG_BINARY\n");
                }
                ExFreePool(pvbi);
        }
        ExFreePool(pfi);
        ZwClose(hRegister);
}


VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
{
        DbgPrint("[MyDriver]Unloaded...\n");
        return;
}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
        DWORD dw=1234,dw0=0;
        PKEY_VALUE_PARTIAL_INFORMATION pkvi;
        DriverObject->DriverUnload = DriverUnload;
        DbgPrint("[MyDriver]Loaded...\n");
        //
        MyZwRenameKey=(ZWRENAMEKEY)GetFunctionAddr(L"ZwRenameKey");//DbgPrint("ZwRenameKey: %p\n",MyZwRenameKey);
        //
        DbgPrint("枚举子KEY测试\n");
        EnumSubKeyTest();
        DbgPrint("\n");
        
        DbgPrint("枚举子VALUE测试\n");
        EnumSubValueTest();
        DbgPrint("\n");
        
        DbgPrint("创建KEY测试\n");
        RegCreateKey(L"\\Registry\\Machine\\Software\\0000");
        DbgPrint("\n");
        
        DbgPrint("重命名KEY测试\n");
        RegRenameKey(L"\\Registry\\Machine\\Software\\0000",L"1111");
        DbgPrint("\n");
        
        DbgPrint("新建/设置VALUE测试\n");
        RegSetValueKey(L"\\Registry\\Machine\\Software\\1111",L"dw",REG_DWORD,&dw,sizeof(dw));
        DbgPrint("\n");
        
        DbgPrint("查询VALUE测试\n");
        RegQueryValueKey(L"\\Registry\\Machine\\Software\\1111",L"dw",&pkvi);
        memcpy(&dw0,pkvi->Data,pkvi->DataLength);
        DbgPrint("dw0: %ld\n",dw0);
        ExFreePool(pkvi);
        DbgPrint("\n");
        
        DbgPrint("删除VALUE测试\n");
        RegDeleteValueKey(L"\\Registry\\Machine\\Software\\1111",L"dw");
        DbgPrint("\n");
        
        DbgPrint("删除KEY测试\n");
        RegDeleteKey(L"\\Registry\\Machine\\Software\\1111");
        DbgPrint("\n");
        //
        return STATUS_SUCCESS;
}

点评

lZ可以试试论坛的代码高亮功能  发表于 2018-4-20 13:59

免费评分

参与人数 7吾爱币 +11 热心值 +5 收起 理由
Chongxi97 + 1 谢谢@Thanks!
L4Nce + 5 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
tina1235 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lookerJ + 1 + 1 用心讨论,共获提升!
laozhuo112 + 1 + 1 我很赞同!
xinkui + 1 + 1 谢谢@Thanks!
blmk + 1 我觉得还是发在自己博客之类的地方比较好,也方便搜索

查看全部评分

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

推荐
发表于 2018-4-20 13:26 | 只看该作者
回帖看看隐藏内容,看了几行,中间突然加上一句,需要回复才能查看

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

推荐
 楼主| 发表于 2018-4-19 21:46 来自手机 | 只看该作者 |楼主
不发一起了,评论,好少,我这都写完,遍历去除user定时器了。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

板凳
发表于 2018-4-18 18:30 | 只看该作者

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

报纸
发表于 2018-4-18 18:39 | 只看该作者
看看是什么,隐藏了一段在评分

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

地板
发表于 2018-4-18 18:44 | 只看该作者
@谈笑人生 这些记录都放一个帖子吧,别刷太多主题了。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

7#
发表于 2018-4-18 18:51 | 只看该作者
TA的课程吧

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

8#
发表于 2018-4-18 19:24 | 只看该作者
学习一下

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

9#
发表于 2018-4-18 19:30 | 只看该作者
楼主有博客么,可以关注一波

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

10#
 楼主| 发表于 2018-4-18 19:53 | 只看该作者 |楼主
本帖最后由 谈笑人生 于 2018-4-18 20:09 编辑

我不会弄啊 怎么放一个帖子里呢 教下

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

11#
发表于 2018-4-18 20:03 | 只看该作者
学习GET一下。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

12#
发表于 2018-4-18 20:06 | 只看该作者
感谢分享。学习了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则


免责声明:
吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Service@52PoJie.Cn

快速回复 收藏帖子 返回列表 搜索

吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2018-4-25 10:27

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表
中式早餐店加盟 早餐饮品加盟 雄州早餐怎么加盟 江苏早点加盟 港式早餐加盟
哪家早点加盟好 绿色早餐加盟 早点面条加盟 中式早点快餐加盟 早餐加盟品牌
早点小吃店加盟 大华早点怎么加盟 新尚早餐加盟 特色早点加盟店排行榜 早点小吃加盟店
众望早餐加盟 早点小吃加盟排行榜 早点加盟哪家好 范征早餐加盟 早点加盟多少钱
百度