随笔分类 - Windows驱动
摘要:一 什么是自旋锁 自旋锁(Spinlock)是一种广泛运用的底层 同步 机制。自旋锁是一个 互斥 设备,它只有两个值:“锁定”和“解锁”。它通常实现为某个整数值中的某个位。希望获得某个特定锁得代码测试相关的位。如果锁可用,则“锁定”被设置,而代码继续进入 临界区 ;相反,如果锁被其他人获得,则代...
阅读全文
摘要:一 中断分类根据中断源不同,可以将中断分为硬件中断:硬件上产生的中断,可以来自处理器的内部和外部。处理器的外部中断可以来自各种PIN信号接口和Local APIC的LINT0和LINT1引脚,以及外部的I/O APIC发送过来的中断信息。软件中断:软件上产生的中断,使用INT指令主动发起的中断,如I...
阅读全文
摘要:最近在看着《windows驱动开发技术详解》这本书,模仿着敲了第七章中的模拟文件读写部分。在Debug过程中,蓝屏了好多次并出现了各种奇葩的问题。在调了快两天之后,问题终于解决了!现在在这里一一再现遇到的问题和解决方法。 【在别人博客的评论中看到这么一句,"能让大家节约时间,就是写博客的目的之一...
阅读全文
摘要:IO_STACK_LOCATION和IRP算是驱动中两个很基础的东西,为了理解这两个东西,找了一点资料。1. IRP可以看成是Win32窗口程序中的消息(Message),DEVICE_OBJECT可以看成是Win32窗口程序中的窗口(Window)2. 任何内核模式程序在创建一个IRP时,同时还创...
阅读全文
摘要:1 实验要求(WDM驱动)2 编写过程2.1 确立整体架构2.1.1 入口函数——DriverEntry(1)作用设置pDriverObject结构体,注册AddDevice和相关PNP函数,包括IRP_MJ_PNP,IRP_MJ_CREATE等(2)注意AddDevice在Driver_Objec...
阅读全文
摘要:目录1 实验要求2 编写过程 2.1 确立整体架构 2.1.1 入口函数——DriverEntry 2.1.2 自定义创建设备函数——CreateDevice 2.1.3 卸载函数——DriverUnLoad 2.1.4IRP派遣函数 2.1.5 DUMP函数3. 收...
阅读全文
摘要:LINUX 和 WINDOWS 内核的区别[声明:欢迎转载,转载请注明出自CU ACCESSORY http://linux.chinaunix.net/bbs/thread-1153868-1-1.html]关于LINUX和WINDOWS的口水站已经很多了。本文企图从技术角度来比较下2个主流操作系...
阅读全文
摘要:Service Control Manager,服务控制管理器,人称SCM就是它!在Windows内核中,都可以看到她忙碌的身影,可以说是系统服务和驱动的管家婆了! SCM管家婆起早贪黑,每次系统启动,她也随着而起。她凭借着自己的努力,终于在Windows的内核占据了一席之地,调配着手下许多服务...
阅读全文
摘要:BOOL WINAPI EnumServicesStatusEx(_In_ SC_HANDLE hSCManager,_In_ SC_ENUM_TYPE InfoLevel,_In_ DWORD dwServiceType,_In_ DWORD dwServiceState,_Out_opt_ LP...
阅读全文
摘要:BOOL WINAPI QueryServiceStatus(_In_ SC_HANDLE hService,_Out_ LPSERVICE_STATUS lpServiceStatus);函数作用:获取指定驱动的当前状态参数:1. hService:服务句柄, OpenService 或 Crea...
阅读全文
摘要:BOOL WINAPI ControlService(_In_ SC_HANDLE hService,_In_ DWORD dwControl,_Out_ LPSERVICE_STATUS lpServiceStatus);函数作用:给指定的服务发送一个控制码参数:1. hService: Open...
阅读全文
摘要:BOOL WINAPI DeleteService(_In_ SC_HANDLE hService);函数作用:从SCM数据库中标志一个服务已删除参数:1.OpenService 或CreateService function返回的服务句柄;需要有DELETE权限。返回值:成功,非0;失败为0,错误...
阅读全文
摘要:BOOL WINAPI StartService(_In_ SC_HANDLE hService,_In_ DWORD dwNumServiceArgs,_In_opt_ LPCTSTR *lpServiceArgVectors);函数作用:开始一个服务参数:1.hService:服务句柄,由Ope...
阅读全文
摘要:SC_HANDLE WINAPI OpenService(_In_ SC_HANDLE hSCManager,_In_ LPCTSTR lpServiceName,_In_ DWORD dwDesiredAccess);函数作用:打开一个已经存在的服务参数:1.hSCManager:SCM数据库句柄...
阅读全文
摘要:SC_HANDLE WINAPI CreateService(_In_ SC_HANDLE hSCManager,_In_ LPCTSTR lpServiceName,_In_opt_ LPCTSTR lpDisplayName,_In_ DWORD dwDesiredAccess,_In_ DWO...
阅读全文
摘要:SC_HANDLE WINAPI OpenSCManager(_In_opt_ LPCTSTR lpMachineName,_In_opt_ LPCTSTR lpDatabaseName,_In_ DWORD dwDesiredAccess);函数作用:以一定的权限,在指定的计算机打开指定的SCM数...
阅读全文
摘要:零 问题假设typedef struct ListEntry{ struct ListEntry *flink; struct ListEntry *blink;}ListEntry;typedef struct MyDataStruct{ signed int x; signed int y;...
阅读全文
摘要:WDK和DDK的作用 开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发 WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WINDOWS下的驱动程序,我们需要一个DDK/WDK。驱动程序的文件格式都是PE格式。Windows驱动...
阅读全文