Abinash Mohanty wrote:
Can anybody tell me how to retreive hard disk interface type without using WMI classes in MFC
Hi Abinash, The MFC classes[^] are a very small subset of the Microsoft Windows API. The answer to your question is that MFC does not have any methods of determining a drive volume bus type. But you can use the IOCTL_STORAGE_QUERY_PROPERTY[^] control code to obtain the STORAGE_BUS_TYPE[^]. Here is an example:#include <winioctl.h> #define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS) STORAGE_BUS_TYPE GetDriveBusType(DWORD dwDrive) { STORAGE_BUS_TYPE sbt = BusTypeUnknown; HANDLE hDrive; TCHAR szDrive[MAX_PATH]; _stprintf(szDrive,_T("\\\\.\\PhysicalDrive%d"), dwDrive); hDrive = CreateFile(szDrive,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0, NULL); if(INVALID_HANDLE_VALUE != hDrive) { DWORD dwSizeBytes; STORAGE_PROPERTY_QUERY q; ZeroMemory(&q,sizeof(STORAGE_PROPERTY_QUERY)); PBYTE pBuf = (PBYTE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(STORAGE_DESCRIPTOR_HEADER)); if(NULL != pBuf) { if(TRUE == DeviceIoControl(hDrive,IOCTL_STORAGE_QUERY_PROPERTY,&q,sizeof(STORAGE_PROPERTY_QUERY),pBuf,sizeof(STORAGE_DESCRIPTOR_HEADER),&dwSizeBytes, NULL)) { STORAGE_DESCRIPTOR_HEADER *pHeader = (STORAGE_DESCRIPTOR_HEADER *)pBuf; dwSizeBytes = pHeader->Size; pBuf = (PBYTE)HeapReAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,pBuf,dwSizeBytes); if(NULL != pBuf) { if(TRUE == DeviceIoControl(hDrive,IOCTL_STORAGE_QUERY_PROPERTY,&q,sizeof(STORAGE_PROPERTY_QUERY),pBuf,dwSizeBytes,&dwSizeBytes, NULL)) { STORAGE_DEVICE_DESCRIPTOR * pDesc = (STORAGE_DEVICE_DESCRIPTOR *)pBuf; sbt = pDesc->BusType; } } } HeapFree(GetProcessHeap(), 0, (LPVOID)pBuf); } } return sbt; }
Best Wis