| 993 | } |
| 994 | |
| 995 | BOOL |
| 996 | Ext2QueryDrvLetter( |
| 997 | PEXT2_LETTER drvLetter |
| 998 | ) |
| 999 | { |
| 1000 | HANDLE hVolume; |
| 1001 | NT::NTSTATUS status = STATUS_SUCCESS; |
| 1002 | DWORD rc = 0; |
| 1003 | |
| 1004 | drvLetter->DrvType = Ext2QueryDrive(drvLetter->Letter, |
| 1005 | drvLetter->SymLink); |
| 1006 | |
| 1007 | if (drvLetter->DrvType == DRIVE_NO_ROOT_DIR) { |
| 1008 | drvLetter->bUsed = FALSE; |
| 1009 | goto errorout; |
| 1010 | } else { |
| 1011 | drvLetter->bUsed = TRUE; |
| 1012 | } |
| 1013 | |
| 1014 | if (drvLetter->Letter == 'A' || |
| 1015 | drvLetter->Letter == 'B' ) { |
| 1016 | drvLetter->bUsed = TRUE; |
| 1017 | goto errorout; |
| 1018 | } |
| 1019 | |
| 1020 | if (drvLetter->DrvType == DRIVE_REMOVABLE || |
| 1021 | drvLetter->DrvType == DRIVE_FIXED) { |
| 1022 | |
| 1023 | status = Ext2Open(drvLetter->SymLink, &hVolume, EXT2_DESIRED_ACCESS); |
| 1024 | if (!NT_SUCCESS(status) && status != STATUS_ACCESS_DENIED) { |
| 1025 | drvLetter->bInvalid = TRUE; |
| 1026 | goto errorout; |
| 1027 | } |
| 1028 | |
| 1029 | drvLetter->Extent = Ext2QueryVolumeExtents(hVolume); |
| 1030 | if (drvLetter->DrvType == DRIVE_REMOVABLE) { |
| 1031 | drvLetter->SDN = Ext2QueryDeviceNumber(hVolume); |
| 1032 | } |
| 1033 | |
| 1034 | Ext2Close(&hVolume); |
| 1035 | } |
| 1036 | |
| 1037 | errorout: |
| 1038 | |
| 1039 | return NT_SUCCESS(status); |
| 1040 | } |
| 1041 | |
| 1042 | |
| 1043 | PEXT2_LETTER Ext2GetFirstUnusedDrvLetter() |
no test coverage detected