阅读:1642回复:1
请教:如何获取硬盘的总线类型
在启动中,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; } } |
|
|
沙发#
发布于:2011-09-27 14:24
![]() |
|
|