Структура MONITOR (winsplp.h)
Внимание!
Структура MONITOR устарела и поддерживается только для обеспечения совместимости. Новые мониторы печати должны реализовывать MONITOR2 , чтобы их можно было использовать с кластерами серверов печати.
Структура MONITOR содержит указатели на функции, определенные мониторами печати.
Синтаксис
typedef struct _MONITOR {
BOOL( )(LPWSTR pName,DWORD Level,LPBYTE pPorts,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned) *pfnEnumPorts;
BOOL( )(LPWSTR pName,PHANDLE pHandle) *pfnOpenPort;
BOOL()(LPWSTR pPortName,LPWSTR pPrinterName,PHANDLE pHandle,_MONITOR *pMonitor) * pfnOpenPortEx;
BOOL( )(HANDLE hPort,LPWSTR pPrinterName,DWORD JobId,DWORD Level,LPBYTE pDocInfo) *pfnStartDocPort;
BOOL( )(HANDLE hPort,LPBYTE pBuffer,DWORD cbBuf,LPDWORD pcbWritten) *pfnWritePort;
BOOL( )(HANDLE hPort,LPBYTE pBuffer,DWORD cbBuffer,LPDWORD pcbRead) *pfnReadPort;
BOOL( )(HANDLE hPort) *pfnEndDocPort;
BOOL( )(HANDLE hPort) *pfnClosePort;
BOOL( )(LPWSTR pName,HWND hWnd,LPWSTR pMonitorName) *pfnAddPort;
BOOL( )(LPWSTR pName,DWORD Level,LPBYTE lpBuffer,LPWSTR lpMonitorName) *pfnAddPortEx;
BOOL( )(LPWSTR pName,HWND hWnd,LPWSTR pPortName) *pfnConfigurePort;
BOOL( )(LPWSTR pName,HWND hWnd,LPWSTR pPortName) *pfnDeletePort;
BOOL( )(HANDLE hPort,DWORD ControlID,LPWSTR pValueName,LPWSTR lpInBuffer,DWORD cbInBuffer,LPWSTR lpOutBuffer,DWORD cbOutBuffer,LPDWORD lpcbReturned) *pfnGetPrinterDataFromPort;
BOOL( )(HANDLE hPort,LPCOMMTIMEOUTS lpCTO,DWORD reserved) *pfnSetPortTimeOuts;
BOOL( )(LPCWSTR pszObject,ACCESS_MASK GrantedAccess,PHANDLE phXcv) *pfnXcvOpenPort;
DWORD( )(HANDLE hXcv,LPCWSTR pszDataName,PBYTE pInputData,DWORD cbInputData,PBYTE pOutputData,DWORD cbOutputData,PDWORD pcbOutputNeeded) *pfnXcvDataPort;
BOOL( )(HANDLE hXcv) *pfnXcvClosePort;
} MONITOR, *LPMONITOR;
Члены
pfnEnumPorts
Функция EnumPorts сервера мониторинга портов в библиотеке DLL перечисляет порты, поддерживаемые монитором портов.
pfnOpenPort
Указатель на функцию OpenPort монитора печати.
pfnOpenPortEx
Функция языкового монитора OpenPortEx
открывает порт принтера.
pfnStartDocPort
Функция монитора StartDocPort
печати выполняет задачи, необходимые для запуска задания печати на указанном порту.
pfnWritePort
Указатель на функцию WritePort монитора печати.
pfnReadPort
Указатель на функцию ReadPort монитора печати.
pfnEndDocPort
Функция EndDocPort монитора печати выполняет задачи, необходимые для завершения задания печати на указанном порту.
pfnClosePort
Указатель на функцию ClosePort монитора печати.
pfnAddPort
Внимание!
Функция AddPort устарела и не должна использоваться.
AddPort создает порт и добавляет его в список портов, поддерживаемых в настоящее время указанным монитором в среде очереди очереди.
pfnAddPortEx
(Устарело. Должно иметь значение NULL.) Указатель на функцию AddPortEx монитора печати. (Только мониторы портов.)
pfnConfigurePort
Внимание!
Функция ConfigurePort устарела и не должна использоваться. Вместо этого используйте ConfigurePortUI .
ConfigurePort — это функция управления портами, которая настраивает указанный порт.
pfnDeletePort
Внимание!
Функция DeletePort устарела и не должна использоваться.
DeletePort удаляет порт из среды монитора.
pfnGetPrinterDataFromPort
Функция GetPrinterDataFromPort монитора портов получает сведения о состоянии из двунаправленного принтера и возвращает их вызывающему объекту.
pfnSetPortTimeOuts
Функция DLL SetPortTimeOuts
сервера мониторинга портов задает значения времени ожидания порта для открытого порта.
pfnXcvOpenPort
Указатель на функцию XcvOpenPort монитора печати. (Только мониторы портов.)
pfnXcvDataPort
Указатель на функцию XcvDataPort монитора печати. (Только мониторы портов.)
pfnXcvClosePort
Указатель на функцию XcvClosePort монитора печати. (Только мониторы портов.)
Комментарии
В следующих разделах каждый член обратного вызова описывается более подробно.
AddPort
typedef BOOL (WINAPI *pfnAddPort)(
_In_ HANDLE hMonitor,
_In_ LPWSTR pName,
_In_ HWND hWnd,
_In_ LPWSTR pMonitorName
);
Параметры (AddPort)
Monitor [in] (AddPort)
Вызывающий объект предоставил дескриптор экземпляра монитора. Это дескриптор, возвращаемый функцией InitializePrintMonitor2 монитора. (Этот параметр не существует, если монитор печати поддерживает InitializePrintMonitor2 вместо InitializePrintMonitor2.)
pName [in] (AddPort)
Указатель на строку, завершающуюся значением NULL, которая указывает имя сервера, к которому подключен порт. Если pName имеет значение NULL, порт является локальным.
hWnd [in] (AddPort)
Дескриптор родительского окна диалогового окна, в котором будет введено имя порта.
pMonitorName [in] (AddPort)
Указатель на строку, завершающуюся значением NULL, которая указывает монитор, связанный с портом.
Возвращаемое значение (AddPort)
Возвращаемое значение равно TRUE, если функция выполнена успешно, в противном случае — FALSE.
Настройка порта
typedef BOOL (WINAPI *pfnConfigurePort)(
_In_ HANDLE hMonitor,
_In_ LPWSTR pName,
_In_ HWND hWnd,
_In_ LPWSTR pPortName
);
Параметры (ConfigurePort)
hMonitor [in] (ConfigurePort)
Вызывающий объект предоставил дескриптор экземпляра монитора. Это дескриптор, возвращаемый функцией InitializePrintMonitor2 монитора. (Этот параметр не существует, если монитор печати поддерживает InitializePrintMonitor вместо InitializePrintMonitor2.)
pName [in] (ConfigurePort)
Указатель на строку, завершающуюся значением NULL, которая указывает имя сервера, на котором существует данный порт. Если эта строка имеет значение NULL, порт является локальным.
hWnd [in] (ConfigurePort)
Дескриптор родительского окна диалогового окна, в котором будут введены сведения о конфигурации.
pPortName [in] (ConfigurePort)
Указатель на строку, завершающуюся значением NULL, которая указывает имя настраиваемого порта.
Возвращаемое значение (ConfigurePort)
Возвращаемое значение равно TRUE, если функция выполнена успешно.
DeletePort
pfnDeletePort DeletePort;
BOOL WINAPI DeletePort(
_In_ HANDLE hMonitor,
_In_ LPWSTR pName,
_In_ HWND hWnd,
_In_ LPWSTR pPortName
)
Параметры (DeletePort)
hMonitor [in] (DeletePort)
Вызывающий объект предоставил дескриптор экземпляра монитора. Это дескриптор, возвращаемый функцией InitializePrintMonitor2 монитора. (Этот параметр не существует, если монитор печати поддерживает InitializePrintMonitor вместо InitializePrintMonitor2.)
pName [in] (DeletePort)
Указатель на строку, завершающуюся нулевым значением, которая указывает имя сервера, на котором существует порт, который должен быть удален. Если этот параметр имеет значение NULL, порт является локальным.
hWnd [in] (DeletePort)
Дескриптор в родительское окно диалогового окна удаления порта.
pPortName [in] (DeletePort)
Указатель на строку, завершающуюся нулевым значением, которая называет удаляемые порты.
Возвращаемое значение (DeletePort)
Возвращаемое значение равно TRUE, если функция выполнена успешно.
EndDocPort
typedef BOOL ( WINAPI *pfnEndDocPort)(
_In_ HANDLE hPort
);
Параметры (EndDocPort)
hPort [in] (EndDocPort)
Дескриптор порта, предоставленный вызывающим абонентом.
Возвращаемое значение (EndDocPort)
Если операция выполнена успешно, функция должна вернуть значение TRUE. В противном случае он должен вернуть значение FALSE.
EnumPorts
typedef BOOL (WINAPI *pfnEnumPorts)(
_In_ HANDLE hMonitor,
_In_opt_ LPWSTR pName,
_In_ DWORD Level,
_Out_ LPBYTE pPorts,
_In_ DWORD cbBuf,
_Out_ LPDWORD pcbNeeded,
_Out_ LPDWORD pcReturned
);
Параметры (EnumPorts)
hMonitor [in] (EnumPorts)
Вызывающий объект предоставил дескриптор экземпляра монитора. Это дескриптор, возвращаемый функцией InitializePrintMonitor2 монитора. (Этот параметр не существует, если монитор печати поддерживает InitializePrintMonitor вместо InitializePrintMonitor2.)
pName [in, необязательный] (EnumPorts)
Предоставленный вызывающим абонентом указатель на строку, содержащую имя сервера, порты которого должны быть перечислены. Указатель NULL представляет систему, в которой выполняется библиотека DLL сервера мониторинга портов.
Level [in] (EnumPorts)
Предоставленное вызывающим объектом значение, указывающее тип структур, возвращаемых в буфере, на который указывает pPorts.
Возможные значения: 1 (PORT_INFO_1) или 2 (PORT_INFO_2).
pPorts [out] (EnumPorts)
Предоставленный вызывающим объектом указатель на буфер для получения сведений о портах. Возвращаемые сведения должны состоять из массива PORT_INFO_1 или PORT_INFO_2 структур, за которыми следуют строки, на которые указывают члены структуры.
cbBuf [in] (EnumPorts)
Размер буфера, на который указывает pPorts, предоставленный вызывающим объектом ( в байтах).
pcbNeeded [out] (EnumPorts)
Предоставленный вызывающим объектом указатель на расположение для получения размера буфера в байтах, необходимого для хранения всей возвращаемой информации.
pcReturned [out] (EnumPorts)
Предоставленный вызывающим абонентом указатель на расположение для получения числа перечисленных портов.
Возвращаемое значение (EnumPorts)
Если операция выполнена успешно, функция должна вернуть значение TRUE. В противном случае он должен вернуть значение FALSE.
GetPrinterDataFromPort
pfnGetPrinterDataFromPort GetPrinterDataFromPort;
BOOL WINAPI GetPrinterDataFromPort(
_In_ HANDLE hPort,
_In_ DWORD ControlID,
_In_ LPWSTR pValueName,
_In_ LPWSTR lpInBuffer,
_In_ DWORD cbInBuffer,
_Out_ LPWSTR lpOutBuffer,
_In_ DWORD cbOutBuffer,
_Out_ LPDWORD lpcbReturned
)
Параметры (GetPrinterDataFromPort)
hPort [in] (GetPrinterDataFromPort)
Дескриптор порта, предоставленный вызывающим абонентом.
ControlID [in] (GetPrinterDataFromPort)
Код управления вводом-выводом устройства, предоставленный вызывающим абонентом. Значение, равное нулю, указывает, что имя значения предоставлено pValueName.
pValueName [in] (GetPrinterDataFromPort)
Предоставленный вызывающим абонентом указатель на строку, определяющую запрашиваемую информацию. Допустимо, только если ControlID равен нулю.
lpInBuffer [in] (GetPrinterDataFromPort)
Предоставленный вызывающим объектом указатель на буфер, содержащий входные данные. Используется только в том случае, если controlID не равно нулю.
cbInBuffer [in] (GetPrinterDataFromPort)
Предоставленный вызывающим объектом размер буфера в байтах, на который указывает lpInBuffer.
lpOutBuffer [out] (GetPrinterDataFromPort)
Предоставленный вызывающим объектом указатель на буфер для получения запрошенных данных.
cbOutBuffer [in] (GetPrinterDataFromPort)
Предоставленный вызывающим объектом размер буфера в байтах, на который указывает lpOutBuffer.
lpcbReturned [out] (GetPrinterDataFromPort)
Предоставленный вызывающим объектом указатель на расположение для получения количества байтов, записанных в буфер, на который указывает lpOutBuffer.
Возвращаемое значение (GetPrinterDataFromPort)
Если операция выполнена успешно, функция должна вернуть значение TRUE. В противном случае он должен вернуть значение FALSE.
OpenPortEx
pfnOpenPortEx OpenPortEx;
BOOL WINAPI OpenPortEx(
_In_ HANDLE hMonitor,
_In_ HANDLE hMonitorPort,
_In_ LPWSTR pPortName,
_In_ LPWSTR pPrinterName,
_Out_ PHANDLE pHandle,
_In_ struct _MONITOR2 *pMonitor
)
Параметры (OpenPortEx)
hMonitor [in] (OpenPortEx)
Вызывающий объект предоставил дескриптор экземпляра языкового монитора. Это дескриптор, возвращаемый функцией InitializePrintMonitor2 монитора. (Этот параметр не существует, если монитор печати поддерживает InitializePrintMonitor вместо InitializePrintMonitor2.) В среде кластера может быть несколько экземпляров языковых мониторов.
hMonitorPort [in] (OpenPortEx)
Вызывающий объект предоставил дескриптор экземпляра монитора порта. Это дескриптор, возвращаемый функцией InitializePrintMonitor2 монитора. (Этот параметр не существует, если монитор печати поддерживает InitializePrintMonitor вместо InitializePrintMonitor2.) Языковой монитор должен использовать этот дескриптор при вызове функций в структуре MONITOR2 порта.
pPortName [in] (OpenPortEx)
Предоставленный вызывающим элементом указатель на строку, содержащую имя порта, который необходимо открыть.
pPrinterName [in] (OpenPortEx)
Предоставленный вызывающим абонентом указатель на строку, содержащую имя принтера, подключенного к порту.
pHandle [out] (OpenPortEx)
Предоставленный вызывающим абонентом указатель на расположение для получения дескриптора порта.
pMonitor [in] (OpenPortEx)
Предоставленный вызывающим элементом указатель на структуру MONITOR2 , возвращаемую функцией InitializePrintMonitor2 монитора портов.
Возвращаемое значение (OpenPortEx)
Если операция выполнена успешно, функция должна вернуть значение TRUE. В противном случае он должен вернуть значение FALSE.
SetPortTimeOuts
BOOL (WINAPI *pfnSetPortTimeOuts)
(
_In_ HANDLE hPort,
_In_ LPCOMMTIMEOUTS lpCTO,
_In_ DWORD reserved // must be set to 0
);
Параметры (SetPortTimeOuts)
hPort [in] (SetPortTimeOuts)
Дескриптор, предоставленный вызывающим для открытого порта, для которого необходимо задать значения времени ожидания.
lpCTO [in] (SetPortTimeOuts)
Указатель на структуру COMMTIMEOUTS , предоставленный вызывающим абонентом.
reserved [in] (SetPortTimeOuts)
Зарезервировано для последующего использования. Необходимо задать нулевое значение.
Возвращаемое значение (SetPortTimeOuts)
Если операция выполнена успешно, функция должна вернуть значение TRUE. В противном случае он должен вернуть значение FALSE.
StartDocPort
typedef BOOL (WINAPI *pfnStartDocPort)(
_In_ HANDLE hPort,
_In_ LPWSTR pPrinterName,
_In_ DWORD JobId,
_In_ DWORD Level,
_In_ LPBYTE pDocInfo
);
Параметры (StartDocPort)
hPort [in] (StartDocPort)
Дескриптор порта, предоставленный вызывающим абонентом.
pPrinterName [in] (StartDocPort)
Предоставленный вызывающим абонентом указатель на строку, содержащую имя принтера.
JobId [in] (StartDocPort)
Предоставленный вызывающим, идентификатор задания, назначаемый диспетчером очереди.
Level [in] (StartDocPort)
Предоставленное вызывающим абонентом значение, указывающее тип структуры, на которую указывает pDocInfo.
Возможные значения: 1 (DOC_INFO_1) или 2 (DOC_INFO_2).
pDocInfo [in] (StartDocPort)
Указатель на структуру DOC_INFO_1 или DOC_INFO_2 , предоставленный вызывающим абонентом.
Возвращаемое значение (StartDocPort)
Если операция выполнена успешно, функция должна вернуть значение TRUE. В противном случае он должен вернуть значение FALSE.
Примечания
Диспетчер очереди очереди вызывает AddPort , когда получает запрос приложения на добавление порта в среду. Диспетчер очереди очереди перенаправит вызов в монитор именованных портов на именованном сервере.
AddPort позволяет добавлять порт в интерактивном режиме. Монитор должен предложить пользователю ввести имя порта в диалоговом окне, связанном с hWnd. AddPort должен проверить введенное имя порта, вызвав функцию Win32 EnumPorts, чтобы убедиться, что в среду очереди не добавляются повторяющиеся имена портов. Монитор также должен убедиться, что порт поддерживается.
Диспетчер очереди не поддерживает удаленные вызовы AddPort . Следовательно, реализации AddPort могут игнорировать параметры pName и pMonitorName .
Диспетчер очереди очереди вызывает ConfigurePort , чтобы монитор портов смог выполнить настройку портов. ConfigurePort может предложить диалоговое окно для получения от пользователя некоторых или всех необходимых сведений о конфигурации портов.
Диспетчер очереди очереди не поддерживает удаленные вызовы ConfigurePort ; Следовательно, мониторы могут игнорировать параметр pName .
Диспетчер очереди очереди вызывает DeletePort, чтобы монитор портов смог удалить порт из среды монитора. Монитор должен удалить указанный порт из своего состояния. Диспетчер очереди не будет вызывать DeletePort на мониторе, пока открыт порт.
Приложения могут удалять локальные и удаленные порты. В пользовательском интерфейсе принтера отображается окно подтверждения, прежде чем модуль очереди очереди будет вызывать DeletePort, поэтому монитор должен игнорировать параметр hWnd и не отображать другое диалоговое окно.
Языковые мониторы и библиотеки DLL сервера мониторинга портов необходимы для определения функции EndDocPort и включения адреса функции в структуру MONITOR2 .
Дескриптор, полученный в качестве аргумента hPort функции, является дескриптором порта, предоставленным функцией OpenPort или OpenPortEx монитора.
Функция EndDocPort языкового монитора обычно вызывает функцию EndDocPort связанного монитора портов. Он также должен уведомить диспетчер очереди печати, когда устройство печати завершило задание, вызвав SetJob, указав команду JOB_CONTROL_LAST_PAGE_EJECTED. Языковые мониторы для двунаправленных принтеров не должны вызывать SetJob , пока принтер не отправит уведомление о том, что задание действительно завершено.
Функция EndDocPort сервера мониторинга портов dll обычно вызывает функцию CloseHandle , чтобы закрыть дескриптор, полученный ранее путем вызова CreateFile из startDocPort. Он также должен уведомить диспетчер очереди печати, когда устройство печати завершило задание, вызвав SetJob, указав команду JOB_CONTROL_SENT_TO_PRINTER. (Если диспетчер очереди печати взаимодействует с портом через языковой монитор, задание не считается завершенным, пока языковой монитор не отправит JOB_CONTROL_LAST_PAGE_EJECTED.)
Функция EndDocPort должна освободить все ресурсы, выделенные функцией StartDocPort .
Вы можете изменить поведение функции EndDocPort , если пользователь удалил или перезапустил задание печати. Функция может вызывать GetJob и проверка состояние JOB_STATUS_DELETING или JOB_STATUS_RESTART, чтобы узнать, произошло ли одно из этих событий.
Библиотеки DLL сервера мониторинга портов необходимы для определения функции EnumPorts и включения адреса функции в структуру MONITOR2 . Языковые мониторы не экспортируют эту функцию.
Функция EnumPorts предназначена для перечисления портов, поддерживаемых монитором печати. Это порты, которые ранее были указаны для функции AddPortUI или AddPortEx монитора.
Функция EnumPorts должна заполнить буфер, на который указывает pPort , массивом PORT_INFO_1 или PORT_INFO_2 структур. Затем, начиная с расположения памяти после последнего элемента массива, функция должна загрузить все строки, на которые указывают члены структуры массива. Пример того, как это сделать, см. в localmon.dll ( пример монитора портов). Функция также должна возвращать количество предоставленных структур (т. е. количество поддерживаемых портов), поместив это число в расположение, на которое указывает pcReturned.
Вызывающий объект задает размер предоставленного буфера в cbBuf. Если буфер слишком мал, функция должна поместить требуемый размер буфера в расположение, указанное pcbNeeded, вызвать Метод SetLastError , указав ERROR_INSUFFICIENT_BUFFER, и вернуть значение FALSE.
Если Level содержит недопустимый номер уровня, функция должна вызвать SetLastError , указав ERROR_INVALID_LEVEL, и вернуть значение FALSE. Некоторые мониторы портов поддерживают только значение уровня 1.
Монитор портов должен поддерживать локализацию строк, на которые указывают элементы pMonitorName и pDescription структуры PORT_INFO_2. Эти строки должны быть определены в файлах ресурсов и получены путем вызова LoadString.
Элемент fPortType структуры PORT_INFO_2 не используется с операционными системами на основе NT.
Библиотеки DLL сервера языковых мониторов и мониторов портов могут при необходимости определить функцию GetPrinterDataFromPort и включить адрес функции в структуру MONITOR2 .
Функция предназначена для использования с двунаправленными принтерами и может использоваться двумя способами:
В качестве средства запроса языкового монитора для опроса порта принтера, чтобы получить текущее значение сведений о принтере, хранящихся в реестре.
Как средство запроса монитора порта для отправки кода управления вводом-выводом в драйвер порта.
Если функция GetPrinterDataFromPort языкового монитора получает указатель строки в pValueName, она должна вернуть значение в предоставленном выходном буфере. Как правило, строка представляет имя значения реестра, а диспетчер очереди очереди вызывает GetPrinterDataFromPort , когда приложение вызывает функцию GetPrinterData .
В обязанности языкового монитора входит отправка команды на оборудование принтера путем вызова функции WritePort монитора портов и считывания ответа путем вызова ReadPort, чтобы получить необходимое значение. Например, pjlmon.dll, пример языкового монитора, может возвращать значения для имен реестра "Установленная память" и "Доступная память".
После того как очередь очереди вызывает GetPrinterDataFromPort для получения значения реестра, он обновляет реестр новым значением.
Как правило, мониторы портов не поддерживают вызовы GetPrinterDataFromPort , которые содержат строковый указатель в pValueName.
Если функция GetPrinterDataFromPort языкового монитора получает ненулевой код элемента управления ввода-вывода в ControlID, она должна просто вызвать функцию GetPrinterDataFromPort связанного монитора портов и вернуть результат. В справочнике по драйверам режима ядра перечислены коды элементов управления вводом-выводом для параллельных и последовательных портов.
Когда функция GetPrinterDataFromPort монитора портов получает ненулевой код элемента управления ввода-вывода в ControlID, она должна вызвать DeviceIOControl , чтобы передать код управления драйверу порта в режиме ядра. Значения параметров lpInBuffer, cbInBuffer, lpOutBuffer, cbOutBuffer и lpcbReturned также должны передаваться в DeviceIOControl.
Языковые мониторы необходимы для определения OpenPortEx
функции и включения ее адреса в структуру MONITOR2 . Функция OpenPortEx
вызывается диспетчером очереди печати при подключении очереди печати к порту.
Основная OpenPortEx
цель функции — возврат дескриптора порта, который вызывающий объект может использовать в качестве входного аргумента для последующих вызовов функций StartDocPort, WritePort, ReadPort, EndDocPort и GetPrinterDataFromPort языкового монитора . Так как языковой монитор обычно реализует эти функции путем вызова эквивалентных функций в связанном мониторе портов, языковой монитор обычно получает дескриптор порта, вызывая функцию OpenPort монитора портов. Дополнительные сведения см. в разделе Взаимодействие с монитором языков и портов.
Параметр OpenPortEx
pMonitor функции является указателем на структуру MONITOR2 монитора портов. Эта структура содержит указатели на вызываемые функции монитора портов. Функция OpenPortEx
должна проверка структуру, чтобы убедиться, что все необходимые указатели функций не имеют значения NULL. Если структура является допустимой, функция должна скопировать ее в локальное хранилище. В противном случае OpenPortEx
вызовет SetLastError, указав ERROR_INVALID_PRINT_MONITOR, и возвращает значение FALSE.
Функции монитора печати, принимаюющие дескриптор порта в качестве входных данных, также не принимают дескриптор монитора. OpenPortEx
Поэтому функция должна хранить полученный дескриптор монитора в расположении, на которое может ссылаться дескриптор порта. Это позволяет функциям, принимаюющим дескриптор порта, ссылаться на дескриптор монитора.
Функция DLL SetPortTimeOuts
сервера мониторинга портов позволяет языковому монитору указывать значения времени ожидания порта для открытого порта. Функция является необязательной и должна предоставляться только в том случае, если монитор портов управляет портом, который позволяет изменять значения времени ожидания порта. Если функция определена, ее адрес должен быть включен в структуру MONITOR2 .
Функция вызывается pjlmon.dll, примером языкового монитора, и вы можете написать настраиваемый языковой монитор, который вызывает ее. Очередь печати печати не вызывает SetPortTimeOuts
.
Монитор портов должен инициализировать значения времени ожидания порта из функции OpenPort .
Языковые мониторы и библиотеки DLL сервера мониторинга портов необходимы для определения StartDocPort
функции и включения адреса функции в структуру MONITOR2 .
Дескриптор, полученный в качестве аргумента hPort функции, является дескриптором порта, предоставленным функцией OpenPort или OpenPortEx монитора.
Функция языкового монитора StartDocPort
обычно вызывает функцию связанного монитора StartDocPort
портов.
Функция DLL StartDocPort
сервера мониторинга портов обычно вызывает функцию CreateFile , чтобы создать подключение к драйверу порта в режиме ядра.
При необходимости монитор портов должен запретить другим процессам использовать указанный порт до вызова EndDocPort . Например, монитор портов для COM-порта должен убедиться, что во время отправки данных принтера на порт в другое приложение не предполагает, что порт подключен к определенному устройству связи, а затем пытается связаться с этим устройством. Это предупреждающее примечание не применяется к локальному поставщику печати, что гарантирует, что он никогда не вызывает StartDocPort
дважды подряд без промежуточного вызова EndDocPort, но применяется к поставщикам печати, которые не дают этой гарантии.
Требования
Требование | Значение |
---|---|
Заголовок | winsplp.h (включая Winsplp.h) |