获取硬盘的详细信息文档格式.docx
《获取硬盘的详细信息文档格式.docx》由会员分享,可在线阅读,更多相关《获取硬盘的详细信息文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
Ë
ù
I/O¿
Ø
Ö
Æ
Â
×
î
±
¾
³
ö
§
í
VC/MFC»
ª
DDKÖ
©
ß
÷
ç
LynnMcGuireÐ
û
IDEÓ
DiskID32£
æ
Ç
ä
¹
Í
ø
¶
ATA/APAPIµ
IDENTIFYDEVICEÖ
ATA/APAPIÊ
¹
ú
é
¯
T13Æ
ð
Ý
IDE/EIDE/UDMAÓ
è
µ
ATA/APAPI-7°
ATA/ATAPIÉ
â
ATA/ATAPI¼
õ
T13µ
Õ
á
//IOCTL¿
//#defineDFP_SEND_DRIVE_COMMAND0x0007c084
#defineDFP_SEND_DRIVE_COMMANDCTL_CODE(IOCTL_DISK_BASE,0x0021,METHOD_BUFFERED,FILE_READ_ACCESS|FILE_WRITE_ACCESS)
//#defineDFP_RECEIVE_DRIVE_DATA0x0007c088
#defineDFP_RECEIVE_DRIVE_DATACTL_CODE(IOCTL_DISK_BASE,0x0022,METHOD_BUFFERED,FILE_READ_ACCESS|FILE_WRITE_ACCESS)
#defineFILE_DEVICE_SCSI0x0000001b
#defineIOCTL_SCSI_MINIPORT_IDENTIFY((FILE_DEVICE_SCSI<
<
16)+0x0501)
#defineIOCTL_SCSI_MINIPORT0x0004D008//seeNTDDSCSI.Hfordefinition
//ATA/ATAPIÖ
#defineIDE_ATA_IDENTIFY0xEC//ATAµ
IDÖ
(IDENTIFYDEVICE)
//IDEÃ
typedefstruct_IDEREGS
{
BYTEbFeaturesReg;
//Ì
(Ó
SMARTÃ
)
BYTEbSectorCountReg;
//É
BYTEbSectorNumberReg;
//¿
BYTEbCylLowReg;
BYTEbCylHighReg;
BYTEbDriveHeadReg;
//Ç
/´
BYTEbCommandReg;
//Ö
BYTEbReserved;
//±
ô
}IDEREGS,*PIDEREGS,*LPIDEREGS;
//´
typedefstruct_DRIVERSTATUS
BYTEbDriverError;
//´
ó
BYTEbIDEStatus;
//IDE×
BYTEbReserved[2];
DWORDdwReserved[2];
}DRIVERSTATUS,*PDRIVERSTATUS,*LPDRIVERSTATUS;
//IDEÉ
IOCTLÊ
typedefstruct_SENDCMDINPARAMS
DWORDcBufferSize;
//»
å
IDEREGSirDriveRegs;
//IDE¼
BYTEbDriveNumber;
BYTEbReserved[3];
DWORDdwReserved[4];
BYTEbBuffer[1];
//Ê
(´
¦
1×
}SENDCMDINPARAMS,*PSENDCMDINPARAMS,*LPSENDCMDINPARAMS;
typedefstruct_SENDCMDOUTPARAMS
DRIVERSTATUSDriverStatus;
}SENDCMDOUTPARAMS,*PSENDCMDOUTPARAMS,*LPSENDCMDOUTPARAMS;
//IDEµ
IDÃ
//¹
512×
(256¸
WORD)£
ï
¤
(»
ATA/ATAPI-4)
typedefstruct_IDINFO
USHORTwGenConfig;
//WORD0:
»
USHORTwNumCyls;
//WORD1:
Ö
USHORTwReserved2;
//WORD2:
±
USHORTwNumHeads;
//WORD3:
´
USHORTwReserved4;
//WORD4:
USHORTwReserved5;
//WORD5:
USHORTwNumSectorsPerTrack;
//WORD6:
Ã
USHORTwVendorUnique[3];
//WORD7-9:
³
CHARsSerialNumber[20];
//WORD10-19:
USHORTwBufferType;
//WORD20:
à
USHORTwBufferSize;
//WORD21:
USHORTwECCSize;
//WORD22:
ECCÐ
CHARsFirmwareRev[8];
//WORD23-26:
¹
þ
CHARsModelNumber[40];
//WORD27-46:
Ä
USHORTwMoreVendorUnique;
//WORD47:
USHORTwReserved48;
//WORD48:
struct{
USHORTreserved1:
8;
USHORTDMA:
1;
//1=Ö
DMA
USHORTLBA:
LBA
USHORTDisIORDY:
//1=¿
IORDY
USHORTIORDY:
USHORTSoftReset:
//1=Ð
ATAÈ
USHORTOverlap:
USHORTQueue:
USHORTInlDMA:
}wCapabilities;
//WORD49:
Ò
USHORTwReserved1;
//WORD50:
USHORTwPIOTiming;
//WORD51:
PIOÊ
USHORTwDMATiming;
//WORD52:
DMAÊ
USHORTCHSNumber:
//1=WORD54-58Ó
USHORTCycleNumber:
//1=WORD64-70Ó
USHORTUnltraDMA:
//1=WORD88Ó
USHORTreserved:
13;
}wFieldValidity;
//WORD53:
º
USHORTwNumCurCyls;
//WORD54:
CHS¿
USHORTwNumCurHeads;
//WORD55:
USHORTwNumCurSectorsPerTrack;
//WORD56:
USHORTwCurSectorsLow;
//WORD57:
USHORTwCurSectorsHigh;
//WORD58:
USHORTCurNumber:
//µ
USHORTMulti:
//1=Ò
7;
}wMultSectorStuff;
//WORD59:
¶
ULONGdwTotalSectors;
//WORD60-61:
LBA¿
USHORTwSingleWordDMA;
//WORD62:
µ
¥
DMAÖ
USHORTMode0:
0(4.17Mb/s)
USHORTMode1:
1(13.3Mb/s)
USHORTMode2:
2(16.7Mb/s)
USHORTReserved1:
5;
USHORTMode0Sel:
USHORTMode1Sel:
1
USHORTMode2Sel:
2
USHORTReserved2:
}wMultiWordDMA;
//WORD63:
USHORTAdvPOIModes:
POIÄ
}wPIOCapacity;
//WORD64:
¸
PIOÖ
USHORTwMinMultiWordDMACycle;
//WORD65:
DMA´
«
USHORTwRecMultiWordDMACycle;
//WORD66:
USHORTwMinPIONoFlowCycle;
//WORD67:
Î
Þ
PIO´
USHORTwMinPOIFlowCycle;
//WORD68:
Ó
USHORTwReserved69[11];
//WORD69-79:
USHORTATA1:
ATA-1
USHORTATA2:
ATA-2
USHORTATA3:
ATA-3
USHORTATA4:
ATA/ATAPI-4
USHORTATA5:
ATA/ATAPI-5
USHORTATA6:
ATA/ATAPI-6
USHORTATA7:
ATA/ATAPI-7
USHORTATA8:
ATA/ATAPI-8
USHORTATA9:
ATA/ATAPI-9
USHORTATA10:
ATA/ATAPI-10
USHORTATA11:
ATA/ATAPI-11
USHORTATA12:
ATA/ATAPI-12
USHORTATA13:
ATA/ATAPI-13
USHORTATA14:
ATA/ATAPI-14
}wMajorVersion;
//WORD80:
USHORTwMinorVersion;
//WORD81:
USHORTwReserved82[6];
//WORD82-87:
0(16.7Mb/s)
1(25Mb/s)
2(33Mb/s)
USHORTMode3:
3(44Mb/s)
USHORTMode4:
4(66Mb/s)
USHORTMode5:
5(100Mb/s)
USHORTMode6:
6(133Mb/s)
USHORTMode7:
7(166Mb/s)?
?
USHORTMode3Sel:
3
USHORTMode4Sel:
4
USHORTMode5Sel:
5
USHORTMode6Sel:
6
USHORTMode7Sel:
7
}wUltraDMA;
//WORD88:
UltraDMAÖ
USHORTwReserved89[167];
//WORD89-255
}IDINFO,*PIDINFO;
//SCSIÇ
typedefstruct_SRB_IO_CONTROL
ULONGHeaderLength;
//Í
UCHARSignature[8];
ULONGTimeout;
//³
ULONGControlCode;
ULONGReturnCode;
//·
ULONGLength;
}SRB_IO_CONTROL,*PSRB_IO_CONTROL;
IDINFOµ
57-58WORD(CHS¿
)£
32Î
ULONG×
LynnMcGuireµ
//filename:
É
HANDLEOpenDevice(LPCTSTRfilename)
HANDLEhDevice;
hDevice=:
:
CreateFile(filename,//Î
GENERIC_READ|GENERIC_WRITE,//¶
FILE_SHARE_READ|FILE_SHARE_WRITE,//¹
NULL,//Ä
OPEN_EXISTING,//´
0,//²
NULL);
//²
returnhDevice;
}
//Ï
IDENTIFYDEVICE¡
//hDevice:
//pIdInfo:
BOOLIdentifyDevice(HANDLEhDevice,PIDINFOpIdInfo)
PSENDCMDINPARAMSpSCIP;
PSENDCMDOUTPARAMSpSCOP;
DWORDdwOutBytes;
//IOCTLÊ
BOOLbResult;
//IOCTL·
/Ê
pSCIP=(PSENDCMDINPARAMS):
GlobalAlloc(LMEM_ZEROINIT,sizeof(SENDCMDINPARAMS)-1);
pSCOP=(PSENDCMDOUTPARAMS):
GlobalAlloc(LMEM_ZEROINIT,sizeof(SENDCMDOUTPARAMS)+sizeof(IDINFO)-1);
ATA/ATAPIÃ
//pSCIP->
irDriveRegs.bFeaturesReg=0;
irDriveRegs.bSectorCountReg=0;
irDriveRegs.bSectorNumberReg=0;
irDriveRegs.bCylLowReg=0;
irDriveRegs.bCylHighReg=0;
irDriveRegs.bDriveHeadReg=0;
pSCIP->
irDriveRegs.bCommandReg=IDE_ATA_IDENTIFY;
cBufferSize=0;
pSCOP->
cBufferSize=sizeof(IDINFO);
//IDENTIFYDEVICE
bResult=:
DeviceIoControl(hDevice,//É
DFP_RECEIVE_DRIVE_DATA,//Ö
IOCTL
pSCIP,sizeof(SENDCMDINPARAMS)-1,//Ê
pSCOP,sizeof(SENDCMDOUTPARAMS)+sizeof(IDINFO)-1,//Ê
&
dwOutBytes,//Ê
(LPOVERLAPPED)NULL);
//Ó
I/O
//¸
:
memcpy(pIdInfo,pSCOP->
bBuffer,sizeof(IDINFO));
GlobalFree(pSCOP);
GlobalFree(pSCIP);
returnbResult;
SCSIMINI-PORTÇ
BOOLIdentifyDeviceAsScsi(HANDLEhDevice,intnDrive,PIDINFOpIdInfo)
PSRB_IO_CONTROLpSRBIO;
//SCSIÊ
pSRBIO=(PSRB_IO_CONTROL):
GlobalAlloc(LMEM_ZEROINIT,sizeof(SRB_IO_CONTROL)+sizeof(SENDCMDOUTPARAMS)+sizeof(IDINFO)-1);
pSCIP=(PSENDCMDINPARAMS)((char*)pSRBIO+sizeof(SRB_IO_CONTROL));
pSCOP=(PSENDCMDOUTPARAMS)((char*)pSRBIO+sizeof(SRB_IO