Как получить имя устройства?

  • Автор темы markil
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

markil

Народ, подскажите, пожалуйста, в чем проблема. Я пытаюсь стандартным образом получить "символическое имя устройства". Вот

точный текст (guid заполняется в defineGuid()).

GUID *guid;

main()
{
HDEVINFO hDevInfo;
SP_DEVICE_INTERFACE_DATA devInfoData;
int i = 0;

defineGuid();

hDevInfo = SetupDiGetClassDevs (guid, NULL, NULL, DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);

devInfoData.cbSize = sizeof(devInfoData);

SetupDiEnumDeviceInterfaces (hDevInfo, NULL, guid, i, &devInfoData);
}

И уже SetupDiEnumDeviceInterfaces не дает ни для какого i результата (при условии, что нужное устройство включено, его GUID я

взял в файле, прилагающемся к драйверу). GetLastError выдает "No more data is available".
 
I

iktomy

Есть у меняодин исходник. Ниже его прилагаю, а разбирайся уж сам.

for( int i = 0; i < 26; i++ )
{
n = ((dr>>i)&0x00000001);
if( n == 1 )
{
dd[0] = char(65+i); dd[1] = ':'; dd[2] = '\\'; dd[3] = 0;
m_info += (CString)dd;
d = GetDriveType( dd );
if( d == DRIVE_UNKNOWN ) m_info += " - UNKNOWN";
if( d == DRIVE_NO_ROOT_DIR ) m_info += " - DRIVE NO ROOT DIR";
if( d == DRIVE_REMOVABLE ) m_info += " - REMOVABLE" ;
if( d == DRIVE_FIXED ) m_info += " - FIXED";
if( d == DRIVE_REMOTE ) m_info += " - REMOTE";
if( d == DRIVE_CDROM ) m_info += " - CDROM";
if( d == DRIVE_RAMDISK ) m_info += " - RAMDISK";

m_info += "\r\n";

char VolumeNameBuffer[100];
char FileSystemNameBuffer[100];
unsigned long VolumeSerialNumber;

BOOL GetVolumeInformationFlag = GetVolumeInformationA(
dd,
VolumeNameBuffer,
100,
&VolumeSerialNumber,
NULL, //&MaximumComponentLength,
NULL, //&FileSystemFlags,
FileSystemNameBuffer,
100
);

if(GetVolumeInformationFlag != 0)
{
m_info += " Volume Name is "; m_info += (CString)VolumeNameBuffer;m_info += "\r\n";
char temp[100];
_ui64toa( (unsigned int)VolumeSerialNumber, temp, 10 );
m_info += " Volume Serial Number is "; m_info += (CString)&temp[0];m_info += "\r\n";
m_info += " File System is "; m_info += (CString)FileSystemNameBuffer;m_info += "\r\n";
}
else m_info += " Not Present (GetVolumeInformation)"; m_info += "\r\n";

DWORD FreeBytesAvailable;
PULARGE_INTEGER TotalNumberOfBytes;
PULARGE_INTEGER TotalNumberOfFreeBytes;

BOOL GetDiskFreeSpaceFlag = GetDiskFreeSpaceEx(
dd, // directory name
(PULARGE_INTEGER)&FreeBytesAvailable, // bytes available to caller
(PULARGE_INTEGER)&TotalNumberOfBytes, // bytes on disk
(PULARGE_INTEGER)&TotalNumberOfFreeBytes // free bytes on disk
);

if(GetDiskFreeSpaceFlag != 0)
{
char temp[100];
m_info += " Total Size Free(MBytes) = ";
_ultoa( (unsigned long)TotalNumberOfFreeBytes/1024/1000, temp, 10 );
m_info += (CString)&temp[0]; m_info += "\r\n";

m_info += " Total Size(MBytes) = ";
_ultoa( (unsigned long)TotalNumberOfBytes/1024/1000 , temp, 10 );
m_info += (CString)&temp[0];m_info += "\r\n";

}
else m_info += " Not Present (GetDiskFreeSpace)"; m_info += "\r\n";

}
}
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:  ТелеграмВконтактеДзенФейсбукТвиттерЮтуб