首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于WDFPCIPCIe接口卡Windows驱动程序(5)-如何为硬件移植驱动程序

在读研两年,我也分别为所在课题组移植了自己编写驱动程序,在Windows 32位和64位平台下PXI、PXIe、PCI、PCIe板卡分别得到了验证。...这篇文章根据自己最新编写驱动代码(源代码请找博主索取),主要讲述如何为自己硬件板卡移植驱动程序,并简单讲述如何使用Altera系列FPGA配置PCI IP核,然后对INF文件作简要描述,最后描述如何使用...3.3 应用程序如何读设备 成功打开设备后, 调用 DeviceIoControl 即可通过 IOControl 队列与驱动程序通信, 以读32bit 数据为例, 首先向驱动程序写入需要读存储单元地址...3.4 应用程序如何写设备 成功打开设备后, 调用 DeviceIoControl 即可通过 IOControl 队列与驱动程序通信, 以写32bit 数据为例, 首先向驱动程序写入需要写存储单元地址...3.5 应用程序如何对设备进行DMA传输 通过Win32API 函数ReadFile和WriteFile对设备句柄进行文件读写操作, 在内核驱动中会调用驱动程序 qd41EvtIoRead和qd41EvtIoWrite

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

如何设置SAP以通过Windows驱动程序进行打印

环境 如何设置SAP以通过Windows驱动程序进行打印;SAP R / 3;SAPWIN 解 预加载SAP设备类型允许将SAP打印作业假脱机到Windows打印驱动程序。...要设置SAP Spool Administrator将作业转发到Windows操作系统上Lexmark打印机驱动程序,请执行以下操作: 在SAP系统上打开Spool Administrator。...出现类似于以下所示屏幕。 image.png 在输出设备字段中,输入此输出设备名称。 Lexmark建议选择一个描述性名称。(在此示例中,给出描述性名称为“喷墨打印”。)...如果选择F ,则SAP系统将在客户端工作站Windows打印机文件夹中寻找与打印机驱动程序名称匹配设置。 选择__default会使系统自动默认为Windows默认打印机。...所述主机线轴访问方法设置是指打印机连接。 F表示前端打印,表示SAP应该通过Windows应用程序打印到Windows打印机文件夹中打印机驱动程序。 L表示本地。

1.3K20

程序员如何用Python了解女朋友情绪变化

接着,开启微信机器人,为了程序健壮性,自动判断一下操作系统,根据不同操作系统执行不同指令: # 启动微信机器人,自动根据操作系统执行不同指令 # windows系统或macOS Sierra系统使用...bot = Bot() # linux系统或macOS Terminal系统使用bot = Bot(console_qr=2) if('Windows' in platform.system()):...# Windows bot = Bot() elif('Darwin' in platform.system()): # MacOSX bot = Bot() elif('Linux...,请自己设置") 设置完相关参数以后,我们再来学习一下,如何每天教女友学英语: # 获取每日励志精句 def get_message(): r = requests.get("http://open.iciba.com...your_message) except: # 出问题时,发送信息到文件传输助手 bot.file_helper.send(u"守护女友出问题了,赶紧去看看咋回事~") 最后,就是如何每天定时发关心语给女友问题了

90610

程序员如何用Python了解女朋友情绪变化

接着,开启微信机器人,为了程序健壮性,自动判断一下操作系统,根据不同操作系统执行不同指令: # 启动微信机器人,自动根据操作系统执行不同指令 # windows系统或macOS Sierra系统使用...bot = Bot() # linux系统或macOS Terminal系统使用bot = Bot(console_qr=2) if('Windows' in platform.system()):...# Windows bot = Bot() elif('Darwin' in platform.system()): # MacOSX bot = Bot() elif('Linux...,请自己设置") 设置完相关参数以后,我们再来学习一下,如何每天教女友学英语: # 获取每日励志精句 def get_message(): r = requests.get("http://open.iciba.com...your_message) except: # 出问题时,发送信息到文件传输助手 bot.file_helper.send(u"守护女友出问题了,赶紧去看看咋回事~") 最后,就是如何每天定时发关心语给女友问题了

65520

如何在控制台程序中监听 Windows 前台窗口变化

前一段时间总会时不时发现当前正在打字窗口突然失去了焦点,于是很希望有个工具能实时监听前台窗口变化,并实时输出出来。...本文会介绍两类知识,一类是如何在 .NET/C# 程序中方便地调用 Win32 API,另一类是在控制台程序中开启 Windows 消息循环。...虽然我第一时间想到了延时轮询方式,并且好久以前也确实是这么写。但其实有更好方法来解决这个问题,而且 Lsj Window Debugger 也正计划实现这个功能,对此也有更多了解。...; // 监听系统前台窗口变化。...,那么就可以得到下面的效果: 关于如何在控制台中输出表格(并实现中英文字符对齐显示),可以阅读我另一篇博客。

77820

基于WDFPCIPCIe接口卡Windows驱动程序(4)- 驱动程序代码(源文件)

DriverEntry 例程需要完成任务主要包括: 激活 WPP( Windows software trace preprocessor)软件调试,为可选任务;(对应代码25-27行) 注册驱动程序...Windows 2000及其以后操作系统都是以I/O请求包形式与驱动程序进行通信。...当Windows操作系统收到一个从应用程序传送过来I/O请求后,I/O管理器将它封装成I/O请求包发送给设备驱动程序。...在看完这几篇文章后,将源代码通过VS2013+WDK8.1编译就能生成相应PCI/PCIe硬件板卡Windows驱动程序(.sys文件),为了实现对驱动程序安装与验证,还需要编写INF文件和应用程序文件...Windows设备驱动程序WDF开发 孔鹏. 基于WDF光纤传输卡PCIe接口驱动研究和实现 杨阿锋基于WDFPCIe接口高速数据传输卡驱动程序开发

2.3K31

基于WDFPCIPCIe接口卡Windows驱动程序(3)- 驱动程序代码(头文件)

在第4行注释里,写明了本文件主要作用是为驱动程序和应用程序通信提供GUID接口。...在Windows平台下实现对硬件设备控制,需要应用程序能够与底层驱动进行通信,应用程序与驱动通信设计过程中有两个重要概念,即GUID值和CTL_CODE宏。...开发者可以使用VS2013下工具GUIDGen.exe生成GUID值,该GUID标识驱动程序,应用程序根据这个GUID值来找到对应驱动程序。...,由I/O管理器完成复制数据任务;direct方式:I/O管理器锁定应用程序缓冲区物理内存页,并创建一个MDL(内存描述符表)来描述该页,驱动程序将使用MDL工作;neither方式:I/O管理器把应用程序缓冲区虚拟地址传递给驱动程序...驱动程序所需要头文件都包含在了一起,并且disable了一些警告,由于驱动程序开发非常注意warnning处理,VS2013下是默认有warnning时候不通过编译,需要开发者手动设置一下。

1.5K20

Windows 内核驱动程序完整性校验原理分析

在上一篇文章中提到了 Windows Vista 及之后版本 Windows 操作系统在驱动程序加载完成后,驱动中调用一些系统回调函数(如 ObRegisterCallbacks,可用来监控系统中对进线程句柄操作...,如打开进程、复制线程句柄等)等 API 中会通过 MmVerifyCallbackFunction 函数对该驱动程序进行完整性检查,检测未通过则会返回 0xC0000022 拒绝访问返回值。...在这篇文章中将会对这个函数进行简单分析,以明确其原理。 0x0 获取函数地址 通过 Windbg 连接 64 位 Windows 7 SP1 虚拟机,并通过 u nt!...每个节点是一个 LDR_DATA_TABLE_ENTRY 类型结构体对象。以下是在 Windows 7 x64 SP1 操作系统环境下该结构体数据类型定义。...现在回想在编译链接驱动程序时候,在 sources 文件中可选添加 LINKER_FLAGS=/INTEGRITYCHECK 链接标记,其实就是给生成 sys 文件 PE 文件头中对应 Flags

1K10

如何应对不断变化需求?

在我知道DDD之前,对于如何给类命名,我曾经提到过以下想法。 如果我们用客户习惯使用词语来命名类呢?这难道不让我们更容易向客户解释我们为他们实际建造了什么吗?...有时,我们不得不告诉我们客户:这在技术上是不可能(banq注:客户希望手机里应用背景随着手机外护套颜色变化变化,有的产品经理不会告诉客户这是不可能,而是让程序员实现,程序员能不爆发吗?)。...那么,当你不知道变化会是什么样子时候,你该如何规划它们呢?以下是一些你可以做事情。 1. 对齐 你知不知道最初对技术债务描述是这样: 如果不能使程序与领域思考方式相一致,就会失败。...(因为你已经按照理解了领域本身逻辑,好像能提前预知客户变化需求一样) 2.经常付交 另一种应对客户变化需求方法是让它尽快发生。发生得越早,重构代码就越少。...关键是,当我们已经建立了大量软件,随着时间推移会看到需求变化,我们需要跟随它变化本能。

37120

Linux驱动实践:如何编写【 GPIO 】设备驱动程序

目录 示例程序目标 编写驱动程序 编写应用程序 卸载驱动模块 在前几篇文章中,我们一块讨论了:在 Linux 系统中,编写字符设备驱动程序基本框架,主要是从代码流程和 API 函数这两方面触发。...这篇文章,我们就以此为基础,写一个有实际应用功能驱动程序: 在驱动程序中,初始化 GPIO 设备,自动创建设备节点; 在应用程序中,打开 GPIO 设备,并发送控制指令设置 GPIO 口状态; 示例程序目标...编写驱动程序 以下所有操作工作目录,都是与上一篇文章相同,即:~/tmp/linux-4.15/drivers/。...另外还有一点:在上面示例代码中,对设备操作函数只实现了 open 和 ioctl 这两个函数,这是根据实际使用场景来决定。 这个示例中,只演示了如何控制 GPIO 状态。...如何确认/dev/mygpio0这个GPIO状态确实被设置为1了呢?

4.9K30

基于WDFPCIPCIe接口卡Windows驱动程序(2)-开发者需要了解WDF中一些重要概念

在上一篇简要介绍了WDF和开发环境搭建后,本篇将讲述几个WDF中概念,对开发者了解WDF非常有帮助,属于“内功部分”; 本篇文章结构将没那么清晰,当句句都是作者通过看书、看论文、看MSDN提炼出来,...除非你对这个warnning带来影响非常了解; 8、派遣函数又可称为回掉函数,提供给操作系统调用。这些派遣函数是我们主要工作重点; 9、创建设备时要判断设备是否创建成功,比进行必要失败处理。...如果框架可以处理IRP,则不会涉及到KMDF驱动程序;如果框架处理不了就通过调用KMDF驱动程序来实现事件处理程序来获取帮助; 10、WDK中头文件包含条件语句指定编程元素仅在某些版本Windows...好吧,还没有写完~ 1、创建驱动程序时,可以指定Windows 7为基本目标操作系统,在这种情况下,驱动程序会在Win7或更高Windows上运行; 2、KMDF为驱动程序提供基于对象接口,对象接口包括...) 3、每个基于框架驱动程序都包括:一个DriverEntry例程,可在加载驱动程序时调用,一组事件回调函数,框架将在发生特定于对象事件时调用这些函数; 4、基于 Windows 驱动程序分为三种类型

1.7K20

windows服务器密码里最后一个字母建议设置小写字母

vnc左上侧发送ctrl alt del 弹出登录框时,在密码输入框里通过控制台粘贴最后一个字母(注意是最后一个字母,不是最后一个字符)是大写字母密码时,密码里最后一个字母如果是大写,会自动触发打开服务器键盘大写...,使得整个密码大小写字母完全颠倒,对使用造成不便 oQsbxjd#7pH2 9Z~KmApx:4JnC$ eB9ermsyd8J& O37?...tzikrelG s=n2Xw9oywnF cogno>fi10OW 这个问题必现,我看阿里云也有这样问题,这应该是控制台vnc通病,所以我密码最后一个字母会有意识地设置成小写字母。...平时我一般也不用vnc,偶尔维护时才用,大多数时候是mstsc远程复制粘贴密码(注意复制时不要带前后空格),当然也有很多远程工具可以保存密码,很是方便,比如multidesk(本质上还是调用底层mstsc...,类似2wsx#EDC4rfv%TGB这样键盘上固定顺序按键密码从构成上来说,大写、小写、数字、特殊字符、长度都到位了,但是这类密码是弱密码,如果采用这样密码很容易被入侵。

97240

给MacBook写一个更好Windows触摸板驱动程序

ndows Precision触摸板驱动程序实现 众所周知 Boot Camp 触摸板驱动不是那么好用,所以我们就来实现一个在 Windows 10 上能用触摸板驱动吧。...微软在 Windows 8.1 后加入了一套新触摸板模型,叫做 Precision Touchpad,相关文档可以看这里。...所需要所有 HID 描述符和 Top-level Collection。HID 描述符会被对应到相应 C Struct 里。 之后需要配置和读取设备。...其实有一些硬需求用 Windows 也挺好。 有没有演示? YouTube 设备支持 某些MacBook Pro和MacBook Air存在问题。我正在研究它。...如果你有安装Windows设备,请联系我,这样我就可以远程查看问题(因为我没有很多设备)。 ?非Retina MacBook ?

1.5K10

函数调用时栈是如何变化

大家都知道函数调用是通过栈来实现,而且知道在栈中存放着该函数局部变量。但是对于栈实现细节可能不一定清楚。本文将介绍一下在Linux平台下函数栈是如何实现。...栈帧结构 函数在调用时候都是在栈空间上开辟一段空间以供函数使用,所以,我们先来了解一下通用栈帧结构。...如图所示,栈是由高地址向地地址方向生长,而且栈有其栈顶和栈底,入栈出栈地方就叫做栈顶。 在x86系统CPU中,rsp是栈指针寄存器,这个寄存器中存储着栈顶地址。rbp中存储着栈底地址。...= 5,y = 10,z = 0; z = sum(x,y); printf("%d\r\n",z); return 0; } 反汇编如下,下面我们就对照汇编代码一步一步分析下函数调用过程中栈变化...整个函数跳转回main时候,他rsp,rbp都会变回原来main函数栈指针,C语言程序就是用这种方式来确保函数调用之后,还能继续执行原来程序。

3.1K21

如何爬取实时变化 WebSocket 数据

一、前言 作为一名爬虫工程师,在工作中常常会遇到爬取实时数据需求,比如体育赛事实时数据、股市实时数据或币圈实时变化数据。如下图: ? ? ?...轮询指的是客户端按照一定时间间隔(如 1 秒)访问服务端接口,从而达到 '实时' 效果,虽然看起来数据像是实时更新,但实际上它有一定时间间隔,并不是真正实时更新。...Headers 标签页记录是 Request 和 Response 信息,而 Frames 标签页中记录则是双方互传数据,也是我们需要爬取数据内容: ?...Frames 图中绿色箭头向上数据是客户端发送给服务端数据,橙色箭头向下数据是服务端推送给客户端数据。...也就是 ws 安全版,它们关系跟 HTTP/HTTPS 一样。

1.6K10

敏捷项目如何拥有管理变化能力?

本文基于自己经验,从三个方面分享一下敏捷项目如何拥有管理变化能力。 ---- 1 识别什么样变化能带来真正风险 很多人听过这句话:永远不变只有变化本身。...---- 2 如何管理不确定性带来变化 有这么三个阶段。 第一个阶段是事前 既然知道变化是必然,那就不妨时刻准备着,不间断去诊断和评估现状。...第二个阶段是事中 也就是变化发生了,如何应对?...我们很多项目有打破自己设定边界勇气,但是在客户框架里,或者在和客户共同框架里,止步不前,顾虑重重,有时候不敢做,有时候不知道如何做。...比如,有的时候你会发现客户也陷在不确定性里,不知道如何应对变化,很多时候团队会选择等待,目睹客户在犹豫中错失着快速调整良机。

81910
领券