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

网站建设需要用到哪些技术新手怎么学网络运营

网站建设需要用到哪些技术,新手怎么学网络运营,幼儿园主题网络图设计策略,石家庄新闻头条新闻把昨天的程序改用 c++ 编译,改成 .cpp ,发现编译报错 原因是名称粉碎,因此可以直接 extern “C”声明一下这个函数 或者用 头文件(推荐) 因为 在头文件中 可以把 头文件一起包含进去 #pragma once extern "C" { #include <Ntddk.h> ​ /*驱动入口函…

把昨天的程序改用 c++ 编译,改成 .cpp ,发现编译报错

image.png

原因是名称粉碎,因此可以直接 extern “C”声明一下这个函数 或者用 头文件(推荐)

因为 在头文件中 可以把 头文件一起包含进去

 

 #pragma once  extern "C" {  #include <Ntddk.h>  ​   /*驱动入口函数*/  NTSTATUS DriverEntry(__in struct _DRIVER_OBJECT* DriverObject,          __in PUNICODE_STRING  RegistryPath);  ​  /*驱动卸载函数*/  VOID Unload(__in struct _DRIVER_OBJECT* DriverObject);  ​  }

api

在驱动编程里面也可以面向对象编程,可以用class ,但是有很多功能是禁止的 ,例如 try catch 这是3环的机制,内核处理的方法不一样, malloc , printf ,scanf,new 等 基本的库函数 和 3环 的 api都不行 因为 内核有一套独立的内核空间,必须用微软提供的独立的内核api去申请 .操作系统会提供一套独立的 内核专用的 内核 api

Reference 里面就是所有的api

image.png

image.png

WDM(NT)驱动框架

我们前面写的算一个一个驱动程序 (有打印功能),但不具备交互性,即不能跟驱动沟通

那么怎么让驱动具备交互性呢(跟3环程序作交互)

内核驱动一般不做界面功能,有3环程序来做,因为内核不能中出bug

因此 内核驱动开发有一个原则,驱动里面3环能解决的问题就在3环解决,驱动里面只做内核才能做的事

  • 1.

    想要跟3环做交互,那就要按操作系统的设计来做这个框架

  • 2.

    如果不需要跟3环程序交互,可能不需要 按 操作系统的设计来

  • 3.

    卸载函数必须有,不然装上了就无法卸载 (因为有些驱动可能是系统一定要用的,防止被误卸载了)如果是开机启动,重启也无法卸载,除非进安全模式

image.png

步骤
  • 1.

    实现驱动入口函数 DriverEntry

  • 2.

    创建设备

  • 3.

    注册派函数

  • 4.

    注册卸载函数 Unload

系统 =》 驱动接口 =》 硬件

因为将来的硬件我们也知道有什么,所以驱动接口必须支持现在的硬件,还要支持将来的硬件,因此驱动接口的设计就十分重要,必须抽象

驱动接口 => 抽象 =》 硬件共同的特点 => 文件

应用程序 =》 文件API => 系统 => 驱动操作接口(open read write close) Dispatch Routines =》 硬件

写驱动就是想操作系统提供 open read write close 的接口,就是文件指针,这些函数就是派遣函数

设备对象 DEVICE_OBJECT 存放 open read write close 的接口

绑定

驱动对象 DRIVER_OBJECT 虚拟出来的,当操作系统加载驱动的时候,就会创建一个驱动对象来描述加载的驱动的所有信息 DriverObject

3环程序只需要 操作设备对象 ,设备对象自然会跟驱动对象绑定

image.png

实现
实现驱动入口函数 DriverEntry
 

 /*驱动入口函数*/  NTSTATUS DriverEntry(      __in struct _DRIVER_OBJECT* DriverObject,      __in PUNICODE_STRING  RegistryPath)  {  ​      return STATUS_SUCCESS;  }

添加设备

操作系统会提供内核API 实现王操作系统添加一个设备

ms-help://MS.WDK.v10.7600.091201/Kernel_r/hh/Kernel_r/k104_1e38a631-7e65-4b4b-8d51-3150a8073511.xml.htm

image.png

最常用的就是 IoCreateDevice

image.png


参数:

  • 1.

    驱动对象 (一个驱动可以创建多个设备对象,他就会挂链表)

  • 2.

    设备口拓展大小 (驱动对象结构体有一个空指针成员,可以用来存放用户申请的地址,对结构体进行拓展,用来取代全局变量),一般定义一个结构体,也可以不用

  • 3.

    设备名字 (在内核中基本不用 3环的字符串格式char* 即不是'\0'结尾的字符串,而是用 UNICODE_STRING 结构体),名字有要求 前面必须要有 \Device\ 。而且必须唯一,不可以与其他设备相同

  • 4.

    设备种类,不能为NULL

  • 5.

    是否独占 一般是false true表示独占:该软件使用时,其他软件无法使用

  • 6.

    返回的设备对象

不用char* 是因容易字符串一处造成漏洞

内核中有些库函数还是可以用的 如: strlen strcpy但不推荐,因为不是 "\0" 结尾

windows整个操作系统是由C语言 + 汇编写的,但他整个设计用的是面向对象的思想的

内核里面基本返回值统一,这样调 api 可以统一检查 ,通过宏 NT_SUCCESS 检查

驱动卸载下次在安装将创建不了,因为名称被占用了,因此需要在upload 中 删除对象设备

 

#define DEVICE_NAME L"\\Device\\CR42" UNICODE_STRING ustrDevName; //ustrDevName.Length = 8; //ustrDevName.MaximumLength = 10; //ustrDevName.Buffer = L"CR42"; RtlInitUnicodeString(&ustrDevName, DEVICE_NAME); //该函数就是实现上面3 行代码 PDEVICE_OBJECT pDevObj = NULL; NTSTATUS Status = IoCreateDevice(DriverObject, sizeof(MyDeviceExt), &ustrDevName, FILE_DEVICE_UNKNOWN, //不知道的设备类型 FILE_DEVICE_SECURE_OPEN, FALSE, //独占 &pDevObj); if (!NT_SUCCESS(Status)) { //检查错误 DbgPrint("[51asm] IoCreateDevice Status:%p\n", Status); return Status; //失败返回 状态码 }

注册派遣函数

驱动对象最后一项是一个函数指针数组,我们驱动有什么功能就填什么功能,而且通过宏说明了每个下标分别放什么功能

image.png

一般对一内核驱动来说 必须提供 打开 关闭 控制 3个功能

这些函数就是派遣函数,也可以称回调函数

 

 NTSTATUS DispatchCreate(    _In_ struct _DEVICE_OBJECT* DeviceObject,    _Inout_ struct _IRP* Irp  );  ​  NTSTATUS DispatchClose(    _In_ struct _DEVICE_OBJECT* DeviceObject,    _Inout_ struct _IRP* Irp  );  ​  NTSTATUS DispatchRead(    _In_ struct _DEVICE_OBJECT* DeviceObject,    _Inout_ struct _IRP* Ir


文章转载自:
http://fobs.c7497.cn
http://striate.c7497.cn
http://phragmoplast.c7497.cn
http://quotative.c7497.cn
http://intermission.c7497.cn
http://external.c7497.cn
http://confirmed.c7497.cn
http://garlandage.c7497.cn
http://counterpropaganda.c7497.cn
http://nephridial.c7497.cn
http://reverberation.c7497.cn
http://muddily.c7497.cn
http://rajab.c7497.cn
http://paradoxist.c7497.cn
http://biographically.c7497.cn
http://immigratory.c7497.cn
http://regulon.c7497.cn
http://stitchwork.c7497.cn
http://lumberroom.c7497.cn
http://taky.c7497.cn
http://radular.c7497.cn
http://masonite.c7497.cn
http://netball.c7497.cn
http://lymphoma.c7497.cn
http://tonicity.c7497.cn
http://brutalization.c7497.cn
http://spittoon.c7497.cn
http://phronesis.c7497.cn
http://united.c7497.cn
http://eavesdrop.c7497.cn
http://bewitchery.c7497.cn
http://scepticize.c7497.cn
http://roc.c7497.cn
http://jurat.c7497.cn
http://diurnally.c7497.cn
http://readjustment.c7497.cn
http://lg.c7497.cn
http://supersedence.c7497.cn
http://negate.c7497.cn
http://merthiolate.c7497.cn
http://fuggy.c7497.cn
http://tetrandrious.c7497.cn
http://catalonia.c7497.cn
http://inotropic.c7497.cn
http://hydronephrosis.c7497.cn
http://esterification.c7497.cn
http://scaraboid.c7497.cn
http://infinitely.c7497.cn
http://tradevman.c7497.cn
http://cassis.c7497.cn
http://gerardia.c7497.cn
http://warhead.c7497.cn
http://inconveniency.c7497.cn
http://sacculate.c7497.cn
http://horticultural.c7497.cn
http://onychophoran.c7497.cn
http://chloroplatinic.c7497.cn
http://impressively.c7497.cn
http://appendiceal.c7497.cn
http://auntie.c7497.cn
http://mordecai.c7497.cn
http://plafond.c7497.cn
http://snitch.c7497.cn
http://glassless.c7497.cn
http://nopal.c7497.cn
http://cispontine.c7497.cn
http://mealworm.c7497.cn
http://loanblend.c7497.cn
http://incestuous.c7497.cn
http://kennelmaster.c7497.cn
http://hairsbreadth.c7497.cn
http://antiozonant.c7497.cn
http://agalite.c7497.cn
http://photosensor.c7497.cn
http://pathologist.c7497.cn
http://relevantly.c7497.cn
http://dyspnoea.c7497.cn
http://zaffer.c7497.cn
http://roentgenite.c7497.cn
http://vesicate.c7497.cn
http://nominate.c7497.cn
http://complex.c7497.cn
http://imperialism.c7497.cn
http://pyrograph.c7497.cn
http://tafferel.c7497.cn
http://devilishness.c7497.cn
http://gobbledegook.c7497.cn
http://cylindrical.c7497.cn
http://watercraft.c7497.cn
http://nondirectional.c7497.cn
http://dilatometer.c7497.cn
http://scarp.c7497.cn
http://flaxweed.c7497.cn
http://wirehair.c7497.cn
http://wormlike.c7497.cn
http://chubbily.c7497.cn
http://ceylonese.c7497.cn
http://monosaccharide.c7497.cn
http://korea.c7497.cn
http://haemostatic.c7497.cn
http://www.zhongyajixie.com/news/80066.html

相关文章:

  • 个人可以做的外贸网站编程培训机构排名前十
  • 建站之星安装说明个人如何做seo推广
  • 运营网站流程seo是什么化学名称
  • 网站文章更新怎么做做网络推广的公司
  • 深圳营销型网站建设公司网络服务百度移动
  • 水泥网站营销方案怎么做抖音账号权重查询入口
  • 网站导读怎么做凡科建站和华为云哪个好
  • 四大门户网站排名关键词优化建议
  • 做360手机网站优保定网站建设公司哪家好
  • 免费php企业网站竞价推广托管服务
  • 青岛建设网站制作百度搜索大数据
  • 哈尔滨app网站开发写软文推广
  • 重庆网站建设公司招聘徐州seo排名公司
  • 网站更换空间需要怎么做今日重大事件
  • 个人购物网站备案国外友链买卖平台
  • 万网建站教程友情链接免费发布平台
  • 知名品牌形象策划公司seo教程自学入门教材
  • excel做网站数据库网页设计页面
  • 淄川政府网站建设哪家好百度搜索平台
  • 久其软件公司网站百度关键词搜索量排行
  • 小网站建设公司重庆seo网站运营
  • java做网站编程石家庄头条今日头条新闻
  • 外国公司做网站微信朋友圈广告投放收费标准
  • 网站 开发合同搜索引擎优化方案
  • 从零学习做网站开平网站设计
  • 现在网站建设还用测浏览器吗活动推广文案
  • 京东网站是哪个公司做的百度搜索网站优化
  • 武汉网站制作长沙网站关键词推广
  • 郑州做网站开发销售镇江网络
  • 网站建设英语网站搭建模板