public static extern HANDLE FindFirstStore(ref STOREINFO storeInfo);
public static extern bool FindNextStore(HANDLE hSearch, ref STOREINFO storeInfo);
public void DisplayDisks() { STOREINFO si = new STOREINFO(); HANDLE hSearch = INVALID_HANDLE_VALUE; si.cbSize = (uint)Marshal.SizeOf(typeof(STOREINFO)); // enumerate first store hSearch = StorageManager.FindFirstStore(ref si); if (INVALID_HANDLE_VALUE != hSearch) { do { Console.WriteLine("Device Name " + si.szDeviceName); Console.WriteLine("Name " + si.szStoreName); var storageClass = "STORAGE_DEVICE_CLASS_MULTIMEDIA"; if (si.dwDeviceClass == STORAGE_DEVICE_CLASS_BLOCK) { storageClass = "STORAGE_DEVICE_CLASS_BLOCK"; } Console.WriteLine("Class " + storageClass); Console.WriteLine("Type "); switch (si.dwDeviceType) { case STORAGE_DEVICE_TYPE_PCIIDE: Console.WriteLine("STORAGE_DEVICE_TYPE_PCIIDE\n"); break; case STORAGE_DEVICE_TYPE_FLASH: Console.WriteLine("STORAGE_DEVICE_TYPE_FLASH\n"); break; case STORAGE_DEVICE_TYPE_ATA: Console.WriteLine("STORAGE_DEVICE_TYPE_ATA\n"); break; case STORAGE_DEVICE_TYPE_ATAPI: Console.WriteLine("STORAGE_DEVICE_TYPE_ATAPI\n"); break; case STORAGE_DEVICE_TYPE_SRAM: Console.WriteLine("STORAGE_DEVICE_TYPE_SRAM\n"); break; case STORAGE_DEVICE_TYPE_DVD: Console.WriteLine("STORAGE_DEVICE_TYPE_DVD\n"); break; case STORAGE_DEVICE_TYPE_CDROM: Console.WriteLine("STORAGE_DEVICE_TYPE_CDROM\n"); break; case STORAGE_DEVICE_TYPE_USB: Console.WriteLine("STORAGE_DEVICE_TYPE_USB\n"); break; case STORAGE_DEVICE_TYPE_1394: Console.WriteLine("STORAGE_DEVICE_TYPE_1394\n"); break; case STORAGE_DEVICE_TYPE_DOC: Console.WriteLine("STORAGE_DEVICE_TYPE_DOC\n"); break; case STORAGE_DEVICE_TYPE_UNKNOWN: Console.WriteLine("STORAGE_DEVICE_TYPE_UNKNOWN\n"); break; case STORAGE_DEVICE_TYPE_REMOVABLE_DRIVE: Console.WriteLine("STORAGE_DEVICE_TYPE_REMOVABLE_DRIVE\n"); break; case STORAGE_DEVICE_TYPE_REMOVABLE_MEDIA: Console.WriteLine("STORAGE_DEVICE_TYPE_REMOVABLE_MEDIA\n"); break; default: Console.WriteLine("Unkown device type " + si.dwDeviceType); break; } Console.WriteLine("Flags"); if ((si.dwDeviceFlags & STORAGE_DEVICE_FLAG_READWRITE) != 0) { Console.WriteLine("STORAGE_DEVICE_FLAG_READWRITE"); } if ((si.dwDeviceFlags & STORAGE_DEVICE_FLAG_READONLY) != 0) { Console.WriteLine("STORAGE_DEVICE_FLAG_READONLY"); } if ((si.dwDeviceFlags & STORAGE_DEVICE_FLAG_TRANSACTED) != 0) { Console.WriteLine(" STORAGE_DEVICE_FLAG_TRANSACTED"); } if ((si.dwDeviceFlags & STORAGE_DEVICE_FLAG_MEDIASENSE) != 0) { Console.WriteLine("STORAGE_DEVICE_FLAG_MEDIASENSE"); } if (si.dwDeviceFlags == 0) { Console.WriteLine(" None"); } Console.WriteLine("Bytes per Sector " + si.dwBytesPerSector); Console.WriteLine("Attributes"); if ((si.dwAttributes & STORE_ATTRIBUTE_READONLY) != 0) { Console.WriteLine(" STORE_ATTRIBUTE_READONLY"); } if ((si.dwAttributes & STORE_ATTRIBUTE_REMOVABLE) != 0) { Console.WriteLine(" STORE_ATTRIBUTE_REMOVABLE"); } if ((si.dwAttributes & STORE_ATTRIBUTE_UNFORMATTED) != 0) { Console.WriteLine(" STORE_ATTRIBUTE_UNFORMATTED"); } if ((si.dwAttributes & STORE_ATTRIBUTE_AUTOFORMAT) != 0) { Console.WriteLine("STORE_ATTRIBUTE_AUTOFORMAT"); } if ((si.dwAttributes & STORE_ATTRIBUTE_AUTOPART) != 0) { Console.WriteLine("STORE_ATTRIBUTE_AUTOPART"); } if ((si.dwAttributes & STORE_ATTRIBUTE_AUTOMOUNT) != 0) { Console.WriteLine("STORE_ATTRIBUTE_AUTOMOUNT"); } if (si.dwAttributes == 0) { Console.WriteLine("None"); } Console.WriteLine("Partition Count " + si.dwPartitionCount); Console.WriteLine("Mount Count " + si.dwMountCount); HANDLE hStore = StorageManager.OpenStore(si.szDeviceName); if (hStore != INVALID_HANDLE_VALUE) { DisplayPartions(hStore); } else { Console.WriteLine("OpenSelectedStore failed"); } }while (StorageManager.FindNextStore(hSearch, ref si)); StorageManager.FindCloseStore(hSearch); } }