Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2016, 17:55   #1
finix770
Новичок
Джуниор
 
Регистрация: 05.05.2016
Сообщений: 1
По умолчанию How to use deviceiocontrol function properly

Я попробовал все места, на английском языке, никто не знал, почему этот ответ, в России лучших программистов в мире, вы моя последняя надежда

This is my code:

Code:

Код:
HANDLE HandelUsb= CreateFile(L"\\\\.\\G:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (HandelUsb == INVALID_HANDLE_VALUE)
{
    printf("Terminal failure: Unable to open usb ERROR CODE:0x%x\n", GetLastError());
    return 1;
}

DISK_GEOMETRY d = { 0 };
DWORD dwReturned = 0;

int gs =DeviceIoControl(HandelUsb, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &d, sizeof(DISK_GEOMETRY),&dwReturned, NULL);
printf("%d\n", gs);

if (d.MediaType == RemovableMedia)
{
    DWORD dwReturned2 = 0;
    MEDIA_SERIAL_NUMBER_DATA data={ 0 };
    if (DeviceIoControl(HandelUsb, IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER, NULL, 0, &data,sizeof(MEDIA_SERIAL_NUMBER_DATA), &dwReturned2, NULL)) {
            printf("SerialNumberLength %d\nResult %d\nReserved[2] %s\nSerialNumberData[1] %s ", data.SerialNumberLength, data.Result, data.Reserved, data.SerialNumberData);
    }
    else {
            printf("faild to get serial number ERROR CODE:0x%x\n", GetLastError());

    }
}

CloseHandle(HandelUsb);
return 0;
Everything works well except for the function Code:

Код:
DeviceIoControl(HandelUsb, IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER, NULL, 0, &data,sizeof(MEDIA_SERIAL_NUMBER_DATA), &dwReturned2, NULL)
It always fails (returns a value of 0), GetLastError returns the value 0X1 (problem function).

Maybe someone here can show me what I'm missing here?

Following the comment of @IInspectable(на другом форуме) ,i changed the code to it:

Код:
    //volume handle to device handle
VOLUME_DISK_EXTENTS volumeToDevice = { 0 };
DWORD Returned = 0;
DeviceIoControl(HandelToUsb,IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,NULL,0,&volumeToDevice,sizeof(VOLUME_DISK_EXTENTS),&Returned,NULL);


WCHAR volume[150] ;
swprintf_s(volume, L"\\\\.\\PhysicalDrive%d", volumeToDevice.Extents[0].DiskNumber);
wprintf(L"%s\n", volume);

//handle to phisicalDrive
HANDLE HandelUsb = CreateFile(volume, 0, FILE_SHARE_READ |FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
DWORD dwReturned2 = 0;
    MEDIA_SERIAL_NUMBER_DATA data={ 0 };
    if (DeviceIoControl(HandelUsb, IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER, NULL, 0, &data,sizeof(MEDIA_SERIAL_NUMBER_DATA), &dwReturned2, NULL)) {
            printf("SerialNumberLength %d\nResult %d\nReserved[2] %s\nSerialNumberData[1] %s ", data.SerialNumberLength, data.Result, data.Reserved, data.SerialNumberData);
    }
    else {
            printf("faild to get serial number ERROR CODE:0x%x\n", GetLastError());

    }
I still get a failure 0X1 on function

DeviceIoControl (Handel Usb,
Код:
IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER, NULL, 0, & data, sizeof (MEDIA_SERIAL_NUMBER_DATA), & dwReturned2, NULL)
I ran Windus 7
i tried to Change the permissions function CreateFile (Add GENERIC_EXECUTE , replace to GENERIC_ALL add FILE_ATTRIBUTE_NORMAL ), play with the parameters of the DeviceIoControl.
I tried 7 different USB devices, the world got the same result.

Последний раз редактировалось finix770; 05.05.2016 в 18:01.
finix770 вне форума Ответить с цитированием
Старый 05.05.2016, 19:21   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А цель в чем?
Для получения серийного номера и другой инфы я обычно WMI использовал (Win32_DiskDrive и т.п.)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
function in c++ kewa Помощь студентам 1 11.02.2013 22:37
Функция DeviceIoControl one_awful_sing C++ Builder 0 12.04.2012 19:27
Ошибка при подключении к MySQL: DBX Error: Driver could not be properly... SERG1990 БД в Delphi 7 20.03.2012 13:12
DeviceIOControl в user-mode? chechestor Win Api 2 22.12.2010 11:51
DeviceIOcontrol и проблемы с ним. JustKurt Win Api 4 12.07.2010 22:32