Поделиться через


Функция ReadPort (winsplp.h)

Функция монитора ReadPort портов считывает данные из порта принтера.

Синтаксис

BOOL ReadPort(
  _In_  HANDLE  hPort,
  _Out_ LPBYTE  pBuffer,
        DWORD   cbBuffer,
  _Out_ LPDWORD pcbRead
);

Параметры

[in] hPort

Дескриптор порта, предоставленный вызывающим абонентом.

[out] pBuffer

Предоставленный вызывающим объектом указатель на буфер для получения данных, считываемых из порта.

cbBuffer

Предоставленный вызывающим абонентом размер pBuffer в байтах.

[out] pcbRead

Предоставленный вызывающим абонентом указатель на расположение для получения числа байтов, успешно считанных из порта.

Возвращаемое значение

Если операция выполнена успешно, функция должна вернуть значение TRUE. В противном случае он должен вернуть значение FALSE.

Комментарии

Языковые мониторы и библиотеки DLL сервера мониторинга портов необходимы для определения ReadPort функции и включения адреса функции в структуру MONITOR2 .

Дескриптор, полученный в качестве аргумента hPort функции, является дескриптором порта, предоставленным функцией OpenPort или OpenPortEx монитора.

Как правило, функция языкового монитора ReadPort вызывает функцию связанного монитора ReadPort портов и возвращает вызывающей объекту полученное содержимое буфера.

Кроме того, языковой монитор может создать отдельный поток, который вызывает функцию монитора ReadPort портов для проверка для получения нежелательных сведений о состоянии. Если такая операция чтения завершается успешно, сведения о состоянии должны быть возвращены в очередь очереди, вызвав SetPort (описано в документации по Microsoft Windows SDK).

Как правило, функция DLL ReadPort сервера мониторинга портов вызывает ReadFile (описанный в документации по Windows SDK) для получения данных из драйвера порта в режиме ядра. Функция просто возвращает данные вызывающей объекту.

Несмотря на то, что и языковые мониторы, и мониторы портов должны определять ReadPort функции и размещать их адреса в MONITOR2 структурах, функция языкового ReadPort монитора никогда не вызывается диспетчером очереди или приложением. Функция предназначена исключительно для внутреннего использования самого языкового монитора.

Например, pjlmon.dll, пример монитора языка, создает отдельный поток, который вызывает свой собственный ReadPort для watch для получения сведений о состоянии незапрашиваемого принтера, а ReadPort функция вызывает функцию монитора ReadPort портов. Когда монитор портов возвращает данные в языковой монитор, языковой монитор анализирует полученные данные и вызывает SetPort (описано в документации по Windows SDK) для отправки сведений о состоянии в очередь очереди очереди.

Функция должна возвращать число успешно прочитанных байтов, поместив его в расположение, на которое указывает pcbRead. Вызывающий объект определяет успешность или сбой операции записи, проверяя ReadPort's возвращаемое значение, а не возвращаемое число байтов. Таким образом, возвращаемое число байтов, равное нулю, не представляет сбой чтения, если функция не возвращает значение FALSE.

Какой-то механизм времени ожидания, реализованный системой или монитором, должен гарантировать, что ReadPort функция возвратит в течение разумного периода времени, чтобы избежать остановки очереди очереди.

Языковой монитор может вызывать подпрограмму монитора ReadPort портов вне пары StartDocPort/EndDocPort . (Такой вызов может быть создан потоком, проверяющий наличие незапрашиваемого состояния.) Однако некоторые мониторы портов могут завершиться ошибкой такого вызова, поэтому для обработки этого сбоя необходимо написать языковой монитор.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть winsplp.h (включая Winsplp.h)
Библиотека NtosKrnl.exe

См. также раздел

GetPrinterDataFromPort

StartDocPort

OpenPortEx

OpenPort

EndDocPort