SetupDiEnumDeviceInterfaces错误259用于显示

时间:2013-09-20 13:07:12

标签: c++ winapi

我正在尝试检索一组与显示相关的界面,并且似乎总是得到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

2 个答案:

答案 0 :(得分:2)

您是否知道在致电ifData.cbSize之前必须正确设置SetupDiEnumDeviceInterfaces

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成员是否等于结构的大小(以字节为单位)。

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

答案 1 :(得分:0)

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

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

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