C# 如何获取所有硬盘(包含移动硬盘组⼀盒里的硬盘)的厂家序列号 和 硬盘对应的所有盘符

2026年09月23日 05:32
有2个网友回答
网友(1):

#include #include #include #define BUFSIZE 1024BOOL GetDirverInfo(LPSTR szDrive);void main(void){CHAR szLogicalDriveStrings[BUFSIZE];PCHAR szDrive;ZeroMemory(szLogicalDriveStrings,BUFSIZE);GetLogicalDriveStrings(BUFSIZE - 1,szLogicalDriveStrings); szDrive = (PCHAR)szLogicalDriveStrings;do{if(!GetDirverInfo(szDrive)){printf("\nGet Volume Information Error: %d", GetLastError());}szDrive += (lstrlen(szDrive)+1);}while(*szDrive!='\x00');getchar();}BOOL GetDirverInfo(LPSTR szDrive){UINT uDriveType;DWORD dwVolumeSerialNumber;DWORD dwMaximumComponentLength;DWORD dwFileSystemFlags;TCHAR szFileSystemNameBuffer[BUFSIZE];printf("\n%s\n",szDrive);uDriveType = GetDriveType(szDrive);printf("------%d %d\n",uDriveType,szDrive);switch(uDriveType){case DRIVE_UNKNOWN:printf("未知的磁盘类型");break;case DRIVE_NO_ROOT_DIR:printf("说明lpRootPathName是无效的");break;case DRIVE_REMOVABLE:printf("可移动磁盘");break;case DRIVE_FIXED:printf("固定磁盘");break;case DRIVE_REMOTE:printf("网络磁盘");break;case DRIVE_CDROM:printf("光驱");break;case DRIVE_RAMDISK:printf("为RAM");break;default:break;}if (!GetVolumeInformation(szDrive, NULL, 0,&dwVolumeSerialNumber,&dwMaximumComponentLength,&dwFileSystemFlags,szFileSystemNameBuffer,BUFSIZE)){return FALSE;}printf ("\nVolume Serial Number is %u",dwVolumeSerialNumber);printf ("\nMaximum Component Length is %u",dwMaximumComponentLength);printf ("\nSystem Type is %s\n",szFileSystemNameBuffer);if(dwFileSystemFlags & FILE_SUPPORTS_REPARSE_POINTS){printf ("The file system does not support volume mount points.\n");}if(dwFileSystemFlags & FILE_VOLUME_QUOTAS){printf ("The file system supports disk quotas.\n");}if(dwFileSystemFlags & FILE_CASE_SENSITIVE_SEARCH){printf ("The file system supports case-sensitive file names.\n");}//you can use these value to get more informaion////FILE_CASE_PRESERVED_NAMES//FILE_CASE_SENSITIVE_SEARCH//FILE_FILE_COMPRESSION//FILE_NAMED_STREAMS//FILE_PERSISTENT_ACLS//FILE_READ_ONLY_VOLUME//FILE_SUPPORTS_ENCRYPTION//FILE_SUPPORTS_OBJECT_IDS//FILE_SUPPORTS_REPARSE_POINTS//FILE_SUPPORTS_SPARSE_FILES//FILE_UNICODE_ON_DISK//FILE_VOLUME_IS_COMPRESSED//FILE_VOLUME_QUOTASprintf("...\n");return TRUE;}

网友(2):

得用WMI吧 using System; using System.Management; namespace ProcessorId { public class Test { static void Main() { Console.WriteLine("My harddisk is : " + GetHd()); Console.Read(); } public static string GetHd() { ManagementObjectSearcher wmiSearcher = new ManagementObjectSearcher(); wmiSearcher.Query = new SelectQuery( "Win32_DiskDrive", "", new string[]{"PNPDeviceID"} ); ManagementObjectCollection myCollection = wmiSearcher.Get(); ManagementObjectCollection.ManagementObjectEnumerator em = myCollection.GetEnumerator(); em.MoveNext(); ManagementBaseObject mo = em.Current; string id = mo.Properties["PNPDeviceID"].Value.ToString().Trim(); return id; } } }