普通x64证书签名

x64证书签名
    Vista 之后的 64位os里 ,内核程序都需要签名才能加载。 要使x64 os加载自己的驱动,有3种方式 : 1)、开机时--> F8--> "Disbale Driver Signature Enforcement"。 2)、Test-signing 。ms为 程序开发者 提供的测试内核代码的方式。(用...

普通漫谈兼容内核-Windows线程间的强相互作用

漫谈兼容内核-Windows线程间的强相互作用
    在现代的计算机系统中,一项作业(Job)往往需要多个进程或线程的协作,而操作系统则要为进程或线程间的协作提供基础设施和机制上的支持。操作系统、特别是内核,提供什么样的设施和手段,系统中的进程之间和线程之间就会有什么样的相互作用。如果把一个系统比作一个社会,那么系统中的进程和线程就好像是社会中的成员。成员的行为和成员之间...

普通Windows用户模式内核模式-转

Windows用户模式内核模式-转
    运行 Windows 的计算机中的处理器有两个不同模式:“用户模式”和“内核模式”。根据处理器上运行的代码的类型,处理器在两个模式之间切换。应用程序在用户模式下运行,核心操作系统组件在内核模式下运行。多个驱动程序在内核模式下运行,但某些驱动程序在用户模式下运行。 当启动用户模式的应用程序时,Windows 会为该应用程...

普通物理地址和虚拟地址的概念

物理地址和虚拟地址的概念
    虚拟地址和物理地址的概念 CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以...

普通Windows MDL原理总结

Windows MDL原理总结
    1 先是mdl的数据结构。 2 下面根据用法逐步的讲解mdl数据结构的含义:一般用法,先是 IoAllocateMdl :原型为: 最常用的是VirtualAddress和Length。把自己的NonPageable buffer的起始地址传给IoAllocateMdl ,长度也传给他。可是这个函数具体做了啥呢(下面只...

普通win32内存管理

win32内存管理
    1.Windows的内存结构Windows系统中的每个进程都被赋予它自己的虚拟地址空间。对于32位进程来说,这个地址空间是4GB,因为32位指针可以拥有从0x00000000至0xFFFFFFFF之间的任何一个值。对于64位进程来说,则这个空间是16EB。由于每个进程可以接收它自己的私有的地址空间,因此当进程中的一个线...

普通在驱动和应用程序间共享内存

在驱动和应用程序间共享内存
    在不同的场合,很多驱动编写人员需要在驱动和用户程序间共享内存。两种最容易的技术是: l 应用程序发送IOCTL给驱动程序,提供一个指向内存的指针,之后驱动程序和应用程序就可以共享内存。(应用程序分配共享内存) l 由驱动程序分配内存页,并映射这些内存页到指定用户模式进程的地址空间,并且将地址返回给应用程序。(驱动程...

普通驱动编程-NT - WDM - WDF 驱动概念

驱动编程-NT - WDM - WDF 驱动概念
    NT是驱动模型:NT式驱动程序模型是一种比较老式的驱动程序模型,但适用于现有的Windows系统。NT式驱动模型没有固定的形式,最简单的NT式驱动程序模型这一特点,程序开发者可以编写一个完全不支持硬件工作的驱动程序,却可以将代码运行在内核模式中。 WDM驱动程序模型:WDM式驱动程序在NT式驱动程序的基础上,还必须: ...

普通驱动层注册表操作

驱动层注册表操作
    在用户态下面,有大把的API可供我们操作注册表,例如RegOpenKey,RegCloseKey等,这些API都是由windows提供给用户态使用的API。 那么对于驱动层了,因为驱动编程,并没有哪个能够提供额外的库可供我们调用,肯定是不能调用如RegOpenKey等这些API函数,那难道内核态就不能操作注册...

普通内核层与应用层通信详解

内核层与应用层通信详解
    做驱动开发的肯定会遇到应用层与内核层的通信的问题,首先说内核层与应用层的通信可以大概分为两个方面,第一是应用层向内核层主动传递消息,第二是内核层主动与应用层通信。下面我们将分开来谈两个方面。 我们先来看应用层向内核层传递的方法: [cpp] view plain copy BOOL DeviceIoControl...

普通Overlapped I/O 和 完成端口等异步IO在内核中的通知方式

Overlapped I/O 和 完成端口等异步IO在内核中的通知方式
    写这篇文章的动机:是因为最近在应用程序中调用DeviceIoControl读写自己做的一个驱动程序的数据,传输的数据包很多。老的处理方式只是简单的采用多线程阻塞读写数据,这几天突然想到了完成端口,于是换成 完成端口后,只用一个线程,投递上百个Overlapped读写操作,效率比原来高了许多,因此就想从windows内核...

普通内核编程之-系统时间和定时器

内核编程之-系统时间和定时器
    内核编程与应用程序编程一个很重要的不同点在于:应用编程中,多数情况下只需考虑单线程就可以;在内核编程中,绝大多数情况下所写的代码都位于多线程环境中。 获得当前“滴答数”: 获得系统日前和时间往往是为了写日志,获得启动毫秒数则很适合用来做一个随机数的种子。有时也使用时间相关的函数来寻找程序的性能瓶颈。 在Win32开发中...
共16条记录