WinNT系统, 我做了个小程序用DeviceIoControl来获取磁盘的物理序列号,用普通磁盘(IDE或者SCSI, XP和VISTA都行)测试没问题,但是用一个RAID 5的磁盘测试, 当用DeviceIoControl发送指令码IOCTL_SCSI_MINIPORT时出错,错误码87,意思是参数错误.
    请教高手如何获取RAID磁盘物理序列号?所用代码如下:char szBuffer[sizeof( SRB_IO_CONTROL ) + SENDIDLENGTH] = { 0 };
SRB_IO_CONTROL* p = ( SRB_IO_CONTROL* )szBuffer;
SENDCMDINPARAMS* pin = ( SENDCMDINPARAMS* )( szBuffer + sizeof( SRB_IO_CONTROL ) );
DWORD dwResult;
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 = iDrive; DeviceIoControl( hScsiDriveIOCTL,
IOCTL_SCSI_MINIPORT, 
szBuffer,
sizeof(SRB_IO_CONTROL) + sizeof(SENDCMDINPARAMS) - 1,
szBuffer,
sizeof( SRB_IO_CONTROL ) + SENDIDLENGTH,
&dwResult,
NULL );    

解决方案 »

  1.   

    RAID5是磁盘阵列,磁盘阵列也有物理序列号?
      

  2.   

    我也想知道。磁盘阵列中的磁盘有物理序列号,用 Everest可以查看的
      

  3.   

    抱歉,各位,这两天有事没时间来看帖。我对硬件没啥了解,而MSDN上DeviceIoControl的那些指令参数我看的头大,找不到头绪;
    用网上搜到的获取硬盘序列号的方法读不到这种磁盘的序列号,现象就是我主贴中说的。
    但是我在CSDN上下载了一个“DiskSerial.exe”的工具,它调用了“DiskSerial.DLL”中的函数,它在RAID5上运行能够返回一个序列号。
    我没有这个工具的代码,所以想知道是怎么实现的,诚求高手指点另外,我用一个可以查询磁盘类型的指令,在RAID5上返回的类型码是8,对应类型RAID
      

  4.   

    这个有难度,关注,只是不明白raid中读序列号是如何一种结构,希望有牛人能解答一下
      

  5.   

    呵呵,好久没来CSDN了;
    工作都换了
    原来这里还有一个没搞定的帖子
    结贴完事
      

  6.   

    不知道everest是如何做到的?他可以把Raid5里的每一块硬盘的序列号都读取出来。