mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-11 03:24:58 -06:00
gqa-win: get_pci_info: Replace 'while' with 2 calls of the function
Microsoft suggests this solution in the documentation: https://docs.microsoft.com/en-us/windows/win32/api/setupapi/nf-setupapi-setupdigetdeviceinterfacedetaila Signed-off-by: Kostiantyn Kostiuk <konstantin@daynix.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
This commit is contained in:
parent
5f22473ebb
commit
d919cea07c
1 changed files with 24 additions and 6 deletions
|
@ -636,7 +636,7 @@ static GuestPCIAddress *get_pci_info(int number, Error **errp)
|
||||||
if (SetupDiEnumDeviceInterfaces(dev_info, &dev_info_data,
|
if (SetupDiEnumDeviceInterfaces(dev_info, &dev_info_data,
|
||||||
&GUID_DEVINTERFACE_DISK, 0,
|
&GUID_DEVINTERFACE_DISK, 0,
|
||||||
&dev_iface_data)) {
|
&dev_iface_data)) {
|
||||||
while (!SetupDiGetDeviceInterfaceDetail(dev_info, &dev_iface_data,
|
if (!SetupDiGetDeviceInterfaceDetail(dev_info, &dev_iface_data,
|
||||||
pdev_iface_detail_data,
|
pdev_iface_detail_data,
|
||||||
size, &size,
|
size, &size,
|
||||||
&dev_info_data)) {
|
&dev_info_data)) {
|
||||||
|
@ -651,6 +651,16 @@ static GuestPCIAddress *get_pci_info(int number, Error **errp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!SetupDiGetDeviceInterfaceDetail(dev_info, &dev_iface_data,
|
||||||
|
pdev_iface_detail_data,
|
||||||
|
size, &size,
|
||||||
|
&dev_info_data)) {
|
||||||
|
// pdev_iface_detail_data already is allocated
|
||||||
|
error_setg_win32(errp, GetLastError(),
|
||||||
|
"failed to get device interfaces");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
dev_file = CreateFile(pdev_iface_detail_data->DevicePath, 0,
|
dev_file = CreateFile(pdev_iface_detail_data->DevicePath, 0,
|
||||||
FILE_SHARE_READ, NULL, OPEN_EXISTING, 0,
|
FILE_SHARE_READ, NULL, OPEN_EXISTING, 0,
|
||||||
NULL);
|
NULL);
|
||||||
|
@ -680,7 +690,7 @@ static GuestPCIAddress *get_pci_info(int number, Error **errp)
|
||||||
ULONG dev_id_size = 0;
|
ULONG dev_id_size = 0;
|
||||||
|
|
||||||
size = 0;
|
size = 0;
|
||||||
while (!SetupDiGetDeviceInstanceId(dev_info, &dev_info_data,
|
if (!SetupDiGetDeviceInstanceId(dev_info, &dev_info_data,
|
||||||
parent_dev_id, size, &size)) {
|
parent_dev_id, size, &size)) {
|
||||||
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
|
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
|
||||||
parent_dev_id = g_malloc(size);
|
parent_dev_id = g_malloc(size);
|
||||||
|
@ -691,6 +701,14 @@ static GuestPCIAddress *get_pci_info(int number, Error **errp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!SetupDiGetDeviceInstanceId(dev_info, &dev_info_data,
|
||||||
|
parent_dev_id, size, &size)) {
|
||||||
|
// parent_dev_id already is allocated
|
||||||
|
error_setg_win32(errp, GetLastError(),
|
||||||
|
"failed to get device instance ID");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CM API used here as opposed to
|
* CM API used here as opposed to
|
||||||
* SetupDiGetDeviceProperty(..., DEVPKEY_Device_Parent, ...)
|
* SetupDiGetDeviceProperty(..., DEVPKEY_Device_Parent, ...)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue