讲讲原理,有代码最好!先谢过!

解决方案 »

  1.   

    http://www.pudn.com/downloads74/sourcecode/windows/system/detail267979.html
    这个貌似是从ReactOs里面抠出来的任务管理器的源码,和Windows的任务管理器一模一样,物理内存虚拟内存Cpu这些都有,不知道有没有你需要的。
    还可以通过wmi查询系统硬件信息,msdn上有例子
    http://msdn.microsoft.com/en-us/library/aa390418(VS.85).aspx
      

  2.   

    int   CHardware::ReadPhysicalDriveInfoInNT(DISKINFO_ARRAYLIST   &diskinfo_arraylis)   
      {   
      int   done   =   FALSE;   
      int   drive   =   0;   
        
      //遍历所有磁盘设备   
      for   (drive   =   0;   drive   <   MAX_IDE_DRIVES;   drive++)   
      {   
      //磁盘设备io操作句柄   
      HANDLE   hPhysicalDriveIOCTL   =   0;   
      TCHAR   driveName   [256];   
      _stprintf(driveName,   TEXT("\\\\.\\PhysicalDrive%d"),   drive);   
        
      //Windows   NT,   Windows   2000,必需要有管理权限   
      //获取对设备的操作句柄(在windows下设备看为文件,使用文件API打开设备,对于磁盘设备的虚拟文件为PhysicalDrive+i)i为设备号   
      //如IDE0的的主盘为0,从盘为2,IDE1的主盘为3,从盘为4,对于PC机MAX_IDE_DRIVES为4个   
      hPhysicalDriveIOCTL   =   CreateFile   (driveName,   
      GENERIC_READ   |   GENERIC_WRITE,     
      FILE_SHARE_READ   |   FILE_SHARE_WRITE,   NULL,   
      OPEN_EXISTING,   0,   NULL);   
        
      //如果打开成功   
      if   (hPhysicalDriveIOCTL   !=   INVALID_HANDLE_VALUE)   
      {   
      GETVERSIONOUTPARAMS   VersionParams;       //GETVERSIONOUTPARAMS存放磁盘驱动器,版本信息   
      DWORD                               cbBytesReturned   =   0;   
        
      //初始化GETVERSIONOUTPARAMS结构数据   
      memset   ((void*)   &VersionParams,   0,   sizeof(VersionParams));   
        
      //   Get   the   version,   etc   of   PhysicalDrive   IOCTL   获取版本信息,发出DFP_GET_VERSION命令   
      //如果获取成功   
      if   (   DeviceIoControl   (hPhysicalDriveIOCTL,   DFP_GET_VERSION,   
      NULL,     
      0,   
      &VersionParams,   
      sizeof(VersionParams),   
      &cbBytesReturned,   NULL)   )   
      {   
      //如果有IDE设备   
      if   (VersionParams.bIDEDeviceMap   >   0)   
      {   
      BYTE                           bIDCmd   =   0;       //   IDE   or   ATAPI   IDENTIFY   cmd   
      SENDCMDINPARAMS     scip;   
      //SENDCMDOUTPARAMS   OutCmd;   
      BYTE   IdOutCmd   [sizeof   (SENDCMDOUTPARAMS)   +   IDENTIFY_BUFFER_SIZE   -   1];   
      //   Now,   get   the   ID   sector   for   all   IDE   devices   in   the   system.   
      //   If   the   device   is   ATAPI   use   the   IDE_ATAPI_IDENTIFY   command,   
      //   otherwise   use   the   IDE_ATA_IDENTIFY   command   
      //判断是ATA设备还是ATAPI设备   
      bIDCmd   =   (VersionParams.bIDEDeviceMap   >>   drive   &   0x10)   ?   IDE_ATAPI_IDENTIFY   :   IDE_ATA_IDENTIFY;   
        
      //初始化结构信息   
      memset   (&scip,   0,   sizeof(scip));   
      memset   (IdOutCmd,   0,   sizeof(IdOutCmd));   
        
      if   (   DoIDENTIFY   (hPhysicalDriveIOCTL,     
      &scip,     
      (PSENDCMDOUTPARAMS)&IdOutCmd,     
      (BYTE)   bIDCmd,   
      (BYTE)   drive,   
      &cbBytesReturned))   
      {   
      DISKINFO   *diskinfo=new   DISKINFO();   
      diskinfo->drive=drive;   
        
      int   ijk   =   0;   
      USHORT   *pIdSector   =   (USHORT   *)   
      ((PSENDCMDOUTPARAMS)   IdOutCmd)   ->   bBuffer;   
        
      for   (ijk   =   0;   ijk   <   256;   ijk++)   
      diskinfo->diskdata[ijk]   =   pIdSector   [ijk];   
      diskinfo_arraylis.m_diskinfo.push_back(diskinfo);   
      done   =   TRUE;   
      }   
      }   
      }   
      CloseHandle   (hPhysicalDriveIOCTL);   
      }   
      }   
      return   done;   
      }
      

  3.   

    都是Mfc的Api函数,查下Msdn就可以了