安装程序设备接口错误 259 用于显示

SetupDiEnumDeviceInterfaces error 259 for display

本文关键字:用于 显示 错误 接口 程序 安装      更新时间:2023-10-16

我正在尝试检索一组与显示相关的接口,但似乎总是收到 259 错误。由于我对WinApi非常缺乏经验,因此我可能需要一些提示:)

#include <atlstr.h>
#include <SetupApi.h>
#pragma comment(lib, "setupapi.lib") 
#include <stdio.h>
#include <windows.h>
#include <setupapi.h>
#include <devguid.h>
#include <regstr.h>
const GUID GUID_CLASS_MONITOR = {0x4d36e96e, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18};
const GUID GUID_DEVINTERFACE_MONITOR = {0xe6f07b5f, 0xee97, 0x4a90, 0xb0, 0x76, 0x33, 0xf5, 0x7b, 0xf4, 0xea, 0xa7};
int main( int argc, char *argv[ ] )
{
    HDEVINFO hDevInfo;
    SP_DEVICE_INTERFACE_DATA ifData;
    ifData.cbSize = sizeof(ifData);
    DWORD dwError;
    hDevInfo = SetupDiGetClassDevs(NULL /*&GUID_CLASS_MONITOR*/, NULL, NULL, DIGCF_ALLCLASSES);
    dwError = GetLastError(); 
    BOOL bRtn = SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &GUID_CLASS_MONITOR, 0, &ifData);  // GUID_DEVINTERFACE_MONITOR did not work either
    dwError = GetLastError(); 
    return 0;
}

看不出我做错了什么SetupDiGetClassDevs没有错误,但我尝试SetupDiEnumDeviceInterfaces返回 259。我一直在尝试设备设置以及设备界面 GUID,但没有运气。

编辑:澄清:bRtn 返回 0,这意味着SetupDiEnumDeviceInterfaces失败。259错误意味着没有更多项目,但我的系统连接了两个屏幕,由于我在没有 GUID 的情况下调用SetupDiGetClassDevs,我希望至少获得我的两个屏幕项目。

编辑:根据建议添加了cbSize

你知道在

调用SetupDiEnumDeviceInterfaces之前必须正确设置ifData.cbSize吗?

(http://msdn.microsoft.com/en-us/library/windows/hardware/ff551015(v=vs.85).aspx)

调用

方必须在调用此函数之前将 DeviceInterfaceData.cbSize 设置为 sizeof(SP_DEVICE_INTERFACE_DATA)。

(http://msdn.microsoft.com/en-us/library/windows/hardware/ff552342(v=vs.85).aspx)

将SP_DEVICE_INTERFACE_DATA结构的实例作为参数的 SetupAPI 函数验证所提供结构的 cbSize 成员是否等于结构的大小(以字节为单位)。

您没有在代码中显示设置此值。

出于某种原因,我通过尝试和错误找到的答案对我来说并不直观,但它似乎有效。

由于我无法检索设备设置 GUID,但我必须将DIGCF_DEVICEINTERFACE添加到设备接口 GUID GUID_DEVINTERFACE_MONITOR以便能够检索接口。

感谢您的提示,因为缺少cbSize也会导致另一个错误:/