qintangtao

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

随笔分类 -  windows Driver

上一页 1 2

摘要:这两个函数不是返回该段内存是否可读写,而是当不可读写的时候引发一个异常(Exception)。这个异常需要用到微软的编译器提供的"结构化异常"处理变法。"结构化异常"机制会轻松的检测到这种异常进而做出相应的异常处理/************************************************************************* 函数名称:ProbeForRead* 功能描述:检查该内存是否可读* 参数列表: Address:血药被检查的内存的地址 Length:需要被检查的内存的长度,单位是字节 Alignment:描. 阅读全文
posted @ 2013-04-14 12:46 qintangtao 阅读(616) 评论(0) 推荐(0)

摘要:/************************************************************************* 返回状态值*DDK大部分返回值类型是NTSTATUS类型。查看DDK.h文件,可以看到:*************************************************************************/typedef LONG NTSTATUS;//NTSTATUS就是一个32位的整数,其每位有着不同的含义在执行为内核函数后,应该查看该函数的返回状态如果状态码高位为0,无论其它位置是否设置,该状态码代表成功绝对不 阅读全文
posted @ 2013-04-14 12:35 qintangtao 阅读(755) 评论(0) 推荐(0)

摘要:/************************************************************************* 数据类型定义* c语言的定义 DDK中的定义* void VOID* char CHAR* short SHORT* long LONG* wchar_t WCHAR* ... 阅读全文
posted @ 2013-04-14 12:09 qintangtao 阅读(539) 评论(0) 推荐(1)

摘要:分配内核函数/************************************************************************* 函数名称:ExAllocatePool* 功能描述:分配内核内存* 参数列表: PoolType:是个枚举变量 NonPagedPool:分配非分页内存 PagedPool:分配分页内存 NonPagedPoolMustSucceed:指定分配非分页内存,必须成功 DontUseThisType:未指定 ... 阅读全文
posted @ 2013-04-10 11:28 qintangtao 阅读(864) 评论(0) 推荐(0)

摘要:注意:LIST_ENTRY ListEntry; //LIST_ENTRY需要作为_MYDATASTRUCT结构体的一部分判断链表是否为空IsListEmpty(&head)从首部插入链表InsertHeadList(&linkListHead, &pData->ListEntry);从尾部插入链表InsertTailList(&linkListHead, &pData->ListEntry);从首部删除链表PLIST_ENTRY pEntry = RemoveHeadList(&linkListHead);从尾部删除链表Remove 阅读全文
posted @ 2013-04-10 10:51 qintangtao 阅读(1056) 评论(0) 推荐(0)

摘要:设备对象用于保存设备特征和状态的相关信息。一个设备对象表示一个逻辑的、虚拟的或物理的设备,设备对象的I/O请求由一个驱动对象操控着。每一个内核模式的驱动必须创建设备对象,它通过调用IoCreateDevice函数一次或多次来创建。设备对象用结构体DEVICE_OBJECT表示。每个设备对象有一个指针(NextDevice)指向下一个设备对象,从而形成一个设备对象链表。该链表的第一个设备是由驱动对象结构体中的DeviceObject成员指明的。设备对象结构体DEVICE_OBJECT的具体定义如下:typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_A 阅读全文
posted @ 2013-04-09 12:11 qintangtao 阅读(3832) 评论(0) 推荐(0)

摘要:typedef struct{PDEVICE_OBJECT DeviceObject; //指向驱动程序创建的设备对象PUNICODE_STRING HardwareDatabase; //记录的是设备的硬件数据库名,这里同样用Unicode字符串记录PFAST_IO_DISPATCH FastIoDispatch;//文件驱动中用到的派遣函数PDRIVER_INITIALIZE DriverInit;//指向DriverEntry函数的,这是通过IO管理器来建立的。PDRIVER_STARTIO DriverStartIo;//记录StartIO例程的函数地址,用于串行化操作PDRIVER_ 阅读全文
posted @ 2013-04-09 12:08 qintangtao 阅读(1142) 评论(0) 推荐(0)

摘要:// LoadNTDriver.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include #define DRIVER_NAME TEXT("HelloDDK")#define DRIVER_PATH TEXT("..\\Driver Debug\\HelloDDK.sys")/************************************************************************* 函数名称:Loa 阅读全文
posted @ 2013-04-01 17:33 qintangtao 阅读(524) 评论(0) 推荐(0)

摘要:HelloWDM.h#pragma once#ifdef __cplusplusextern "C"{#endif#include <ntddk.h>#ifdef __cplusplus};#endif#define PAGEDCODE code_seg("PAGE")#define LOCKEDCODE code_seg()#define INITCODE code_seg("INIT")#define PAGEDDATA data_seg("PAGE")#define LOCKEDDATA data 阅读全文
posted @ 2013-03-28 15:55 qintangtao 阅读(581) 评论(0) 推荐(1)

摘要:HelloDDK.h#pragma once#ifdef __cplusplusextern "C"{#endif#include <ntddk.h>#ifdef __cplusplus};#endif#define PAGEDCODE code_seg("PAGE")#define LOCKEDCODE code_seg()#define INITCODE code_seg("INIT")#define PAGEDDATA data_seg("PAGE")#define LOCKEDDATA data 阅读全文
posted @ 2013-03-28 12:14 qintangtao 阅读(419) 评论(0) 推荐(1)

摘要:<?xml version="1.0" encoding="utf-8"?><Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ImportGroup Label="PropertySheets" /> <PropertyGroup Label="UserMacros" /> <PropertyG 阅读全文
posted @ 2013-03-28 11:00 qintangtao 阅读(907) 评论(0) 推荐(1)

摘要:1、文件->新建->项目->VisualC++->空项目名称:Driver2、生成->配置管理器活动解决方案配置:新建名称:DriverDebug从此处复制设置:Debug3、视图->属性管理器展开刚配置的DriverDebug|Win32->右击->添加新项目属性表名称:driverpropertyt4、右击driverpropertyt->属性4.1、C/C++ 常规 调试信息格式 程序数据库(/Zi)4.2、C/C++ 预处理器 预处理器定义 WIN32=100 ... 阅读全文
posted @ 2013-03-27 16:11 qintangtao 阅读(2330) 评论(1) 推荐(1)

摘要:VS2008环境编译驱动A、VC9驱动编译配置B、VC9集成环境下编译驱动一、新建一个空的win32控制台程序1、选(文件→新建→项目→VisualC++项目→win32→win32控制台项目)创建一个填写上名称event然后按确定在弹出的win32应用程序向导里选应用程序设置→附加选项勾选空项目→完成。二选项目菜单→添加现有项→添加所有驱动相关的*.h,*.c,*.cpp,*.rc之类的文件。三、选工具(T)→选项(O)....→项目→VC++目录→1、在可执行文件目录中添加:D:\WINDDK\3790.1830\BIN\X862、在包含文件目录添加如下路径D:\WINDDK\3790.1 阅读全文
posted @ 2013-03-09 15:23 qintangtao 阅读(2869) 评论(0) 推荐(1)

摘要:VS2003驱动开发环境配置A、VS2003驱动编译配置B、VS2003集成环境下编译驱一、新建一个空的win32控制台程序1、选(文件→新建→项目→VisualC++项目→win32→win32控制台项目)创建一个填写上名称event然后按确定在弹出的win32应用程序向导里选应用程序设置→附加选项勾选空项目→完成。二选项目菜单→添加现有项→添加所有驱动相关的*.h,*.c,*.cpp,*.rc之类的文件。三、选工具(T)→选项(O)....→项目→VC++目录→1、在可执行文件目录中添加:D:\WINDDK\3790.1830\BIN\X862、在包含文件目录添加如下路径D:\WINDD. 阅读全文
posted @ 2013-03-09 15:17 qintangtao 阅读(418) 评论(0) 推荐(0)

摘要:手动加载NT式驱动(非工具)A、观察注册表B、手动运行驱动C、手动停止驱动运行 regedit.exeHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ServicesImagePath \??\G:\驱动教程\018_读出SSDT表当前函数地址\mini_ddk\sys\i386\DDKHelloWorld.sys"DisplayName"="DDKHelloWorld""Type"=dword:00000001 //1表示载入驱动"Start"=dword:00000003 阅读全文
posted @ 2013-03-09 14:58 qintangtao 阅读(1367) 评论(0) 推荐(0)

摘要:NT式驱动的卸载A、卸载驱动流程B、内核函数DeleteServiceC、内核函数ControlServiceD、构建UnLoadSys函数E、测试并查看调试信息一、卸载驱动流程1、用OpenSCManager函数打开服务控制管理器,取得SCM句柄,如果返回NULL,则结束,否则继续2.//hSCM2、用OpenService打开相应的服务,如果返回NULL,则结束,否则继续3.hSerVice3、用ControlService停止驱动服务,如果返回NULL,只有重新启动才能,再动态加载。4、用DeleteService动态卸载驱动程序,如果返回NULL,则打印出错调试信息,否则打印成功信息。 阅读全文
posted @ 2013-03-09 14:38 qintangtao 阅读(897) 评论(0) 推荐(0)

摘要:NT式驱动的安装A、OpenSCManagerB、CreateServiceC、OpenServiceD、StartServiceE、CloseServiceHandleF、集成到loadNTDriver函数#include<winsvc.h>正常加载驱动的步骤如下:1、调用OpenSCManager,打开SCM管理器。如果返回NULL,则返回失败,否则继续下一步;2、调用CreateService创建服务,如果用GetLastError获取的返回值为ERROR_IO_PENDING,说明服务已经创建过,此时用OpenService打开此服务.3、调用StartService开启服 阅读全文
posted @ 2013-03-09 14:23 qintangtao 阅读(1973) 评论(0) 推荐(0)

摘要:1,打开系统的testsigning模式,使得非权威CA发放的签名可以使用bcdedit /set testsigning on (XP64:在boot.ini里面添加/testsigning)2,做一个签名证书出来。MakeCert –r –pe –ss PrivateCertStore –n CN=tao test.cer3,把证书加进本机信任根CA中去。CertMgr -add test.cer -s -r LocalMachine root4,给驱动签名。Signtool sign /v /s PrivateCertStore /n tao HelloDDK.sys或者直接关闭数字签. 阅读全文
posted @ 2013-03-07 20:17 qintangtao 阅读(635) 评论(0) 推荐(0)

上一页 1 2