我正在Win 8.1中使用VS 2013.如何解决这个警告?
使用Microsoft驱动程序开发工具包(DDK),这个错误困扰着我,因为我甚至试图构建DDK附带的默认驱动程序.
我在通过Google追踪原因和解决方案时遇到了一些困难.为了帮助可能遇到同样问题的其他人,我在这里记录它.
解决方案: 确保您构建的目录不包含空格.
我对驱动程序开发很新,并试图编写一个简单的过滤器驱动程序来启用或禁用键盘或鼠标设备.如果我可以使它工作,我想用它来插入鼠标插入我的笔记本电脑上的触摸板.我意识到可能有软件已经做到这一点,但我真的对设备驱动程序感兴趣,并希望自己学习如何做到这一点.
我正在使用随WDK一起提供的kbfiltr和moufiltr示例,作为上层过滤器驱动程序安装.kbfiltr示例创建一个pdo,可以通过usermode程序枚举和连接.这允许我将IOCTL发送到由KbFilter_EvtIoDeviceControlForRawPdo处理的PDO .但是,当我尝试做任何与过滤器驱动程序相关的事情时,比如调用KbFilter_EvtIoInternalDeviceControl所以我可以做类似的事情
VOID
KbFilter_EvtIoInternalDeviceControl(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN size_t OutputBufferLength,
IN size_t InputBufferLength,
IN ULONG IoControlCode
)
...
hDevice = WdfIoQueueGetDevice(Queue);
devExt = FilterGetData(hDevice);
switch (IoControlCode) {
...
case IOCTL_INTERNAL_KEYBOARD_DISCONNECT:
//
// Clear the connection parameters in the device extension.
//
devExt->UpperConnectData.ClassService = NULL;
break;
...
}
Run Code Online (Sandbox Code Playgroud)
我得到了一个BSOD.它不是上面的代码,在vanilla示例中,set to null被注释掉,只是调用Kbfilter会导致BSOD.我试图直接在PDO中设置设备扩展,但这也会导致BSOD,可能是因为它是PDO devExt,而不是kbfiltr?
(相关:什么是从BSOD获取堆栈跟踪的好方法?我使用Virtual PC作为我的测试环境和未经检查的XPSP3版本)
我不能直接向驱动程序堆栈发送IOCTL_INTERNAL_KEYBOARD_DISCONNECT(我知道输入设备一次只接受一个连接?)因此需要原始PDO.我真的只需要发送两个IOCTL(启用和禁用),我想我会使用键盘断开连接,因为这些已经定义.
如果我对这些假设有任何错误,请告诉我,我知道我真的是一个菜鸟,但我没有找到很多关于通过PDO进行此类通信的文档.
我想开发一个虚拟网络摄像头驱动程序,从用户模式我将图像传递给它,它将显示为网络摄像头输出.
我不想使用DirectX过滤器和CSourceStream等.因为它们不适用于某些不使用DirectX捕获网络摄像头图像的程序.
我必须写一个内核模式设备驱动程序.
有任何想法吗?我尝试了DDK样本的testcap,但它没有处理来自用户模式的图像并且没有得到任何输入,只是它在网络摄像头中显示7种颜色...
任何帮助将不胜感激.谢谢
谢谢你们!
我从这里尝试了代码:http: //tmhare.mvps.org/downloads.htm (找到捕获源过滤器)
当我在雅虎,MSN编译它时,它运行良好,但它崩溃了AIM,Internet Explorer Flash网络摄像头,Firefox Flash网络摄像头和Skype ......在8次调用之后,我在QueryInterface中崩溃了,我发现它跟踪了它很多技巧..
现在我知道,它在第8次调用时崩溃了HRESULT CVCamStream :: QueryInterface(REFIID riid,void**ppv)
第8次调用,当它到达时,如果,我的意思是:返回CSourceStream :: QueryInterface(riid,ppv);
它位于Filters.cpp的第17行
为什么你认为我会崩溃?
谢谢大家指导我找到正确的解决方案,这是DirectShow,而不是驱动程序
我想创建一个虚拟监视器.这样做的方式是虚拟监视器将出现在我桌面上的窗口中.据Windows知道,它只是另一台显示器.
在我看来,作为一个实际问题,它必须作为视频卡驱动程序完成(即,不是视频通过电线连接到LCD面板,它将进入桌面上的另一个窗口).
我所描述的声音在技术上是否可行?(从DDK的角度来看)
注意:我无法使用虚拟PC,因为没有虚拟PC的分辨率足以满足我的需求.也因为它不是我要求的.
注意:我的理由并不重要,但我可以提出一些建议:
- 我想在高dpi设置下测试我的应用程序(288dpi)
- 我想创建一个我的iPad可以VNC的显示器
- 家庭电视在主显示器上运行
- 劫机者正在监视公共汽车,如果他怀疑我们正在让乘客离开,他就会把它炸毁
- 我试图扩大人类知识和理解的极限,为了所有人类的利益
我使用了来自github(Filesys)的一个Windows驱动程序示例,并尝试使用Visual Studio 2015在Windows 10上构建它.
我安装了两个:
但是,当我尝试构建项目时,我看到此错误消息:
An SDK corresponding to WDK version '8.1' was not found. Please install the SDK before building. minispy (Filter\minispy) C:\Program Files (x86)\Windows Kits\10\build\WindowsDriver.common.targets
Run Code Online (Sandbox Code Playgroud)
但是已经安装了8.1的SDK.
我可以使用Visual Studio中的任何选项将其指向SDK 8.1吗?
我正在尝试修改Windows内核级磁盘驱动程序以正确响应更新的控制代码.例如,它只有一个废弃的IOCTL_DISK_GET_DRIVE_GEOMETRY
控制代码的处理程序,但没有更新的IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
控制代码,所以我添加了.
当然,我更新了驱动程序以使用所有新的Windows结构和功能,如IoReadPartitionTableEx()
功能和DRIVE_LAYOUT_INFORMATION_EX
结构(我正在尝试向驱动程序添加GPT支持).问题是,当我使用磁盘驱动程序时,我可以看到(使用DebugView)Windows(我认为它是Windows ......也许是其他东西......)仍在向IOCTL_DISK_GET_DRIVE_GEOMETRY
我的驱动程序发送旧的控制代码.我希望Windows将更新的控制代码发送给我的驱动程序.甚至是Windows发送这些控制代码?Windows和驱动程序之间是否还有其他一些我还没知道的层?
驱动程序是否应该以某种方式识别Windows的"类型",以便Windows确切地知道如何"对话"?Windows如何确切地知道要发送给特定驱动程序的控制代码?我已经用Google搜索了这些(看似非常基本的)问题的答案,并且没有找到一个明确的答案,这让我相信我从根本上误解了一些关于Windows驱动程序的问题.我的问题是否有意义?
我一直在尝试进入驱动程序开发(排队"不要那样做")我一直在看这个msdn页面并且在安装了WDK(Windows驱动程序工具包)10后我仍然无法编译它们的示例在该页面上使用.
我查看了其他SO问题,但我无法找到WDK的已安装目录.当我尝试运行设置时,我受到了这样的欢迎:
我怎么解决这个问题?
我正在尝试编译开源项目Programmer Dvorak.问题是它有点旧,并且不使用当前版本的构建工具构建.
您可以在我项目的Google代码页上看到我在线修改的完整源代码.版本2是原始项目中未修改的源文件.修订版3是我做出所有重大更改的地方.您可以在此处看到两个修订版之间的差异.
剩下的唯一明显问题是一些LINK警告:
section '.edata' (40000040) merged into '.data' (C0000040) with different attributes.
) - 我在这里问了一个独立版本的问题..CRT section exists; there may be unhandled static initializers or terminators
)我该如何修复这些警告?我可以忽略它们吗?
尽管有这些警告,它仍然会产生一个exe.但是,如果我继续运行它,它将无法正确安装,我需要求助于系统还原才能再次安装正式版本.
这可能是因为警告或仅仅是因为我没有正确修改项目.
我还需要做些什么来使这个项目可以安装?
它说您需要Windows DDK,但似乎Windows驱动程序工具包已经取代它,所以我得到了它.我只安装了"Build Environments".
Readme.txt
,你应该运行:build-layout && build-installer
Run Code Online (Sandbox Code Playgroud)
build-layout.bat
运行.我不得不修改这个文件(参见这里的差异):
WinDDK
路径被修改,因为我有一个较新的版本(MOD-1).set PATH=
... %WINDDK%\bin\x86\x86;
因为link.exe …
wdk ×10
driver ×5
c++ ×3
windows ×2
build ×1
c ×1
directshow ×1
fatal-error ×1
kernel ×1
kmdf ×1
linker ×1
msbuild ×1
open-source ×1
visual-c++ ×1
webcam ×1
winapi ×1
windows-10 ×1