当前位置: 首页 > wzjs >正文

杭州网站建设优化小程序开发文档官网

杭州网站建设优化,小程序开发文档官网,怎么找到网站站长,wordpress wp syntax首先我们需要了解,在操作系统中,是分两种权限的,一种是内核态,我们也称为0环,一种是用户态,称之为3环。而在我们的电脑中,驱动程序是运行在内核态的,这意味着和操作系统内核是在同一…

首先我们需要了解,在操作系统中,是分两种权限的,一种是内核态,我们也称为0环,一种是用户态,称之为3环。而在我们的电脑中,驱动程序是运行在内核态的,这意味着和操作系统内核是在同一权限的,而普通的应用程序的权限是最低的。高权限谁不想拥有呢,因此驱动程序是很有必要了解与学习的。比如我们熟知的防病毒软件,游戏保护等,现在都在利用内核驱动技术来保护自己的数据。

windows提供了好几种驱动框架模型,这里我们采用WDM模型,这是自winodws 2000来提供给开发者的一种框架,我们用来开发NT驱动。下面我们介绍驱动程序该如何编写,其实驱动程序和普通的应用程序C语言没什么特别大的区别,在C语言中我们需要一个main函数作为入口,那么在驱动程序中DriverEntry就是主函数入口,下面我们来实现一个hello,world版本的驱动程序,代码如下:

#include<Ntddk.h>
void Unload(IN PDRIVER_OBJECT DriverObject)
{UNREFERENCED_PARAMETER(DriverObject);DbgPrint("Unload\n");}}NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPathName)
{UNREFERENCED_PARAMETER(RegistryPathName);DbgPrint("Hello Driver!!\n");DriverObject->DriverUnload = Unload;return  STATUS_SUCCESS;}

我第一次接触这段代码的时候非常陌生和惶恐,竟然没有一句看懂的,但是只要我们耐下性子来研究这个东西,没什么难的。我们再写一个C语言版本的helo,world来对比研究:

#include<stdio.h>int main(){printf("hello,world!");
return 0;
}

 在编写一个程序时我们需要一个主函数,而且需要一个返回值来表示程序的结束。在驱动中返回值一般都是NTSTATUS,这是一种状态码,成功的时候需要返回STATUS_SUCCESS。相当于C语言中的return 0。接着看驱动程序主函数中有两个参数,第一个是一个驱动对象。在内核中,系统管理的都是对象。一些重要的数据结构都是以对象为主体来操控的。我们写的是驱动程序,自然需要一个驱动对象。PDRIVER_OBJECT是一个指针,指向一个驱动对象。这个驱动对象就是对应着我们写的这个驱动程序。是系统帮我们规划好的模板,按照这个模板写程序就行了。因此我们可以看看这个驱动对象的样子:

typedef struct _DRIVER_OBJECT {CSHORT Type;CSHORT Size;//// The following links all of the devices created by a single driver// together on a list, and the Flags word provides an extensible flag// location for driver objects.//PDEVICE_OBJECT DeviceObject;ULONG Flags;//// The following section describes where the driver is loaded.  The count// field is used to count the number of times the driver has had its// registered reinitialization routine invoked.//PVOID DriverStart;ULONG DriverSize;PVOID DriverSection;PDRIVER_EXTENSION DriverExtension;//// The driver name field is used by the error log thread// determine the name of the driver that an I/O request is/was bound.//UNICODE_STRING DriverName;//// The following section is for registry support.  This is a pointer// to the path to the hardware information in the registry//PUNICODE_STRING HardwareDatabase;//// The following section contains the optional pointer to an array of// alternate entry points to a driver for "fast I/O" support.  Fast I/O// is performed by invoking the driver routine directly with separate// parameters, rather than using the standard IRP call mechanism.  Note// that these functions may only be used for synchronous I/O, and when// the file is cached.//PFAST_IO_DISPATCH FastIoDispatch;//// The following section describes the entry points to this particular// driver.  Note that the major function dispatch table must be the last// field in the object so that it remains extensible.//PDRIVER_INITIALIZE DriverInit;PDRIVER_STARTIO DriverStartIo;PDRIVER_UNLOAD DriverUnload;PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];} DRIVER_OBJECT;
typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT; 

        这是WDK里面跟进去看到的驱动对象。学过C语言的一定看得懂,其实就是个结构体。虽然在winodws内核中是用纯C写的,但是却用到了面向对象的思想。只用C语言的结构体,一样可以实现面向对象编程。这个对象是什么时候生成的呢?这也是我在学习驱动时候的好奇。后来我想明白了,在我们想要加载我们的驱动程序的时候,操作系统其实为我们做好了初始化,为我们创建一个驱动对象。如果创建成功将把这个驱动对象的地址返回给我们,因此我们就能拿着这个地址对这个驱动对象做很多事了。接下来介绍第二个参数RegistryPathName。这个参数指的是在注册表中的位置。返回给我们的也是一个指针,告诉我们它在注册表何处。接着我们用内核提供的"printf"打印一句话--Hello Driver!!。到这里和C语言相同的地方我们就讲的差不多了。下面还有一些区别于C语言的东西。

        现在我们知道驱动程序加载是在内核空间的。内核空间不像用户空间那么随意,有些东西想关就关,想开就开。稍不留神可能就造成电脑蓝屏。因此我们可能还需要提供一个卸载的功能,否则这个驱动将无法卸载。但是其实这个也不是必要的。很多商用的软件并不想别人把它关掉,自然不会提供这么一个卸载功能。这就像为啥有些杀软删不掉的原因(懂得都懂)。但是我们在做测试过程中,还是要提供这么一个卸载函数。这个函数是我们自己写的。驱动对象中会记录这个回调函数。可以参考下上面驱动对象中有一个成员叫DriverUnload,这就是指向我们提供的卸载函数的指针。因此通过驱动对象指针能访问到它。将它设置为我们提供的卸载函数。在我们提供的卸载函数中,我们目前也只提供打印一句话的功能。卸载驱动的过程是操作系统为我们隐式做的。当系统检测到驱动对象中有这么个卸载函数,将去执行我们提供的回调函数。并把我们的驱动从内核中卸载。大致了解这个过程就OK了。因此,到目前为止,我们的第一个驱动程序就完成了。我们在XP下试验一下:

我们在测试工具中看到了Hello Driver,后面两句不用管那是后续实现的功能。我们再看卸载后的状态:

我们看到停止驱动后,系统会调用我们提供的卸载回调函数,并打印了一句Unload。证明我们的驱动是没问题的。


文章转载自:

http://3Js6P9Oc.gctgc.cn
http://bsaOc2Fx.gctgc.cn
http://P6fXpxHN.gctgc.cn
http://ZYmJ3A5A.gctgc.cn
http://ihU6Qfco.gctgc.cn
http://Qtyp38BO.gctgc.cn
http://gL3ob4t3.gctgc.cn
http://Ti1fLtsk.gctgc.cn
http://NiA3t61V.gctgc.cn
http://j3bWIdnx.gctgc.cn
http://O7cDZBrW.gctgc.cn
http://eVMSQWdu.gctgc.cn
http://Ndqc2iLh.gctgc.cn
http://I81mwY82.gctgc.cn
http://JeDgFsS5.gctgc.cn
http://ZuSzotPy.gctgc.cn
http://hebdSQkZ.gctgc.cn
http://4lx08sgZ.gctgc.cn
http://rLnLZUPI.gctgc.cn
http://lXPxLF7y.gctgc.cn
http://YSaGJALk.gctgc.cn
http://sTpW2t9l.gctgc.cn
http://MlV8rahk.gctgc.cn
http://3GU5mTpp.gctgc.cn
http://vz26bKaS.gctgc.cn
http://iBe817O3.gctgc.cn
http://KRui9Tus.gctgc.cn
http://lfwwTgTy.gctgc.cn
http://RyD9soXO.gctgc.cn
http://RyQCZBDn.gctgc.cn
http://www.dtcms.com/wzjs/707934.html

相关文章:

  • 广州企业网站建设推荐世界著名的设计公司
  • 黄冈做网站技术支持的steam交易链接在哪里看
  • 设计公司网站详情前台登录 wordpress
  • 秀屿区建设局网站怎么申请订阅号
  • 沈阳做公司网站的公司php怎样做网站的注删页面
  • 网站信息化建设案例在家建设一个网站需要什么手续
  • 自适应企业建站企业网站建设谈单思路
  • 济南市住建局官方网站网站备案期间可以用二级域名访问网站吗
  • 免费建网站的怎样弄一个自己的平台
  • 怎么免费建公司网站天津专业的做网站与运营的公司
  • 如何建设专题网站小抖音小程序入口
  • 做艺术品的网站合肥医疗网站建设
  • 网站开发地图板块浮动网站建设v5star
  • 达州做淘宝网站重庆企业网站定制开发公司
  • 淘宝页面设计的网站企业类展厅设计公司
  • 西安建设银行网站wordpress流量插件
  • 免费茶叶网站建设skxy wordpress
  • 自媒体运营湖南网站优化
  • 泸州市网站建设网站建设需求登记表
  • 做网站需要租空间吗广州seo网站推广平台
  • 房地产网站建设内容三只松鼠的网站建设理念
  • 建网站怎么做报分系统去年做啥网站能致富
  • 校园二手市场网站建设wordpress放nas
  • 外贸论坛网站有哪些目前最好的免费网站
  • 网站开发定制宣传图片网站开发测量像素工具
  • 元器件网站建设案例wordpress宝宝网商城免费模板
  • 零基础怎么开网店杭州网站推广与优化
  • 叫企业做的网站可不可以自己改主题公众号平台网站开发
  • 网站建设与管理大学生职业规划长沙装修公司排名十强
  • 如何在建设厅网站搜索企业外贸网站建设规划