标签: device-instance-id

通过代码强制更改/更新Firebase通知令牌或实例ID?

我应该怎么做才能在firebase中更改或请求令牌?firebase根据设备信息生成的唯一令牌.

device-instance-id ios firebase swift firebase-cloud-messaging

12
推荐指数
1
解决办法
1万
查看次数

如何从DEV_BROADCAST_DEVICEINTERFACE和设备实例ID获取友好设备名称

我已经使用RegisterDeviceNotification注册了一个窗口,并且可以成功接收DEV_BROADCAST_DEVICEINTERFACE消息.但是,dbcc_name返回的结构中的字段始终为空.我所拥有的结构定义如下:

[StructLayout(LayoutKind.Sequential)]
public struct DEV_BROADCAST_DEVICEINTERFACE
{
    public int dbcc_size;
    public int dbcc_devicetype;
    public int dbcc_reserved;
    public Guid dbcc_classguid;
    [MarshalAs(UnmanagedType.LPStr)]
    public string dbcc_name;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用WM_DEVICECHANGE消息Marshal.PtrToStructureLParam.

这应该有用吗?

或者甚至更好......是否有另一种方法可以在连接时获取设备的名称?

编辑(02/05/2010 20:56GMT):

我发现如何通过执行以下操作来填充dbcc_name字段:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct DEV_BROADCAST_DEVICEINTERFACE
{
    public int dbcc_size;
    public int dbcc_devicetype;
    public int dbcc_reserved;
    public Guid dbcc_classguid;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst=255)]
    public string dbcc_name;
}
Run Code Online (Sandbox Code Playgroud)

但我仍然需要一种从int dbcc_name获取"友好"名称的方法.它看起来如下:

\?\ USB#VID_05AC&PID_1294​​&MI_00#0#{6bdd1fc6-810f-11D0-BEC7-08002BE2092F}

而我真的只想说"苹果iPhone"(在这种情况下就是设备).

c# winapi guid device-instance-id

11
推荐指数
1
解决办法
1万
查看次数

如何在给定设备实例ID的情况下可靠,快速地获取网卡的MAC地址

给定网卡的设备实例ID,我想知道它的MAC地址.集成Intel千兆卡的系统上的设备实例ID示例:

PCI\VEN_8086&DEV_10CC&SUBSYS_00008086&REV_00\3&33FD14CA&0&C8
Run Code Online (Sandbox Code Playgroud)

到目前为止,我使用的算法的工作原理如下:

  1. 打电话SetupDiGetClassDevsDIGCF_DEVICEINTERFACE.
  2. 调用SetupDiEnumDeviceInfo以获取返回的设备SP_DEVINFO_DATA.
  3. 调用SetupDiEnumDeviceInterfacesGUID_NDIS_LAN_CLASS得到一个设备接口.
  4. 调用SetupDiGetDeviceInterfaceDetail此返回的设备接口.这使我们将设备路径作为字符串: \\?\pci#ven_8086&dev_10cc&subsys_00008086&rev_00#3&33fd14ca&0&c8#{ad498944-762f-11d0-8dcb-00c04fc3358c}\{28fd5409-15bd-4c06-b62f-004d3a06f852}
  5. 此时我们有一个网卡驱动程序接口的地址.CreateFile使用#4的结果打开它.
  6. DeviceIoControl使用IOCTL_NDIS_QUERY_GLOBAL_STATS和OID 调用OID_802_3_PERMANENT_ADDRESS以获取MAC地址.

这通常有效,并已在相当多的机器上成功使用.但是,似乎很少有机器的网络驱动程序DeviceIoControl在步骤#6 中没有对请求做出正确响应; 即使将网卡驱动程序更新到最新版本后问题仍然存在.这些是较新的基于Windows 7的计算机.具体来说,DeviceIoControl成功完成,但返回零字节而不是包含MAC地址的预期六个字节.

一条线索似乎在MSDN页面上IOCTL_NDIS_QUERY_GLOBAL_STATS:

此IOCTL将在以后的操作系统版本中弃用.您应该使用WMI接口来查询微型端口驱动程序信息.有关更多信息,请参阅NDIS对WMI的支持.

- 也许更新的网卡驱动程序不再实现这个IOCTL?

那么,我应该怎么做呢?是否有可能在我的方法中存在疏忽并且我做了一些稍微错误的事情?或者我需要采取更加不同的方法吗?一些替代方法似乎包括:

  • 查询Win32_NetworkAdapterWMI类:提供所需信息但由于性能糟糕而被拒绝.请参阅Win32_NetworkAdapter WMI类的快速替换以获取本地计算机的MAC地址
  • 查询MSNdis_EthernetPermanentAddressWMI类:似乎是WMI的替代品,IOCTL_NDIS_QUERY_GLOBAL_STATS并直接从驱动程序查询OID - 这个工作在麻烦的网络驱动程序上.不幸的是,返回的类实例只提供MAC地址和InstanceName,这是一个本地化的字符串Intel(R) 82567LM-2 Gigabit Network Connection.查询MSNdis_EnumerateAdapter产生其涉及的一个列表InstanceNameDeviceName,像\DEVICE\{28FD5409-15BD-4C06-B62F-004D3A06F852}.我不知道如何从DeviceName即插即用设备实例ID(PCI\VEN_8086...... …

c++ windows wmi networking device-instance-id

9
推荐指数
1
解决办法
6014
查看次数

从设备实例路径字符串获取设备实例 DWORD

我得到一个设备实例路径,例如

L"\\\\?\\USB#VID_0403&PID_6001#6&2cc2d230&0&2#{219d0508-57a8-4ff5-97a1-bd86587c6c7e}"
Run Code Online (Sandbox Code Playgroud)

来自IWDFRemoteInterfaceInitialize::RetrieveSymbolicLink
但对于CM_Get_Parent我需要设备的 DEVINST/DWORD 这让我发疯。
我试过例如

instancePath = L"\\\\?\\USB#VID_0403&PID_6001#6&2cc2d230&0&2#{219d0508-57a8-4ff5-97a1-bd86587c6c7e}";
HDEVINFO hinfo = SetupDiGetClassDevs(NULL, instancePath, NULL, DIGCF_DEVICEINTERFACE | DIGCF_ALLCLASSES);
Run Code Online (Sandbox Code Playgroud)

和其他一些SetupDi...巫毒没有成功。非常感谢任何帮助,因为 - 正如所提到的 - 我现在几个小时都无法解决这种疯狂问题,尽管有数十个相反的示例(devid->实例路径),但我还没有找到任何实例路径->DEVINST。

c++ windows winapi device-driver device-instance-id

5
推荐指数
1
解决办法
3573
查看次数

获取父设备

我有两个USB设备ID,例如USB\VID_E4F1&PID_0661\00000115FA9CE7750000000000000000USB\VID_E4F1&PID_0661&MI_00\7&B5A5DDF&0&0000

如何验证2号设备是1号设备的直接子代(实际上它们是同一USB复合设备的不同部分)?

在现实生活中,将有许多连接到相同的USB控制器。而且,它们可能具有相同的制造商和型号。这就是为什么我无法验证VID,PID,并无法使用Win32_USBControllerDeviceWMI查询来验证它们是否已插入相同的USB控制器-我需要以某种方式验证父子关系,而不仅仅是它们已插入同一控制器的事实。

如果有问题,我只需要支持Windows 8+。

c# windows device-instance-id

4
推荐指数
2
解决办法
2124
查看次数

Windows 上的 USB 实例 ID 对于设备来说是唯一的吗?

我正在尝试在 Windows 系统上唯一地识别 USB 设备。由于序列号是可选的(并且在大多数设备上为空),我正在查看实例 ID。的领域,就像USB\VID_03F0&PID_094A\6&24b73976&0&2

我已经知道如果我将同一设备插入不同的端口,这个 ID 会发生变化,但这对我来说没问题。问题是:如果我使用相同的设备(在我的示例中为鼠标)并将其插入,它会获得相同还是不同的实例 ID?

我做了一些研究,似乎没有人完全知道 VID 和 PID 背后的部分是什么。它们似乎可以识别端口和/或集线器,但是如果我将不同的设备插入同一个插槽,我不仅会看到不同的 VID 和 PID,还会看到不同的垃圾。例如,这是插入同一端口的键盘:USB\VID_046D&PID_C328&MI_00\7&3f9ff46&0&0000

Microsoft 文档和此处的相关问题均未回答此问题。

如果我有两个相似的鼠标(或键盘,或其他),即相同的制造商和型号,如果我将它们插入相同的端口,它们会获得相同或不同的实例 ID?

我是否有机会唯一标识特定设备(不仅仅是型号)?

windows usb device-instance-id

4
推荐指数
1
解决办法
6412
查看次数

获取 USB 设备的父信息 C++

我正在开发一个 MFC 工具,用于检查已连接 USB 设备的一些驱动程序信息,例如位置信息、父设备、硬件 ID 等。我已经获得了我想要的所有其他信息,但我一直在获取设备父设备信息。

我已经使用Setupapi.dll在我的代码中获取设备信息。使用SetupDiGetClassDevs函数获取 USB 设备信息句柄。使用SetupDiEnumDeviceInfo函数获取特定设备信息数据。使用SetupDiGetDeviceRegistryProperty函数获取设备描述和硬件 ID 。

// List all connected USB devices
hDevInfo = SetupDiGetClassDevs(pClassGuid, pszEnumerator, 
    NULL, pClassGuid != NULL ? DIGCF_PRESENT : DIGCF_ALLCLASSES | 
    DIGCF_PRESENT);

// Get device info data
SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData);

// Get device instance id
CM_Get_Device_ID(DeviceInfoData.DevInst, szDeviceInstanceID, MAX_PATH, 
    0);

// Get device description
SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, 
    SPDRP_DEVICEDESC,
    &dwPropertyRegDataType, (BYTE*)szDesc, sizeof(szDesc), &dwSize);

#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi device-instance-id

4
推荐指数
1
解决办法
2443
查看次数

驱动器号到设备实例ID

如何从驱动器号获取设备实例ID?

我的过程从设备到达消息开始。我已经成功地从到达消息中获取了驱动器号并打开了DVD托盘。

我搜索了各种Setup API项目;但是我还没有发现任何让我从驱动器号到设备实例ID的东西。

使用C#或VB.NET的解决方案将是理想的,但是只要我能看到API调用,我愿意从任何其他语言中找出解决方案。

提前致谢...

windows device hardware-interface device-instance-id

3
推荐指数
1
解决办法
3078
查看次数