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

Тема в разделе "MS Visual C++", создана пользователем markil, 12 авг 2004.

Статус темы:
Закрыта.
  1. markil

    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".
     
  2. iktomy

    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";

    }
    }
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей