- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
编辑:请求了完整的源代码。下面是一个准系统实现,以复制该错误。 删除了内容枚举,但无论如何都会在第一个对象调用时发生崩溃。在这种情况下,WPD_DEVICE_OBJECT_ID 对象。
LINK TO CPP (错误从第 103 行开始)
LINK TO QMAKE.PRO (我正在使用 Qt)
在我的项目中,我使用 WPD API读取移动设备的内容。我按照 API 进行了开发,并成功实现了内容枚举。
但是,如果连接了 USB 驱动器,WPD API 有时也会将其检测为设备。无论如何,我的程序将继续进行内容枚举。我不想要那个。我只想列举移动设备。
问题在于,在内容枚举期间,当我的程序尝试检索 USB 驱动器上对象的属性时,它会崩溃。以下是崩溃详情:
Problem Event Name: BEX
Application Name: UniversalMC.exe
Application Version: 0.0.0.0
Application Timestamp: 5906a8a3
Fault Module Name: MSVCR100.dll
Fault Module Version: 10.0.40219.325
Fault Module Timestamp: 4df2be1e
Exception Offset: 0008af3e
Exception Code: c0000417
Exception Data: 00000000
OS Version: 6.1.7601.2.1.0.768.3
Locale ID: 1033
Additional Information 1: 185e
Additional Information 2: 185ef2beb7eb77a8e39d1dada57d0d11
Additional Information 3: a852
Additional Information 4: a85222a7fc0721be22726bd2ca6bc946
此调用发生崩溃:
hr = pObjectProperties->GetStringValue(WPD_OBJECT_ORIGINAL_FILE_NAME, &objectName);
hr
返回 FAILED 然后我的程序崩溃了。
经过一番研究,我发现异常代码 c0000417
表示发生缓冲区溢出?如果我错了,请纠正我,但这是 WPD API 中的漏洞吗?如果是这样,我怎样才能提前检测到此设备不是移动设备?
感谢您的宝贵时间!
最佳答案
我最终花钱请人帮我查明问题。
问题在于根对象 (WPD_DEVICE_OBJECT_ID) 无论如何都不会返回对象名称(并非所有设备都如此)。
解决方案是简单地从根对象开始内容枚举,并且只检查其子对象的名称。在我最初的实现中,我假设每个对象都有一个名称,但显然情况并非如此。根对象是异常(exception)。
这是一个片段:
CComPtr<IEnumPortableDeviceObjectIDs> pEnumObjectIDs;
// Print the object identifier being used as the parent during enumeration.
//qDebug("%ws\n",pszObjectID);
// Get an IEnumPortableDeviceObjectIDs interface by calling EnumObjects with the
// specified parent object identifier.
hr = pContent->EnumObjects(0, // Flags are unused
WPD_DEVICE_OBJECT_ID, // Starting from the passed in object
NULL, // Filter is unused
&pEnumObjectIDs);
// Enumerate content starting from the "DEVICE" object.
if (SUCCEEDED(hr))
{
// Loop calling Next() while S_OK is being returned.
while(hr == S_OK)
{
DWORD cFetched = 0;
PWSTR szObjectIDArray[NUM_OBJECTS_TO_REQUEST] = {0};
hr = pEnumObjectIDs->Next(NUM_OBJECTS_TO_REQUEST, // Number of objects to request on each NEXT call
szObjectIDArray, // Array of PWSTR array which will be populated on each NEXT call
&cFetched); // Number of objects written to the PWSTR array
if (SUCCEEDED(hr))
{
// Traverse the results of the Next() operation and recursively enumerate
// Remember to free all returned object identifiers using CoTaskMemFree()
for (DWORD dwIndex = 0; dwIndex < cFetched; dwIndex++)
{
//RECURSIVE CONTENT ENUMERATION CONTINUES HERE
//OBJECT NAME CHECKING CONTINUES IN THE RECURSIVE FUNCTION
// Free allocated PWSTRs after the recursive enumeration call has completed.
CoTaskMemFree(szObjectIDArray[dwIndex]);
szObjectIDArray[dwIndex] = NULL;
}
}
}
}
解决方案正是示例项目所显示的,但是,我犯了检查根对象名称的错误。所以不要那样做。
关于c++ - WPD API 检测设备是否是电话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43713994/
我想通过 IPortableDeviceValues 获取 WPD 上图像文件的宽度和高度。 根据Windows Dev Center每个类型为 WPD_CONTENT_TYPE_IMAGE 的对象(
以下 uid 是随机生成的还是我需要从某个地方找到它,如果是的话从哪里找到?来自 header stdafx.h // This method submits a ReadMeasurement re
编辑:请求了完整的源代码。下面是一个准系统实现,以复制该错误。 删除了内容枚举,但无论如何都会在第一个对象调用时发生崩溃。在这种情况下,WPD_DEVICE_OBJECT_ID 对象。 LINK TO
我正在为当前使用 Windows Image Acquisition (WIA) 的应用程序添加 Windows 可移植设备 (WPD) 支持。 WIA 通过 IWiaItem::DeviceDlg
我的 Android 应用程序生成一些文件,我需要将这些文件与我的主 PC 程序同步,反之亦然。我执行此操作的常用方法是使用 FTP 帐户,我的 Android 应用程序和我的 PC 程序都可以在其中
在我的项目中,我使用 Windows 可移植设备 (WPD) API 来枚举移动设备的内容。 WPD API Enumeration Guide .我能够枚举每个对象并查看它们的属性,如 API 编程
我需要枚举 MTP android 设备的内容并将文件从设备传输到 Windows PC。 按照此处找到的指南 Transferring Content from a Device to a PC我试
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我想通过 MTP 将至少一个文件复制到 Windows Phone。按照本教程,我可以连接到手机并将文件从手机复制到计算机: WPD: Transferring Content但是我无法以相反的方式复
WPD在 Windows XP(如果重要的话是 SP1)上不能正常工作,即使 Microsoft states it does . WPD 问题: IPortableDeviceManager.Get
我找不到任何关于将 .wpd 文件(WPS SAS 表)导入 R 的内容。有谁知道如何在 R 中导入这些表? 我知道您可以使用外来和 Hmisc 库来导入 sas7bdat 文件,但到目前为止我还没有
我一直在尝试使用 WPD Apis 在 c# 中编写示例应用程序,以将图像文件传输到连接的 WPD 支持设备。我一直在关注THIS关联。我的问题是,每次我尝试传输文件时,我都会收到错误消息:值不在预期
我正在编写一个程序来自动执行一些在检测到可移动设备时必须完成的任务。最初仅使用文件流。当我意识到并非所有可移动设备都可以通过这种方式访问时,我开始使用 SHFileOperation,但现在我意识
我正在开发一个在 Windows 上运行的 PC C++ 应用程序。该应用程序应使用 MTP 与通过 USB 连接的安卓手机进行通信。本意是不挂载存储卡。我发现 Windows 有支持 MTP 的 W
我想编写一个应用程序,将 MP3 文件复制到 SanDisk Sansa M240。 SanDisk 没有驱动器盘符,使用 MTP 进行文件传输。我偶然发现了连接到设备的示例:http://blogs
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
是否有任何可用于 VB.net 的库使我能够轻松访问 MTP 设备?我希望能够找出连接了哪些设备,列出它们的内容并在它们之间复制文件。 到目前为止,我所看到的一切(无论是在 Stack Overflo
问题已使用 NuGet 包 PortableDevices 进行测试,解决方案来自此处:Accessing an MTP device in Visual Basic .NET 我想从三星 Andro
我正在尝试通过电缆将 android 设备连接到(Windows 7 64 位)PC,然后以编程方式将一些文件从 android 检索到 pc。 (注意:我需要这个用于特定设备,Moverio BT-
我是一名优秀的程序员,十分优秀!