- 1、本文档共109页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
APP中打开与驱动程序联系 结束后一定要卸载驱动程序 驱动程序已经卸载 下面我们来修改有关代码,以便增加驱动程序和应用程序之间相互通信的内容。需要增加的内容包括: 使用Read和Write方式分别从驱动程序读入字符和 向驱动程序写字符。 使用IO控制代码方式分别从驱动程序读入字符和 向驱动程序写字符。 使用IO控制代码方式向驱动程序写字符串再从驱动程序中读出该字符串,并返回反馈串信息。 注意:程序中暗红色显示的部分是我们添加或修改过的语句,其他是DriverWorks自动生成的。蓝色显示的部分是要删除的语句。省略号的部分是不变的。语句中T.Trace(TraceInfo, __FUNCTION__“xxxx”)这样的语句是向调试软件输出信息,该信息可在DriverMonitor或其他调试监视器中看到。 2)完成应用程序和驱动程序之间的信息交换 a.1 使用Read方式读 SampleDevice.cpp void SampleDevice::SerialRead(KIrp I) { T.Trace(TraceInfo, __FUNCTION__++. IRP %p\n, I); NTSTATUS status = STATUS_SUCCESS; PUCHAR pBuffer = (PUCHAR) I.BufferedReadDest();//取得返回数据BUFF的指针 ULONG readSize = I.ReadSize( ); //获得应用程序希望读驱动程序信息的字节数。 ULONG bytesRead = 0; char buff[512]; int n =512, j = (n % 26); for (int i=0; in; i++, j=(j + 1)%26) { buff[i] = a + j; } buff[readSize]=\0; //指定串尾 strcpy((char *)pBuffer,buff); // 把给应用程序的数据拷贝给返回BUFF T.Trace(TraceInfo,__FUNCTION__ The string you will read is %s\n, buff ); // 输出调试信息 bytesRead = strlen(buff); // Count of bytes read I.Information() = bytesRead; // 返回给应用程序的信息的字节个数 I.Status() = status; m_DriverManagedQueue.PnpNextIrp(I); } 控件IDC_OP_TYPE_COMBO及其选择项,我们这次选ReadFile sampleIorw.cpp中有关读数据的代码: ULONG sampleExecuteIo(HWND hDlg) { PSAMPLE_LIST_ITEM ioItem; …… // 获得需要读的字节数 GetDlgItemText(hDlg, IDC_OUT_SIZE_EDIT, str, MAX_STRING_LENGTH); ioItem-OutSize = _ttol(str); // 设置控件IDC_OP_TYPE_COMBO的句柄 hWnd = GetDlgItem(hDlg, IDC_OP_TYPE_COMBO); // 获得当前被选中项目的索引 itemIndex = (DWORD)SendMessage(hWnd, CB_GETCURSEL, 0, 0); // 获得被选中的项目的字符串 SendMessage(hWnd, CB_GETLBTEXT, (WPARAM)itemIndex, (LPARAM)str); if ((!_tcscmp(str, _T(“ReadFile”))) (ioItem-OutSize 0)) // 如是读端口 { // 设置读的缓冲区 ioItem-OutBuffer = (PCHAR)malloc(ioItem-OutSize); …… // 从驱动程序读数据 if ((!ReadFile( g_hDevice, // 设备句柄 ioItem-OutBuffer, // 输入缓冲地址 ioItem-OutSize, // 缓冲大小(字节数) NULL, // 实际读的数据字节数 ioItem
您可能关注的文档
最近下载
- 小学一年级体育与健康全册教案.pdf VIP
- 部编版三年级上册《道德与法治》教学计划.doc VIP
- 商业计划书模版-商业计划书.ppt VIP
- 气道净化护理(2023年中华护理学会团体标准).pptx VIP
- EN 13034-2005+A1-2009 液体化学品防护服.对液体化学品提供有限保护性能的化学防护服的性能要求(6型和PB[6]设备).pdf
- 小学英语语法大全.pptx VIP
- 阶段测试卷01:内能及其利用(解析版).docx
- HG∕T 20691-2017 高压喷射注浆施工技术规范(可复制版).pdf
- 装箱员考试题库2.doc VIP
- 3-1-1《了解图文编辑》(教案) 高教版信息技术基础模块上册.docx
文档评论(0)