编程获得磁盘信息

 

编程获得磁盘硬件信息,VC6版本
 
#include <windows.h>
#include <winioctl.h>
#include <stdio.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("////.//PhysicalDrive1", // 要打开的磁盘,或者使用此方式,或者使用盘符,如: //./G
              0,       // don't need any access to the drive
              FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
              NULL,    // default security attributes
              OPEN_EXISTING, // disposition
              0,       // file attributes
              NULL);   // don't copy any file's attributes
      
       if (hDevice == INVALID_HANDLE_VALUE) {        // if we can't open the drive...
              return (FALSE);
       }
      
       bResult = DeviceIoControl(hDevice, // the device we are querying
              IOCTL_DISK_GET_DRIVE_GEOMETRY,  // operation to perform
              NULL, 0, // no input buffer, so we pass zero
              pdg, sizeof(*pdg),                    // the output buffer
              &junk,                                      // discard the count of bytes returned
              (LPOVERLAPPED) NULL);  // synchronous I/O
      
       if (!bResult) {                // if IOCTL failed...
              return (FALSE);
       }
      
       CloseHandle(hDevice);         // we're done with the handle
      
       return (bResult);
}
 
int main(int argc, char *argv[])
{
       DISK_GEOMETRY pdg;            // disk drive geometry structure
       BOOL bResult;                 // generic results flag
       ULONGLONG DiskSize;           // holder for the size of the drive in bytes
      
       bResult = GetDriveGeometry (&pdg);
      
       if (bResult)
       {
              printf("柱面 = %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 ("Attempt to get drive geometry failed. Error %ld./n",
            GetLastError ());
       }
      
       return ((int)bResult);
}

你可能感兴趣的:(编程,null,disk,attributes,磁盘,structure)