SetupAPI - SetupDiGetDeviceRegistryProperty 替代品?
SetupAPI - SetupDiGetDeviceRegistryProperty substitute?
我需要在 firefox 扩展中使用一些 SetupAPI 函数。我需要检索设备的友好名称。我认为可以通过 SetupDiGetClassDevs
、SetupDiEnumDeviceInfo
、SetupDiGetDeviceRegistryProperty
和 SetupDiDestroyDeviceInfoList
.
来完成
但是!我导入了 setupapi.dll
并声明了其中三个函数 - 没问题。然后我发现 SetupDiGetDeviceRegistryProperty
根本不在 DLL 中,只能与 setupapi.lib
静态链接。有什么方法可以替代这个功能吗?
我无法使用 WMI。
你是对的,不存在具有该确切名称的导出。该名称实际上是在 SetupApi header 中定义的,就像 Windows API 中的大多数具有 Unicode 和 ANSI 变体的函数一样。
来自SetupApi.h:
#ifdef UNICODE
#define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyW
#else
#define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyA
#endif
函数在导出中 table 作为 SetupDiGetDeviceRegistryPropertyW(序号:373)或 SetupDiGetDeviceRegistryPropertyA(序号:372)
我发现那些使用 dumpbin /exports setupapi.dll
.
这个函数确实在 SetupAPI.DLL 中,正如我使用 Dependency Walker 确认的那样。只是,它需要一个字符指针(字符串),它必须有两种变体 - 一种用于 ANSI (A
),一种用于 Unicode (W
).
SetupDiGetDeviceRegistryPropertyA
SetupDiGetDeviceRegistryPropertyW
它适用于任何 Windows API 函数 - 如果函数将一个或多个字符串作为参数,它将有两个变体。
我看到你可能正在使用 GetProcAddress
来定位它。因此,您需要将真实姓名(不是宏)传递给它。以下获取此函数的广泛变体。
GetProcAddress(handleOfDLL, "SetupDiGetDeviceRegistryPropertyW"); // Wide
我需要在 firefox 扩展中使用一些 SetupAPI 函数。我需要检索设备的友好名称。我认为可以通过 SetupDiGetClassDevs
、SetupDiEnumDeviceInfo
、SetupDiGetDeviceRegistryProperty
和 SetupDiDestroyDeviceInfoList
.
但是!我导入了 setupapi.dll
并声明了其中三个函数 - 没问题。然后我发现 SetupDiGetDeviceRegistryProperty
根本不在 DLL 中,只能与 setupapi.lib
静态链接。有什么方法可以替代这个功能吗?
我无法使用 WMI。
你是对的,不存在具有该确切名称的导出。该名称实际上是在 SetupApi header 中定义的,就像 Windows API 中的大多数具有 Unicode 和 ANSI 变体的函数一样。
来自SetupApi.h:
#ifdef UNICODE
#define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyW
#else
#define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyA
#endif
函数在导出中 table 作为 SetupDiGetDeviceRegistryPropertyW(序号:373)或 SetupDiGetDeviceRegistryPropertyA(序号:372)
我发现那些使用 dumpbin /exports setupapi.dll
.
这个函数确实在 SetupAPI.DLL 中,正如我使用 Dependency Walker 确认的那样。只是,它需要一个字符指针(字符串),它必须有两种变体 - 一种用于 ANSI (A
),一种用于 Unicode (W
).
SetupDiGetDeviceRegistryPropertyA
SetupDiGetDeviceRegistryPropertyW
它适用于任何 Windows API 函数 - 如果函数将一个或多个字符串作为参数,它将有两个变体。
我看到你可能正在使用 GetProcAddress
来定位它。因此,您需要将真实姓名(不是宏)传递给它。以下获取此函数的广泛变体。
GetProcAddress(handleOfDLL, "SetupDiGetDeviceRegistryPropertyW"); // Wide