源码:张栗炜虚拟键盘设备驱动

下载地址:http://www.pudn.com/downloads229/sourcecode/windows/vxd/detail1077750.html (yyxhhx 2014年提供)

今天调试了虚拟键盘的源码,发现几个问题。在这里不贴全部代码了,有兴趣的可以去下载,

编译环境是VC6.0,DDK版本是NTDDK,

通讯方式是:DeviceControl的缓冲区

直接上源码:

#include "VKeyFdo.h"
#include "..\inc\vkIoctl.h"extern "C"
{#include "hidport.h"
}/
#pragma code_seg("INIT") // start INIT section
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{// Export other driver entry points...DriverObject->DriverExtension->AddDevice = AddDevice;DriverObject->MajorFunction[IRP_MJ_CREATE                 ] = Create;DriverObject->MajorFunction[IRP_MJ_CLOSE                  ] = Close;DriverObject->MajorFunction[IRP_MJ_PNP                    ] = Pnp;DriverObject->MajorFunction[IRP_MJ_POWER                  ] = Power;DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL         ] = DeviceControl;DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = InternalControl;DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL         ] = SystemControl;extern PDEVICE_OBJECT  FunctionDevice;NTSTATUS status = STATUS_SUCCESS;UNICODE_STRING         deviceNameUnicodeString;RtlInitUnicodeString(&deviceNameUnicodeString, NT_DEVICE_NAME);status = IoCreateDevice(DriverObject, 0,&deviceNameUnicodeString,FILE_DEVICE_UNKNOWN,0, false, &FunctionDevice);if (!NT_SUCCESS(status)){return status;}UNICODE_STRING deviceLinkUnicodeString;RtlInitUnicodeString(&deviceLinkUnicodeString, DOS_DEVICE_NAME);status = IoCreateSymbolicLink(&deviceLinkUnicodeString, &deviceNameUnicodeString);if (!NT_SUCCESS(status)){if (FunctionDevice){IoDeleteDevice(FunctionDevice);return status;}}// Set fdo flags appropriatelyFunctionDevice->Flags |= DO_BUFFERED_IO | DO_POWER_PAGABLE;FunctionDevice->Flags &= ~DO_DEVICE_INITIALIZING;return STATUS_SUCCESS;
}
#pragma code_seg() // end INIT section
//
#pragma code_seg("PAGE") // start PAGE section
VOID Unload(IN PDRIVER_OBJECT DriverObject)
{}
//
#pragma code_seg() // end PAGE section

不足之处:

1、wdm的设备连接符创建不在DrvierEntry

2、参数传递应该放在扩展设备处,过多的全局变量导致了多余的异常处理

张栗炜虚拟键盘设备驱动相关推荐

  1. [linux-nopage]内存映射虚拟字符设备驱动【P119】

    文章目录 目的:内核空间映射到用户空间 环境:Ubuntu 20.04 linux内核源码5.11.0-37-generic(版本自选) 实验结果 实验知识点 实验难点 实验代码 nopage.c M ...

  2. 虚拟字符设备驱动开发步骤

    目录 前言 字符设备驱动简介 内核驱动操作函数集合(file_operations结构体) 字符设备驱动开发步骤 .ko驱动模块的加载和卸载(module_init驱动入口.insmod驱动加载) 字 ...

  3. STM32MP157 | 虚拟网卡设备驱动

    一.网络设备驱动 1. 概念 网络设备是Linux的第三类标准设备,没有对应的设备文件,使用内部设备名访问.网络设备及其驱动属于整个TCP/IP协议层的一部分,实现遵循TCP/IP协议栈的要求. 网络 ...

  4. 一张图掌握 Linux 字符设备驱动架构!【建议收藏】

    目录 一. Linux 中字符设备驱动简介 二. 字符设备驱动快速入门(超简单demo) 1. demo 2. 代码编译 3. 加载驱动模块 4. 创建设备节点文件 5. APP设备文件操作 6. 卸 ...

  5. 11-S3C2440驱动学习(五)嵌入式linux-网络设备驱动(一)虚拟网卡驱动程序

    本节是网卡驱动的入门基础部分,移植移植DM9000C网卡驱动程序 请看下节:移植DM9000C网卡驱动程序http://blog.csdn.net/fengyuwuzu0519/article/det ...

  6. 转载:谢谢原作者: 块设备驱动实战基础篇二 (继续完善170行过滤驱动代码至200行)

    1.3块设备驱动关键数据结构及函数API详细剖析 经过上节四个步骤我们已经熟悉并实战了一个最基本的过滤块设备驱动的设计技巧,我们这一节先不继续实战,我们本节把上节170行代码中接触到的块设备核心数据结 ...

  7. Linux设备驱动开发-linux驱动中的阻塞访问方式

    阻塞与非阻塞是设备访问的两种不同的模式.什么是阻塞操作呢?其是指在执行设备操作的时候,如果不能获得资源,则挂起进程直到满足可操作的条件后再进行操作.而非阻塞操作则是在进程不能进行设备操作时,并不挂起到 ...

  8. 【操作系统】设备驱动

    本文为学习李治军老师<操作系统原理.实现与实践>第八章的总结,主要讲述显示器.键盘设备驱动. 参考资料: 哈工大李治军老师操作系统mooc视频: 实践项目解析. 第八章 设备驱动 设备驱动 ...

  9. LINUX I2C设备驱动模型分析之二 总线部分分析

    上一章我们对I2C模块做了总体框架的分析,本章我们主要分析下I2C模块的总线部分,主要涉 及总线初始化.总线相关属性.总线相关接口函数处理等几部分 I2c bus的定义 I2c bus的定义如下,主要 ...

最新文章

  1. Pytorch交叉熵损失函数torch.nn.functional as F
  2. 麦迪时刻的视频和图片
  3. Python3 闭包函数及nonlocal
  4. Lanecat网猫的案例
  5. linux 对象 调出r_【转】Linux - chown 中的 -R 参数
  6. linux adduser mysql_linux_adduser
  7. Python基础——1基础
  8. mysql关闭12260端口_windows 如何查看端口占用情况?
  9. 玩转spring boot——开篇
  10. Go语言的flag库、os库、strconv库
  11. 计算机网络监控,计算机网络连接监控系统.doc
  12. 【线性代数及其应用】02 -矩阵代数
  13. 全景图下载,全景管家高清全景图(一键下载建E、720云全景原图)
  14. MFS(一)---mfs详解与部署
  15. 爬取链家二手房交易数据
  16. 桌面运维之windows部分常用命令
  17. mmorpg小地图系统制作
  18. 工程师必备硬件EMC设计规范
  19. 基于python和深度学习(语音识别、NLP)实现本地离线智能语音控制终端(带聊天功能和家居控制功能)
  20. 教你一招APP如何快速定制马甲包

热门文章

  1. 让你的Excel更精彩 让你的工作更轻松
  2. Win10 tomcat开机自启动
  3. Imagination的IMG CXT GPU荣获2022亚洲金选奖年度最佳IP/处理器
  4. 恋爱指南----《强迫的爱》
  5. 英特尔的SGX技术的漏洞
  6. camera fv5专业版2019_极致相机 Camera FV-5 v5.2.0
  7. comsol5.3 linux安装教程,COMSOL Multiphysics3.3(WinLinux)安装说明
  8. Java小练习--实现杨梅和仙人蕉的信息描述
  9. @node-click的用途
  10. WTI油价预测:病毒复苏及原油库存上升打压油价,原油多头面临双顶技术下行风险