| 3487 | } |
| 3488 | |
| 3489 | BOOL |
| 3490 | Ext2LoadRemovableVolumes() |
| 3491 | { |
| 3492 | BOOL rc = FALSE; |
| 3493 | HDEVINFO devInfo = INVALID_HANDLE_VALUE; |
| 3494 | PSP_DEVICE_INTERFACE_DETAIL_DATA ifDetail = NULL; |
| 3495 | SP_DEVICE_INTERFACE_DATA ifData; |
| 3496 | |
| 3497 | PCHAR nameString; |
| 3498 | int nInterface = 0; |
| 3499 | |
| 3500 | if (IsVistaOrAbove()) { |
| 3501 | return TRUE; |
| 3502 | } |
| 3503 | |
| 3504 | nameString = (PCHAR)malloc(REGSTR_VAL_MAX_HCID_LEN); |
| 3505 | if (nameString == NULL) { |
| 3506 | goto errorout; |
| 3507 | } |
| 3508 | |
| 3509 | ifDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(PAGE_SIZE); |
| 3510 | if (ifDetail == NULL) { |
| 3511 | goto errorout; |
| 3512 | } |
| 3513 | |
| 3514 | devInfo = SetupDiGetClassDevs( |
| 3515 | &VolumeClassGuid, NULL, NULL, |
| 3516 | DIGCF_PRESENT | DIGCF_DEVICEINTERFACE |
| 3517 | ); |
| 3518 | if (devInfo == INVALID_HANDLE_VALUE) { |
| 3519 | goto errorout; |
| 3520 | } |
| 3521 | |
| 3522 | while (TRUE) { |
| 3523 | |
| 3524 | BOOL bFound = FALSE; |
| 3525 | |
| 3526 | ifData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); |
| 3527 | bFound = SetupDiEnumDeviceInterfaces( |
| 3528 | devInfo, |
| 3529 | NULL, |
| 3530 | &VolumeClassGuid, |
| 3531 | (ULONG)nInterface++, |
| 3532 | &ifData); |
| 3533 | if (!bFound) { |
| 3534 | break; |
| 3535 | } |
| 3536 | |
| 3537 | memset(ifDetail, 0, PAGE_SIZE); |
| 3538 | ifDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); |
| 3539 | if (SetupDiGetInterfaceDeviceDetail( |
| 3540 | devInfo, |
| 3541 | &ifData, |
| 3542 | ifDetail, |
| 3543 | PAGE_SIZE, |
| 3544 | NULL, |
| 3545 | NULL)) { |
| 3546 |
no test coverage detected