阅读:4827回复:9
请问如何获取usb口移动硬盘的序列号大家好,我在做一个程序,获取U盘和移动硬盘的序列号,目前获取识别为可移动设备的U盘成功,而不能获取识别为硬盘的U盘和移动硬盘的序列号。 请问有没有办法获取?按照读硬盘的方法好像也不行。 谢谢! |
|
沙发#
发布于:2008-01-15 19:26
我又用SCSI_PASS_THROUGH_DIRECT发送SCSIOP_INQUIRY命令也不行,得到好像只有名称一类的信息,请问各位应该怎么发scsi命令呢?
|
|
板凳#
发布于:2008-01-15 10:01
我是按照disk32写的,是不是写的不对,代码如下:
sprintf (driveName, "\\\\.\\Scsi%d:", controller); // Windows NT, Windows 2000, any rights should do hScsiDriveIOCTL = CreateFile (driveName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); // if (hScsiDriveIOCTL == INVALID_HANDLE_VALUE) // printf ("Unable to open SCSI controller %d, error code: 0x%lX\n", // controller, GetLastError ()); if (hScsiDriveIOCTL != INVALID_HANDLE_VALUE) { printf ("\\\\.\\Scsi%d:\n", controller); int drive = 0; for (drive = 0; drive < 2; drive++) { char buffer [sizeof (SRB_IO_CONTROL) + SENDIDLENGTH]; SRB_IO_CONTROL *p = (SRB_IO_CONTROL *) buffer; SENDCMDINPARAMS *pin = (SENDCMDINPARAMS *) (buffer + sizeof (SRB_IO_CONTROL)); DWORD dummy; memset (buffer, 0, sizeof (buffer)); p -> HeaderLength = sizeof (SRB_IO_CONTROL); p -> Timeout = 10000; p -> Length = SENDIDLENGTH; p -> ControlCode = IOCTL_SCSI_MINIPORT_IDENTIFY; strncpy ((char *) p -> Signature, "SCSIDISK", 8); pin -> irDriveRegs.bCommandReg = IDE_ATA_IDENTIFY; pin -> bDriveNumber = drive; if (DeviceIoControl (hScsiDriveIOCTL, IOCTL_SCSI_MINIPORT, buffer, sizeof (SRB_IO_CONTROL) + sizeof (SENDCMDINPARAMS) - 1, buffer, sizeof (SRB_IO_CONTROL) + SENDIDLENGTH, &dummy, NULL)) { printf ("\\\\.\\Scsi%d: IOCTL_SCSI_MINIPORT success\n", controller); SENDCMDOUTPARAMS *pOut = (SENDCMDOUTPARAMS *) (buffer + sizeof (SRB_IO_CONTROL)); IDSECTOR *pId = (IDSECTOR *) (pOut -> bBuffer); if (pId -> sModelNumber [0]) { DWORD diskdata [256]; int ijk = 0; USHORT *pIdSector = (USHORT *) pId; for (ijk = 0; ijk < 256; ijk++) diskdata [ijk] = pIdSector [ijk]; PrintIdeInfo (controller * 2 + drive, diskdata); done = TRUE; } } } CloseHandle (hScsiDriveIOCTL); } |
|
地板#
发布于:2008-01-14 22:21
谢谢
IOCTL_SCSI_MINIPORT命令我试过,不行 请问是哪个命令? |
|
地下室#
发布于:2008-01-14 21:23
可以给usb口移动硬盘里面的ide硬盘发送SCSI命令,象普通U盘那样
|
|
|
5楼#
发布于:2008-01-14 20:07
有人知道吗?要写驱动吗?
|
|
6楼#
发布于:2008-01-13 21:30
请问怎样给usb口移动硬盘里面的ide硬盘 发送 ide的命令?谢谢
|
|
7楼#
发布于:2008-01-13 20:48
这是我查的资料,好险读usb硬盘不行:
IDENTIFY DEVICE专门用于固定硬盘,而IDENTIFY PACKET DEVICE用于可移动存储设备如CDROM、CF、MO、ZIP、TAPE等。因为驱动程序的原因,实际上用本例的方法,不管是IDENTIFY DEVICE也好,IDENTIFY PACKET DEVICE也好,获取可移动存储设备的详细信息,一般是做不到的。而且除了IDE硬盘,对SCSI、USB等接口的硬盘也不起作用。除非厂商提供的驱动支持这样的功能。 |
|
8楼#
发布于:2008-01-13 20:42
谢谢,请问具体发哪个命令,我用DeviceIoControl发DFP_RECEIVE_DRIVE_DATA得不到usb口移动硬盘的,只能得到固定硬盘的
引用第1楼mzyongabc于2008-01-11 16:13发表的 : |
|
9楼#
发布于:2008-01-11 16:13
用IDENTIFY DEVICE命令获取数据,在获取的数据中第20-39为序列号
|
|