获取硬盘的详细信息.docx

上传人:b****5 文档编号:8335791 上传时间:2023-01-30 格式:DOCX 页数:13 大小:19.95KB
下载 相关 举报
获取硬盘的详细信息.docx_第1页
第1页 / 共13页
获取硬盘的详细信息.docx_第2页
第2页 / 共13页
获取硬盘的详细信息.docx_第3页
第3页 / 共13页
获取硬盘的详细信息.docx_第4页
第4页 / 共13页
获取硬盘的详细信息.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

获取硬盘的详细信息.docx

《获取硬盘的详细信息.docx》由会员分享,可在线阅读,更多相关《获取硬盘的详细信息.docx(13页珍藏版)》请在冰豆网上搜索。

获取硬盘的详细信息.docx

获取硬盘的详细信息

»ñÈ¡Ó²Å̵ÄÏêϸÐÅÏ¢

QÓÃIOCTL_DISK_GET_DRIVE_GEOMETRY»òIOCTL_STORAGE_GET_MEDIA_TYPES_EXÖ»Äܵõ½ºÜÉٵĴÅÅ̲ÎÊý£¬ÎÒÏë»ñµÃ°üÀ¨Ó²ÅÌÐòÁкÅÔÚÄڵĸü¼ÓÏêϸµÄÐÅÏ¢£¬ÓÐʲô°ì·¨Ñ½£¿

Aȷʵ£¬ÓÃÄãËù˵µÄI/O¿ØÖÆÂ룬ֻÄܵõ½×î»ù±¾µÄ´ÅÅ̲ÎÊý¡£»ñÈ¡´ÅÅ̳ö³§ÐÅÏ¢µÄ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;

//IDEÉ豸IOCTLÊä³öÊý¾Ý½á¹¹

typedefstruct_SENDCMDOUTPARAMS

{

DWORDcBufferSize;//»º³åÇø×Ö½ÚÊý

DRIVERSTATUSDriverStatus;//Çý¶¯³ÌÐò·µ»Ø״̬

BYTEbBuffer[1];//ÊäÈ뻺³åÇø(´Ë´¦ÏóÕ÷ÐԵذüº¬1×Ö½Ú)

}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:

1;//1=Ö§³ÖLBA

USHORTDisIORDY:

1;//1=¿É²»Ê¹ÓÃIORDY

USHORTIORDY:

1;//1=Ö§³ÖIORDY

USHORTSoftReset:

1;//1=ÐèÒªATAÈíÆô¶¯

USHORTOverlap:

1;//1=Ö§³ÖÖصþ²Ù×÷

USHORTQueue:

1;//1=Ö§³ÖÃüÁî¶ÓÁÐ

USHORTInlDMA:

1;//1=Ö§³Ö½»²æ´æÈ¡DMA

}wCapabilities;//WORD49:

Ò»°ãÄÜÁ¦

USHORTwReserved1;//WORD50:

±£Áô

USHORTwPIOTiming;//WORD51:

PIOʱÐò

USHORTwDMATiming;//WORD52:

DMAʱÐò

struct{

USHORTCHSNumber:

1;//1=WORD54-58ÓÐЧ

USHORTCycleNumber:

1;//1=WORD64-70ÓÐЧ

USHORTUnltraDMA:

1;//1=WORD88ÓÐЧ

USHORTreserved:

13;

}wFieldValidity;//WORD53:

ºóÐø×Ö¶ÎÓÐЧÐÔ±êÖ¾

USHORTwNumCurCyls;//WORD54:

CHS¿ÉÑ°Ö·µÄÖùÃæÊý

USHORTwNumCurHeads;//WORD55:

CHS¿ÉÑ°Ö·µÄ´ÅÍ·Êý

USHORTwNumCurSectorsPerTrack;//WORD56:

CHS¿ÉѰַÿ´ÅµÀÉÈÇøÊý

USHORTwCurSectorsLow;//WORD57:

CHS¿ÉÑ°Ö·µÄÉÈÇøÊýµÍλ×Ö

USHORTwCurSectorsHigh;//WORD58:

CHS¿ÉÑ°Ö·µÄÉÈÇøÊý¸ßλ×Ö

struct{

USHORTCurNumber:

8;//µ±Ç°Ò»´ÎÐԿɶÁдÉÈÇøÊý

USHORTMulti:

1;//1=ÒÑÑ¡Ôñ¶àÉÈÇø¶Áд

USHORTreserved1:

7;

}wMultSectorStuff;//WORD59:

¶àÉÈÇø¶ÁдÉ趨

ULONGdwTotalSectors;//WORD60-61:

LBA¿ÉÑ°Ö·µÄÉÈÇøÊý

USHORTwSingleWordDMA;//WORD62:

µ¥×Ö½ÚDMAÖ§³ÖÄÜÁ¦

struct{

USHORTMode0:

1;//1=Ö§³Öģʽ0(4.17Mb/s)

USHORTMode1:

1;//1=Ö§³Öģʽ1(13.3Mb/s)

USHORTMode2:

1;//1=Ö§³Öģʽ2(16.7Mb/s)

USHORTReserved1:

5;

USHORTMode0Sel:

1;//1=ÒÑÑ¡Ôñģʽ0

USHORTMode1Sel:

1;//1=ÒÑÑ¡Ôñģʽ1

USHORTMode2Sel:

1;//1=ÒÑÑ¡Ôñģʽ2

USHORTReserved2:

5;

}wMultiWordDMA;//WORD63:

¶à×Ö½ÚDMAÖ§³ÖÄÜÁ¦

struct{

USHORTAdvPOIModes:

8;//Ö§³Ö¸ß¼¶POIģʽÊý

USHORTreserved:

8;

}wPIOCapacity;//WORD64:

¸ß¼¶PIOÖ§³ÖÄÜÁ¦

USHORTwMinMultiWordDMACycle;//WORD65:

¶à×Ö½ÚDMA´«ÊäÖÜÆÚµÄ×îСֵ

USHORTwRecMultiWordDMACycle;//WORD66:

¶à×Ö½ÚDMA´«ÊäÖÜÆڵĽ¨ÒéÖµ

USHORTwMinPIONoFlowCycle;//WORD67:

ÎÞÁ÷¿ØÖÆʱPIO´«ÊäÖÜÆÚµÄ×îСֵ

USHORTwMinPOIFlowCycle;//WORD68:

ÓÐÁ÷¿ØÖÆʱPIO´«ÊäÖÜÆÚµÄ×îСֵ

USHORTwReserved69[11];//WORD69-79:

±£Áô

struct{

USHORTReserved1:

1;

USHORTATA1:

1;//1=Ö§³ÖATA-1

USHORTATA2:

1;//1=Ö§³ÖATA-2

USHORTATA3:

1;//1=Ö§³ÖATA-3

USHORTATA4:

1;//1=Ö§³ÖATA/ATAPI-4

USHORTATA5:

1;//1=Ö§³ÖATA/ATAPI-5

USHORTATA6:

1;//1=Ö§³ÖATA/ATAPI-6

USHORTATA7:

1;//1=Ö§³ÖATA/ATAPI-7

USHORTATA8:

1;//1=Ö§³ÖATA/ATAPI-8

USHORTATA9:

1;//1=Ö§³ÖATA/ATAPI-9

USHORTATA10:

1;//1=Ö§³ÖATA/ATAPI-10

USHORTATA11:

1;//1=Ö§³ÖATA/ATAPI-11

USHORTATA12:

1;//1=Ö§³ÖATA/ATAPI-12

USHORTATA13:

1;//1=Ö§³ÖATA/ATAPI-13

USHORTATA14:

1;//1=Ö§³ÖATA/ATAPI-14

USHORTReserved2:

1;

}wMajorVersion;//WORD80:

Ö÷°æ±¾

USHORTwMinorVersion;//WORD81:

¸±°æ±¾

USHORTwReserved82[6];//WORD82-87:

±£Áô

struct{

USHORTMode0:

1;//1=Ö§³Öģʽ0(16.7Mb/s)

USHORTMode1:

1;//1=Ö§³Öģʽ1(25Mb/s)

USHORTMode2:

1;//1=Ö§³Öģʽ2(33Mb/s)

USHORTMode3:

1;//1=Ö§³Öģʽ3(44Mb/s)

USHORTMode4:

1;//1=Ö§³Öģʽ4(66Mb/s)

USHORTMode5:

1;//1=Ö§³Öģʽ5(100Mb/s)

USHORTMode6:

1;//1=Ö§³Öģʽ6(133Mb/s)

USHORTMode7:

1;//1=Ö§³Öģʽ7(166Mb/s)?

?

?

USHORTMode0Sel:

1;//1=ÒÑÑ¡Ôñģʽ0

USHORTMode1Sel:

1;//1=ÒÑÑ¡Ôñģʽ1

USHORTMode2Sel:

1;//1=ÒÑÑ¡Ôñģʽ2

USHORTMode3Sel:

1;//1=ÒÑÑ¡Ôñģʽ3

USHORTMode4Sel:

1;//1=ÒÑÑ¡Ôñģʽ4

USHORTMode5Sel:

1;//1=ÒÑÑ¡Ôñģʽ5

USHORTMode6Sel:

1;//1=ÒÑÑ¡Ôñģʽ6

USHORTMode7Sel:

1;//1=ÒÑÑ¡Ôñģʽ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µÄ³ÌÐòÀïÕýÊÇÓÉÓÚ¶¨ÒåΪһ¸öULONG×ֶΣ¬µ¼Ö¸ýṹ²»¿ÉÓá£

ÒÔÏÂÊǺËÐÄ´úÂ룺

//´ò¿ªÉ豸

//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;

//pSCIP->irDriveRegs.bSectorCountReg=0;

//pSCIP->irDriveRegs.bSectorNumberReg=0;

//pSCIP->irDriveRegs.bCylLowReg=0;

//pSCIP->irDriveRegs.bCylHighReg=0;

//pSCIP->irDriveRegs.bDriveHeadReg=0;

pSCIP->irDriveRegs.bCommandReg=IDE_ATA_IDENTIFY;

//Ö¸¶¨ÊäÈë/Êä³öÊý¾Ý»º³åÇø´óС

pSCIP->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Çý¶¯·¢¡°IDENTIFYDEVICE¡±ÃüÁ»ñµÃÉ豸ÐÅÏ¢

//hDevice:

É豸¾ä±ú

//pIdInfo:

É豸ÐÅÏ¢½á¹¹Ö¸Õë

BOOLIdentifyDeviceAsScsi(HANDLEhDevice,intnDrive,PIDINFOpIdInfo)

{

PSENDCMDINPARAMSpSCIP;//ÊäÈëÊý¾Ý½á¹¹Ö¸Õë

PSENDCMDOUTPARAMSpSCOP;//Êä³öÊý¾Ý½á¹¹Ö¸Õë

PSRB_IO_CONTROLpSRBIO;//SCSIÊäÈëÊä³öÊý¾Ý½á¹¹Ö¸Õë

DWORDdwOutBytes;//IOCTLÊä³öÊý¾Ý³¤¶È

BOOLbResult;//IOCTL·µ»ØÖµ

//ÉêÇëÊäÈë/Êä³öÊý¾Ý½á¹¹¿Õ¼ä

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1