| 2123 | } |
| 2124 | |
| 2125 | BOOL |
| 2126 | Ext2QueryVolumeFS( |
| 2127 | HANDLE Handle, |
| 2128 | PEXT2_VOLUME volume |
| 2129 | ) |
| 2130 | { |
| 2131 | struct ext2_super_block *sb = NULL; |
| 2132 | union swap_header* swap = NULL; |
| 2133 | PUCHAR buffer = NULL; |
| 2134 | |
| 2135 | |
| 2136 | NT::NTSTATUS status; |
| 2137 | |
| 2138 | buffer = (PUCHAR)malloc(PAGE_SIZE); |
| 2139 | if (!buffer) { |
| 2140 | return FALSE; |
| 2141 | } |
| 2142 | |
| 2143 | swap = (union swap_header*)&buffer[SWAP_HEADER_OFFSET]; |
| 2144 | sb = (struct ext2_super_block *)&buffer[SUPER_BLOCK_OFFSET]; |
| 2145 | |
| 2146 | status = Ext2Read( Handle, FALSE, volume->FssInfo.BytesPerSector, |
| 2147 | (ULONGLONG)0,PAGE_SIZE, (PUCHAR) buffer); |
| 2148 | |
| 2149 | if (!NT_SUCCESS(status)) { |
| 2150 | free(buffer); |
| 2151 | return FALSE; |
| 2152 | } |
| 2153 | |
| 2154 | if (sb->s_magic == EXT2_SUPER_MAGIC) { |
| 2155 | |
| 2156 | volume->FsaInfo.FileSystemNameLength = 8; |
| 2157 | volume->FsaInfo.FileSystemName[0] = (WCHAR)'E'; |
| 2158 | volume->FsaInfo.FileSystemName[1] = (WCHAR)'X'; |
| 2159 | volume->FsaInfo.FileSystemName[2] = (WCHAR)'T'; |
| 2160 | volume->FsaInfo.FileSystemName[4] = 0; |
| 2161 | |
| 2162 | if ((sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) || |
| 2163 | (sb->s_feature_incompat & EXT3_FEATURE_INCOMPAT_RECOVER) || |
| 2164 | (sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) ) { |
| 2165 | volume->FsaInfo.FileSystemName[3] = (WCHAR)'3'; |
| 2166 | volume->EVP.bExt3 = TRUE; |
| 2167 | } else { |
| 2168 | volume->FsaInfo.FileSystemName[3] = (WCHAR)'2'; |
| 2169 | volume->EVP.bExt2 = TRUE; |
| 2170 | } |
| 2171 | memcpy(&volume->EVP.UUID[0], &sb->s_uuid[0], 16); |
| 2172 | goto errorout; |
| 2173 | } |
| 2174 | |
| 2175 | if ((memcmp(swap->magic.magic, SWAP_HEADER_MAGIC_V1, 10) == 0) || |
| 2176 | (memcmp(swap->magic.magic, SWAP_HEADER_MAGIC_V2, 10) == 0)) { |
| 2177 | volume->FsaInfo.FileSystemNameLength = 8; |
| 2178 | volume->FsaInfo.FileSystemName[0] = (WCHAR)'S'; |
| 2179 | volume->FsaInfo.FileSystemName[1] = (WCHAR)'W'; |
| 2180 | volume->FsaInfo.FileSystemName[2] = (WCHAR)'A'; |
| 2181 | volume->FsaInfo.FileSystemName[3] = (WCHAR)'P'; |
| 2182 | volume->FsaInfo.FileSystemName[4] = 0; |
no test coverage detected