gpt4 book ai didi

c# - SetupDiEnumDriverInfo 总是返回错误 259(没有更多数据可用)

转载 作者:可可西里 更新时间:2023-11-01 10:26:11 25 4
gpt4 key购买 nike

我正在尝试使用 win32 API 在 C# 中访问有关与设备关联的驱动程序的信息。

我已经设法启用/禁用设备(所以我正在检索的句柄似乎没问题),但是我在尝试调用 SetupDiEnumDriverInfo 时运气不好。

这是我使用的代码:

private List<String> ListCompatibleDrivers(IntPtr hDevInfo, SP_DEVINFO_DATA devInfoData)
{
List<String> result = new List<String>();
try
{
SP_DRVINFO_DATA drvInfo = new SP_DRVINFO_DATA();

for (int i = 0; SetupDiEnumDriverInfo(hDevInfo, devInfoData, SPDIT_CLASSDRIVER, i, drvInfo); i++)
{
result.Add(drvInfo.Description);
}

if (result.Count < 1)
{
result.Add(Marshal.GetLastWin32Error().ToString());
}

return result;
}
catch
{
throw;
}
}

可以假设参数没问题的地方(正如我所说,设置 API 中的其他方法成功地使用了它们)。

这些是可能损坏的结构和 DllImport:

[StructLayout(LayoutKind.Sequential)]
public class SP_DRVINFO_DATA
{
public Int32 cbSize;
public Int32 driverType;
public UIntPtr reserved;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=256)]
public String description;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=256)]
public String mfgName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=256)]
public String providerName;
public FILETIME driverDate;
public Int64 driverVersion;
};

[DllImport("setupapi.dll", SetLastError = true)]
public static extern bool SetupDiEnumDriverInfo(IntPtr lpInfoSet, SP_DEVINFO_DATA deviceInfoData, UInt32 driverType, Int32 memberIndex, SP_DRVINFO_DATA driverInfoData);

API 调用立即返回 false,Marshal.GetLastWin32Error().ToString() 返回 259,即 ERROR_NO_MORE_ITEMS

我只是不明白,我的希望很高我只是犯了一些我看不到的愚蠢错误,因为我最近除了 msdn 几乎什么都没读,而且它变得非常累...

非常感谢任何帮助,非常感谢!

最佳答案

好吧,最重要的是我可以告诉你你不匹配应该是的函数签名:

[DllImport("setupapi.dll", SetLastError = true, charset=Charset.Unicode)]
[return:MarshalAs(UnmanagedType.Bool)]
private static extern bool SetupDiEnumDriverInfo(
[In] IntPtr lpInfoSet,
[In, Optional] SP_DEVINFO_DATA deviceInfoData,
[In] UInt32 driverType,
[In] Int32 memberIndex,
[Out] out SP_DRVINFO_DATA driverInfoData);

这很重要,因为它指定需要从 PInvoke 中提取数据。

关于c# - SetupDiEnumDriverInfo 总是返回错误 259(没有更多数据可用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17344648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com