| 3396 | */ |
| 3397 | |
| 3398 | BOOL |
| 3399 | Ext2LoadVolumes() |
| 3400 | { |
| 3401 | ULONG rc = TRUE; |
| 3402 | |
| 3403 | TCHAR *nameString = NULL; |
| 3404 | ULONG nameLen = REGSTR_VAL_MAX_HCID_LEN; |
| 3405 | |
| 3406 | HMACHINE hMachine = NULL; |
| 3407 | DEVNODE dnRoot, dnFirst; |
| 3408 | |
| 3409 | DEVINSTID devIds[] = { |
| 3410 | "ROOT\\FTDISK\\0000", |
| 3411 | "ROOT\\DMIO\\0000", |
| 3412 | NULL, |
| 3413 | "ROOT\\VOLMGR\\0000", |
| 3414 | NULL |
| 3415 | }; |
| 3416 | |
| 3417 | int i = 0; |
| 3418 | |
| 3419 | if (IsVistaOrAbove()) { |
| 3420 | i = 3; |
| 3421 | } |
| 3422 | |
| 3423 | nameString = new TCHAR [nameLen]; |
| 3424 | if (nameString == NULL) { |
| 3425 | goto errorout; |
| 3426 | } |
| 3427 | |
| 3428 | while (devIds[i] != NULL) { |
| 3429 | |
| 3430 | rc = CM_Locate_DevNode_Ex(&dnRoot, devIds[i], |
| 3431 | CM_LOCATE_DEVNODE_NORMAL , hMachine); |
| 3432 | if (rc != CR_SUCCESS) { |
| 3433 | break; |
| 3434 | } |
| 3435 | |
| 3436 | rc = CM_Get_Child_Ex(&dnFirst, dnRoot, 0, hMachine); |
| 3437 | if (rc != CR_SUCCESS) { |
| 3438 | goto errorout; |
| 3439 | } |
| 3440 | |
| 3441 | while (TRUE) { |
| 3442 | |
| 3443 | PEXT2_VOLUME volume = NULL; |
| 3444 | |
| 3445 | nameLen = REGSTR_VAL_MAX_HCID_LEN; |
| 3446 | memset(nameString, 0, nameLen); |
| 3447 | rc = CM_Get_DevNode_Registry_Property_Ex( |
| 3448 | dnFirst, CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME, |
| 3449 | NULL, nameString, &nameLen, 0, hMachine); |
| 3450 | if (rc != CR_SUCCESS) { |
| 3451 | break; |
| 3452 | } |
| 3453 | |
| 3454 | if (Ext2InitializeVolume(nameString, &volume)) { |
| 3455 |
no test coverage detected