Функция 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 |