| 1885 | } |
| 1886 | |
| 1887 | BOOL |
| 1888 | Ext2LoadCdroms() |
| 1889 | { |
| 1890 | ULONG i = 0, j = 0; |
| 1891 | NT::NTSTATUS status; |
| 1892 | DWORD mediaType; |
| 1893 | |
| 1894 | if (g_nCdroms == 0) { |
| 1895 | return TRUE; |
| 1896 | } |
| 1897 | |
| 1898 | gCdroms = (PEXT2_CDROM) malloc(sizeof(EXT2_CDROM) * g_nCdroms); |
| 1899 | if (gCdroms == NULL) { |
| 1900 | return FALSE; |
| 1901 | } |
| 1902 | memset(gCdroms, 0, sizeof(EXT2_CDROM) * g_nCdroms); |
| 1903 | |
| 1904 | while (i < g_nCdroms && j < 256) { |
| 1905 | |
| 1906 | HANDLE Handle = NULL; |
| 1907 | |
| 1908 | gCdroms[i].Magic[0] = EXT2_CDROM_DEVICE_MAGIC; |
| 1909 | gCdroms[i].Magic[1] = EXT2_CDROM_VOLUME_MAGIC; |
| 1910 | gCdroms[i].OrderNo = (UCHAR) j; |
| 1911 | gCdroms[i].bLoaded = FALSE; |
| 1912 | sprintf(gCdroms[i].Name, "\\Device\\Cdrom%d\0", j); |
| 1913 | |
| 1914 | j++; |
| 1915 | |
| 1916 | status = Ext2Open(gCdroms[i].Name, &Handle, EXT2_DESIRED_ACCESS); |
| 1917 | if (!NT_SUCCESS(status)) { |
| 1918 | continue; |
| 1919 | } |
| 1920 | |
| 1921 | status = Ext2QueryProperty( Handle, StorageDeviceProperty, |
| 1922 | (PVOID)&gCdroms[i].SDD, |
| 1923 | sizeof(STORAGE_DEVICE_DESCRIPTOR) |
| 1924 | ); |
| 1925 | if (!NT_SUCCESS(status)) { |
| 1926 | goto Next; |
| 1927 | } |
| 1928 | |
| 1929 | status = Ext2QueryProperty( Handle, StorageAdapterProperty, |
| 1930 | (PVOID)&gCdroms[i].SAD, |
| 1931 | sizeof(STORAGE_ADAPTER_DESCRIPTOR) |
| 1932 | ); |
| 1933 | if (!NT_SUCCESS(status)) { |
| 1934 | goto Next; |
| 1935 | } |
| 1936 | |
| 1937 | status = Ext2QueryDisk(Handle, &gCdroms[i].DiskGeometry); |
| 1938 | if (NT_SUCCESS(status)) { |
| 1939 | gCdroms[i].bEjected = FALSE; |
| 1940 | } else { |
| 1941 | // (status == STATUS_NO_MEDIA_IN_DEVICE) { |
| 1942 | gCdroms[i].bEjected = TRUE; |
| 1943 | } |
| 1944 |
no test coverage detected