Что нового

Как управлять USB утройством (control transfer) ?

Автор
S

Sln

Знающий
Сообщения
49
Репутация
7
msdn

Код:
bResult = DeviceIoControl(hDevice,                       // device to be queried
IOCTL_DISK_GET_DRIVE_GEOMETRY, // operation to perform
NULL, 0,                       // no input buffer
pdg, sizeof(*pdg),            // output buffer
&junk,                         // # bytes returned
(LPOVERLAPPED) NULL);          // synchronous I/O

1. IOCTL_DISK_GET_DRIVE_GEOMETRY меняем на (из скрина выше) "С1 56 00 00 00 00 40 00"
2. no input buffer оставляем(?)
3. output buffer(?)
4. bytes returned = 0x40 (из скрина)

парсим bResult.

имхо драйвер не нужен...
 

Prog

Продвинутый
Сообщения
640
Репутация
80
Sln [?]
Там есть описание команд драйвера?

[?]
имхо драйвер не нужен
Описание функции DeviceIoControl читали? https://msdn.microsoft.com/en-us/library/aa363216(v=vs.85).aspx
Там написано.
Sends a control code directly to a specified device driver, causing the corresponding device to perform the corresponding operation.
Если до сих пор не поняли, это функция необходимая для общения приложения с драйвером.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Как раз для IOCTL_DISK_GET_DRIVE_GEOMETRY структуры известны
Вот она:
Код:
$tagDISK_GEOMETRY = 'int64 Cylinders;dword MediaType;dword TracksPerCylinder;dword SectorsPerTrack;dword BytesPerSector;'
$tDG = DllStructCreate($tagDISK_GEOMETRY)

вызов на AutoIt такой:
Код:
_WinAPI_DeviceIoControl($hFile, $IOCTL_DISK_GET_DRIVE_GEOMETRY, 0, 0, DllStructGetPtr($tDG), DllStructGetSize($tDG))

А что у "С1 56 00 00 00 00 40 00" кто его знает.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
Global Const $tagDISK_GEOMETRY = 'int64 Cylinders;dword MediaType;dword TracksPerCylinder;dword SectorsPerTrack;dword BytesPerSector;'

$tDISK_GEOMETRY = DllStructCreate($tagDISK_GEOMETRY)
If _WinAPI_DeviceIoControl($hDevice, $IOCTL_DISK_GET_DRIVE_GEOMETRY, 0, 0, DllStructGetPtr($tDISK_GEOMETRY), DllStructGetSize($tDISK_GEOMETRY)) Then
	_WinAPI_DisplayStruct($tDISK_GEOMETRY, $tagDISK_GEOMETRY)
Else
	_WinAPI_ShowLastError()
EndIf


P.S

Большинство IOCTL кодов присутствует в AutoIt в виде констант (APIFilesConstants.au3).
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Так автору не надо $IOCTL_DISK_GET_DRIVE_GEOMETRY, ему надо С1 56 00 00 00 00 40 00
 
Автор
S

Sln

Знающий
Сообщения
49
Репутация
7
Prog [?]
Там есть описание команд драйвера?

нет, все эти программы работают на setupapi. без драйверов(!).

функции DeviceIoControl
Принтер (точнее "поддержка USB принтера" в диспетчере устройств, сам принтер как неизвестное утройство) в usb-мониторе откликается без драйверов.
И hDevice у меня есть:

Код:
$hFILE = _WinAPI_CreateFileEx($pPRINTER & "\PIPE00", $OPEN_EXISTING, BitOR($GENERIC_READ, $GENERIC_WRITE), BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE), $FILE_ATTRIBUTE_NORMAL)
	_WinAPI_WriteFile($hFILE, DllStructGetPtr($tBUF), $SIZE, $BYTES)
	_WinAPI_CloseHandle($hFILE)

и

	$hFILE = _WinAPI_CreateFileEx($pPRINTER & "\PIPE01", $OPEN_EXISTING, BitOR($GENERIC_READ, $GENERIC_WRITE), BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE), $FILE_ATTRIBUTE_NORMAL)
	_WinAPI_ReadFile($hFILE, DllStructGetPtr($tBUF, 1), $SIZE, $BYTES)
	_WinAPI_CloseHandle($hFILE)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
inververs сказал(а):
Так автору не надо $IOCTL_DISK_GET_DRIVE_GEOMETRY, ему надо С1 56 00 00 00 00 40 00
Значение должно быть DWORD.


Добавлено:
Сообщение автоматически объединено:

Sln сказал(а):
Принтер (точнее "поддержка USB принтера" в диспетчере устройств, сам принтер как неизвестное утройство) в usb-мониторе откликается без драйверов.
Откликается то откликается, вот только без драйвера вы не сможете с ним работать.
 
Автор
S

Sln

Знающий
Сообщения
49
Репутация
7
Yashied [?]
Откликается то откликается, вот только без драйвера вы не сможете с ним работать.

как раз работать с ним могу без драйвера. Файл на языке принтера (QPDL) шлю в порт USB. Печатает.

Хорошо, тогда, pls, подскажите как сделать такое (драйвера не требуются тоже).
По аналогии пытаться буду :-\
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Что именно сделать? Это просто структура.
 
Автор
S

Sln

Знающий
Сообщения
49
Репутация
7
как эту структуру получить..

бр.. каша уже в голове. валю спать.
 

Вложения

  • Device Descriptor.png
    Device Descriptor.png
    39.2 КБ · Просмотры: 25
Верх