盘符就是指C:,D:这样的逻辑盘符
要从这些逻辑盘符得到包含它们的物理磁盘的硬件信息
这里的硬件信息指,在资源管理器中某个驱动器上点右键,选“属性”,在“硬件”那一页中所列出的信息。

解决方案 »

  1.   

    SHELLEXECUTEINFO ShExecInfo ={0};
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = "properties";
    ShExecInfo.lpFile = "c:\\";
    ShExecInfo.lpParameters = ""; 
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_SHOW;
    ShExecInfo.hInstApp = NULL; 
    ShellExecuteEx(&ShExecInfo);
      

  2.   

    http://search.csdn.net/Expert/topic/2168/2168400.xml?temp=.8724787
      

  3.   

    http://www.vckbase.com/code/filesys/disk/HardDiskInfo.zip
      

  4.   

    http://www.vckbase.com/document/viewdoc.asp?id=706
      

  5.   

    #include <windows.h>
    #include <winioctl.h>
      
    BOOL GetDriveGeometry(DISK_GEOMETRY *pdg)
    {
        HANDLE hDevice;               // handle to the drive to be examined
        BOOL bResult;                 // results flag
        DWORD junk;                   // discard results
      
        hDevice = CreateFile("\\\\.\\d:",  // drive to open
                        0,                // no access to the drive
                        FILE_SHARE_READ | // share mode
                        FILE_SHARE_WRITE,
                        NULL,             // default security attributes
                        OPEN_EXISTING,    // disposition
                        0,                // file attributes
                        NULL);            // do not copy file attributes
      
        if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
        {
            return (FALSE);
        }
      
        bResult = DeviceIoControl(hDevice,     // device to be queried
            IOCTL_DISK_GET_DRIVE_GEOMETRY,     // operation to perform
                        NULL, 0,               // no input buffer
                        pdg, sizeof(*pdg),     // output buffer
                        &junk,                 // # bytes returned
                        (LPOVERLAPPED) NULL);  // synchronous I/O
      
        CloseHandle(hDevice);
      
        return (bResult);
    }
      
    int main(int argc, char *argv[])
    {
        DISK_GEOMETRY pdg;            // disk drive geometry structure
        BOOL bResult;                 // generic results flag
        ULONGLONG DiskSize;           // size of the drive, in bytes
      
        bResult = GetDriveGeometry (&pdg);
      
        if (bResult)
        {
            printf("Cylinders = %I64d\n", pdg.Cylinders);
            printf("Tracks per cylinder = %ld\n", (ULONG) pdg.TracksPerCylinder);
            printf("Sectors per track = %ld\n", (ULONG) pdg.SectorsPerTrack);
            printf("Bytes per sector = %ld\n", (ULONG) pdg.BytesPerSector);
      
            DiskSize = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder *
                (ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector;
            printf("Disk size = %I64d (Bytes) = %I64d (Mb)\n", DiskSize,
                DiskSize / (1024 * 1024));
        }
        else
        {
            printf("GetDriveGeometry failed. Error %ld.\n", GetLastError());
        }
      
        return ((int)bResult);
    }