alwaysrun
驱动小牛
驱动小牛
  • 注册日期2006-06-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1059分
  • 威望752点
  • 贡献值1点
  • 好评度98点
  • 原创分0分
  • 专家分0分
阅读:1520回复:1

请教:如何获取硬盘的总线类型

楼主#
更多 发布于:2011-09-19 11:25
在启动中,attach硬盘分区后,想获取总线类型,总是 出错(有时返回的status也是成功的,单结果不对)。
尝试过在刚刚attach后获取过,还尝试过在枚举目录时获取,都是一样的,代码如下,望大侠指教,谢谢!
PIRP    pNewIrp = NULL;
KEVENT    keWait;
UCHAR    byBuff[sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512] = {0};
NTSTATUS    nStatus;
IO_STATUS_BLOCK    ioStatus;
STORAGE_PROPERTY_QUERY    *pQuery = (STORAGE_PROPERTY_QUERY*)byBuff;
pQuery->PropertyId = StorageDeviceProperty;
pQuery->QueryType = PropertyStandardQuery;
KeInitializeEvent(&keWait, NotificationEvent, FALSE);
pNewIrp = IoBuildDeviceIoControlRequest(IOCTL_STORAGE_QUERY_PROPERTY,
                    pNextDev,    // Attached的盘符设备
                    pQuery,
                    sizeof(STORAGE_PROPERTY_QUERY),
                    byBuff,
                    sizeof(byBuff),
                    TRUE,
                    &keWait,
                    &ioStatus);
if( NULL == pNewIrp )
{
    return BusTypeUnknown;
}

nStatus = IoCallDriver(pNextDev, pNewIrp);
if(STATUS_PENDING == nStatus)
{
    KeWaitForSingleObject(&keWait, Executive, KernelMode, FALSE, NULL);
}
nStatus = ioStatus.Status;

if( NT_SUCCESS(nStatus) )
{
    PSTORAGE_DEVICE_DESCRIPTOR    pDevDesrip = (PSTORAGE_DEVICE_DESCRIPTOR)byBuff;
    {
        if( pDevDesrip->Version == sizeof(STORAGE_DEVICE_DESCRIPTOR) )
            return pDevDesrip->BusType;
    }
}
一颗平常的心!
alwaysrun
驱动小牛
驱动小牛
  • 注册日期2006-06-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1059分
  • 威望752点
  • 贡献值1点
  • 好评度98点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2011-09-27 14:24
期待大牛解答一下
一颗平常的心!
游客

返回顶部