Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Аппаратное обеспечение -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 148

Интерфейсы USB. Практика использования и программирования - Агуров П.В.

Агуров П.В. Интерфейсы USB. Практика использования и программирования — БВХ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interfeysusbpraktikaispolzovaniya2004.djvu
Предыдущая << 1 .. 142 143 144 145 146 147 < 148 > 149 150 151 152 153 154 .. 168 >> Следующая

а вызов GetLastError вернет error_insufficient_buffer. Значение
lpBytesRetn в этом случае будет равно 0. Некоторые драйверы, если буфер
мал для принятия полного пакета данных, возвращают только часть данных. В
этом случае GetLastError возвращает значение error_more_data, a
lpBytesRetn равно числу полученных байтов. Приложение должно снова
вызвать DeviceloControl с теми же параметрами, указав новый стартовый
адрес.
Если lpOverlapped равно null, то lpByteRetn не должно быть null. Даже
если функция не возвращает данные и lpOutBuffer равно null, вызов
Глава 16. Базовые функции Windows
487
DeviceloControl будет использовать lpBytesRetn. Однако после таких
операций значение lpBytesRetn бессмысленно.
Если lpOverlapped Не рЭВНО NULL, ТО lpByteRetn МОЖеТ бЫТЬ NULL. ЕСЛИ этот
параметр не null и операция возвращает данные, то lpBytesRetn не имеет
смысла, пока вызванная асинхронная операция не завершится. Для получения
результата и числа возвращенных байтов используется вызов
GetOveriappedResuit. Если hDevice связан с портом ввода/вывода, то
получить число возвращенных байтов можно с помощью функции
GetQueuedCompletionStatus.
Если поле lpOverlapped не null, то оно должно содержать указатель на
структуру overlapped. Если hDevice был открыт без использования флага
file_flag_overlapped, то этот параметр будет игнорироваться. Иначе
операция будет расцениваться как асинхронная. Структура lpOverlapped в
этом случае должна содержать правильный дескриптор объекта события, иначе
функция завершится с непредсказуемой ошибкой.
Для асинхронных операций функция DeviceloControl завершается сразу же, а
сигнальный объект-событие будет сигнализировать о завершении операции. В
синхронном режиме функция не завершится, пока не завершится операция, или
завершится по ошибке.
Важно отметить, что в Windows 95/98/МЕ эту функцию можно применять только
к дескрипторам виртуальных драйверов. Например, для открытия системного
VxD-драйвера надо передавать в функцию CreateFile имя \\.\vwin32.
16.9.1. Возвращаемое значение
При успешном выполнении функция DeviceloControl возвращает ненулевое
значение. В случае ошибки вернет 0, а вызов GetLastError вернет код
ошибки.
16.10. Функция QueryDosDevice: получение имени устройства по его DOS-
имени
Функция QueryDosDevice возвращает информацию о DOS-имени устройства.
Функция может получить текущее значение NT-имени для данного DOS-имени
или вернуть список всех DOS-имен системы.
Формат заголовка на языке С имеет вид:
DWORD QueryDosDevice(
LPCTSTR pName, // DOS-имя устройства
LPTSTR pResult, // буфер для результата
488
Часть V. Справочник
DWORD dwMax, // размер буфера pResult
) ;
Формат заголовка на языке Delphi имеет вид:
function QueryDosDevice(
lpDeviceName : PChar; // DOS-имя устройства
lpTargetPath : PChar; // буфер для результата
ucchMax : DWORD // размер буфера pResult
): DWORD;
Первый параметр передает DOS-имя устройства, например, СОМ1 или С:. В
этом случае в буфер pResult будет записано внутреннее имя устройства.
Если же pName нулевой, то в буфер будут записаны все DOS-имена,
зарегистрированные в системе. Каждое имя - строка, завершающаяся нуль-
символом. Признак завершения таблицы имен - двойной нуль-символ (т. е.
пустая строка).
Второй параметр передает буфер для сохранения результата. Размер буфера
передается в параметре dwMax. Если размер буфера мал, то результат
выполнения зависит от версии операционной системы (см. далее).
при успешном выполнении функция QueryDosDevice ВОЗВрЭщает ЧИСЛО символов,
сохраненных в буфере. В случае ошибки вернет 0, а вызов GetLastError
вернет код ошибки.
Если буфер имеет недостаточный размер, функция вернет 0, а вызов
GetLastError вернет КОД ERROR_INSUFFICIENT_BUFFER. В Windows NT/2000 если
буфер мал, функция запишет в буфер столько данных, на сколько хватит его
объема.
16.10.2. Пример вызова
Листинг 16.14 показывает получение списка всех имен в системе с помощью
вызова QueryDosDevice.
Листинг 16.14. Пример вызова функции QueryDosDevice
16.10.1. Возвращаемое значение
(Получение всех имен устройства}
procedure TForml.btnGetListClick(Sender: TObject);
var BufSize : Cardinal; P, PName : Pointer; SName : String;
begin
Глава 16. Базовые функции Windows
489
(Очищаем предыдущий список}
IbNameList.Items.Clear;
(Размер буфера}
BufSize:= 10240;
{Распределяем память для буфера}
GetMem(P, BufSize);
(Запрашиваем список имен}
If QueryDosDevice(nil, Р, BufSize) <> 0 then begin (Цикл по всем
именам...}
PName:= Р;
While (True) do begin SName:= StrPas(PName);
If SName = '' then Break;
(Добавляем в список}
IbNameList.Items.Add(SName);
(Переход к следующему устройству}
(Сдвигаем указатель на следующую строку}
PName: = Pointer(Longint(PName) + Length(SName)+1);
End;
End;
(Освобождаем буфер}
FreeMem(P); end;
16.11. Функция DefineDosDevice: операции с DOS-именем устройства
Функция DefineDosDevice определяет, переопределяет или удаляет DOS-имя из
системы. Выполняемая операция зависит от параметра dwFiags. Его возможные
Предыдущая << 1 .. 142 143 144 145 146 147 < 148 > 149 150 151 152 153 154 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.