MONITOR-Struktur (winsplp.h)
Vorsicht
Die MONITOR Struktur ist veraltet und wird nur aus Kompatibilitätsgründen unterstützt. Neue Druckmonitore sollten MONITOR2 implementieren, damit sie mit Druckserverclustern verwendet werden können.
Die MONITOR- Struktur enthält Zeiger auf die von Druckmonitoren definierten Funktionen.
Syntax
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;
Angehörige
pfnEnumPorts
Die EnumPorts-Funktion einer Portmonitor-SERVER-DLL zählt die ports auf, die der Portmonitor unterstützt.
pfnOpenPort
Zeiger auf die OpenPort-Funktion des Druckmonitors.
pfnOpenPortEx
Die OpenPortEx
-Funktion eines Sprachmonitors öffnet einen Druckeranschluss.
pfnStartDocPort
Die StartDocPort
-Funktion eines Druckmonitors führt die erforderlichen Aufgaben aus, um einen Druckauftrag am angegebenen Port zu starten.
pfnWritePort
Zeiger auf die WritePort--Funktion des Druckmonitors.
pfnReadPort
Zeiger auf die ReadPort-funktion des Druckmonitors.
pfnEndDocPort
Die EndDocPort-funktion eines Druckmonitors führt die aufgaben aus, die zum Beenden eines Druckauftrags am angegebenen Port erforderlich sind.
pfnClosePort
Zeiger auf die ClosePort-Funktion des Druckmonitors.
pfnAddPort
Vorsicht
Die AddPort--Funktion ist veraltet und sollte nicht verwendet werden.
AddPort erstellt einen Port und fügt ihn zur Liste der Ports hinzu, die derzeit vom angegebenen Monitor in der Spoolerumgebung unterstützt werden.
pfnAddPortEx
(Veraltet. Muss NULL-sein.) Zeiger auf die AddPortEx--Funktion des Druckmonitors. (Portmonitore nur.)
pfnConfigurePort
Vorsicht
Die ConfigurePort--Funktion ist veraltet und sollte nicht verwendet werden. Verwenden Sie stattdessen ConfigurePortUI-.
ConfigurePort- ist eine Portverwaltungsfunktion, die den angegebenen Port konfiguriert.
pfnDeletePort
Vorsicht
Die DeletePort- Funktion ist veraltet und sollte nicht verwendet werden.
DeletePort einen Port aus der Umgebung des Monitors löscht.
pfnGetPrinterDataFromPort
Die GetPrinterDataFromPort Funktion eines Portmonitors ruft Statusinformationen von einem bidirektionalen Drucker ab und gibt ihn an den Aufrufer zurück.
pfnSetPortTimeOuts
Die SetPortTimeOuts
-Funktion eines Portmonitormonitors legt Porttimeoutwerte für einen offenen Port fest.
pfnXcvOpenPort
Zeiger auf die XcvOpenPort--Funktion des Druckmonitors. (Portmonitore nur.)
pfnXcvDataPort
Zeiger auf die XcvDataPort--Funktion des Druckmonitors. (Portmonitore nur.)
pfnXcvClosePort
Zeiger auf die XcvClosePort--Funktion des Druckmonitors. (Portmonitore nur.)
Bemerkungen
In den folgenden Abschnitten werden die einzelnen Rückrufmitglieder ausführlicher beschrieben.
AddPort
typedef BOOL (WINAPI *pfnAddPort)(
_In_ HANDLE hMonitor,
_In_ LPWSTR pName,
_In_ HWND hWnd,
_In_ LPWSTR pMonitorName
);
Parameter (AddPort)
Monitor [in] (AddPort)
Der vom Anrufer bereitgestellte Monitorinstanzhandle. Dies ist das Handle, das von der InitializePrintMonitor2-Funktion des Monitors zurückgegeben wird. (Dieser Parameter ist nicht vorhanden, wenn der Druckmonitor InitializePrintMonitor2 anstelle von InitializePrintMonitor2 unterstützt.)
pName [in] (AddPort)
Zeigen Sie auf eine mit Null beendete Zeichenfolge, die den Namen des Servers angibt, mit dem der Port verbunden ist. Wenn pName NULL ist, ist der Port lokal.
hWnd [in] (AddPort)
Behandeln Sie das übergeordnete Fenster des Dialogfelds, in das der Portname eingegeben wird.
pMonitorName [in] (AddPort)
Zeiger auf eine mit Null beendete Zeichenfolge, die den dem Port zugeordneten Monitor angibt.
Rückgabewert (AddPort)
Der Rückgabewert ist TRUE, wenn die Funktion erfolgreich ist, andernfalls FALSE.
ConfigurePort
typedef BOOL (WINAPI *pfnConfigurePort)(
_In_ HANDLE hMonitor,
_In_ LPWSTR pName,
_In_ HWND hWnd,
_In_ LPWSTR pPortName
);
Parameter (ConfigurePort)
hMonitor [in] (ConfigurePort)
Der vom Anrufer bereitgestellte Monitorinstanzhandle. Dies ist das Handle, das von der InitializePrintMonitor2-Funktion des Monitors zurückgegeben wird. (Dieser Parameter ist nicht vorhanden, wenn der Druckmonitor InitializePrintMonitor anstelle von InitializePrintMonitor2 unterstützt.)
pName [in] (ConfigurePort)
Zeigen Sie auf eine mit Null beendete Zeichenfolge, die den Namen des Servers angibt, auf dem der angegebene Port vorhanden ist. Wenn diese Zeichenfolge NULL ist, ist der Port lokal.
hWnd [in] (ConfigurePort)
Behandeln Sie das übergeordnete Fenster des Dialogfelds, in dem die Konfigurationsinformationen eingegeben werden.
pPortName [in] (ConfigurePort)
Zeigen Sie auf eine mit Null beendete Zeichenfolge, die den Namen des zu konfigurierenden Ports angibt.
Rückgabewert (ConfigurePort)
Der Rückgabewert ist TRUE, wenn die Funktion erfolgreich ist.
DeletePort
pfnDeletePort DeletePort;
BOOL WINAPI DeletePort(
_In_ HANDLE hMonitor,
_In_ LPWSTR pName,
_In_ HWND hWnd,
_In_ LPWSTR pPortName
)
Parameter (DeletePort)
hMonitor [in] (DeletePort)
Der vom Anrufer bereitgestellte Monitorinstanzhandle. Dies ist das Handle, das von der InitializePrintMonitor2-Funktion des Monitors zurückgegeben wird. (Dieser Parameter ist nicht vorhanden, wenn der Druckmonitor InitializePrintMonitor anstelle von InitializePrintMonitor2 unterstützt.)
pName [in] (DeletePort)
Zeigen Sie auf eine mit Null beendete Zeichenfolge, die den Namen des Servers angibt, auf dem der zu löschende Port vorhanden ist. Wenn dieser Parameter NULL ist, ist der Port lokal.
hWnd [in] (DeletePort)
Behandeln des übergeordneten Fensters des Dialogfelds zum Löschen des Ports.
pPortName [in] (DeletePort)
Zeigen Sie auf eine mit Null beendete Zeichenfolge, die den zu löschenden Port benennt.
Rückgabewert (DeletePort)
Der Rückgabewert ist TRUE, wenn die Funktion erfolgreich ist.
EndDocPort
typedef BOOL ( WINAPI *pfnEndDocPort)(
_In_ HANDLE hPort
);
Parameter (EndDocPort)
hPort [in] (EndDocPort)
Vom Anrufer bereitgestellter Porthandle.
Rückgabewert (EndDocPort)
Wenn der Vorgang erfolgreich ist, sollte die Funktion WAHR zurückgeben. Andernfalls sollte FALSE zurückgegeben werden.
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
);
Parameter (EnumPorts)
hMonitor [in] (EnumPorts)
Der vom Anrufer bereitgestellte Monitorinstanzhandle. Dies ist das Handle, das von der InitializePrintMonitor2-Funktion des Monitors zurückgegeben wird. (Dieser Parameter ist nicht vorhanden, wenn der Druckmonitor InitializePrintMonitor anstelle von InitializePrintMonitor2 unterstützt.)
pName [in, optional] (EnumPorts)
Vom Aufrufer bereitgestellter Zeiger auf eine Zeichenfolge, die den Namen des Servers enthält, dessen Ports aufgezählt werden sollen. Ein NULL-Zeiger stellt das System dar, auf dem die Server-DLL des Portmonitors ausgeführt wird.
Ebene [in] (EnumPorts)
Vom Aufrufer bereitgestellter Wert, der den Typ der im Puffer zurückgegebenen Strukturen angibt, auf die von pPorts verwiesen wird.
Mögliche Werte sind 1 (PORT_INFO_1) oder 2 (PORT_INFO_2).
pPorts [out] (EnumPorts)
Vom Aufrufer bereitgestellter Zeiger auf einen Puffer zum Empfangen von Portinformationen. Zurückgegebene Informationen müssen aus einem Array von PORT_INFO_1- oder PORT_INFO_2 Strukturen bestehen, gefolgt von den Zeichenfolgen, auf die durch Strukturmember verwiesen wird.
cbBuf [in] (EnumPorts)
Vom Aufrufer bereitgestellte Größe (in Bytes) des Puffers, auf den pPorts verweist.
pcbNeededed [out] (EnumPorts)
Vom Aufrufer bereitgestellter Zeiger auf einen Speicherort, um die Puffergröße in Bytes zu empfangen, die erforderlich ist, um alle zurückgegebenen Informationen zu enthalten.
pcReturned [out] (EnumPorts)
Vom Anrufer bereitgestellter Zeiger an einen Ort, an dem die nummerierten Ports empfangen werden.
Rückgabewert (EnumPorts)
Wenn der Vorgang erfolgreich ist, sollte die Funktion WAHR zurückgeben. Andernfalls sollte FALSE zurückgegeben werden.
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
)
Parameters (GetPrinterDataFromPort)
hPort [in] (GetPrinterDataFromPort)
Vom Anrufer bereitgestellter Porthandle.
ControlID [in] (GetPrinterDataFromPort)
Vom Anrufer bereitgestellter Geräte-E/A-Steuerungscode. Ein Wert von Null gibt an, dass ein Wertname von pValueName angegeben wird.
pValueName [in] (GetPrinterDataFromPort)
Vom Aufrufer bereitgestellter Zeiger auf eine Zeichenfolge, die die angeforderten Informationen identifiziert. Nur gültig, wenn ControlID null ist.
lpInBuffer [in] (GetPrinterDataFromPort)
Vom Aufrufer bereitgestellter Zeiger auf einen Puffer, der Eingabedaten enthält. Wird nur verwendet, wenn ControlID nicht null ist.
cbInBuffer [in] (GetPrinterDataFromPort)
Vom Aufrufer bereitgestellte Größe des Puffers in Bytes, auf den lpInBuffer verweist.
lpOutBuffer [out] (GetPrinterDataFromPort)
Vom Aufrufer bereitgestellter Zeiger auf einen Puffer, um die angeforderten Daten zu empfangen.
cbOutBuffer [in] (GetPrinterDataFromPort)
Vom Aufrufer bereitgestellte Größe des Puffers in Bytes, auf den lpOutBuffer verweist.
lpcbReturned [out] (GetPrinterDataFromPort)
Vom Aufrufer bereitgestellter Zeiger auf eine Position, um die Anzahl der in den Puffer geschriebenen Bytes zu empfangen, auf die lpOutBuffer verweist.
Rückgabewert (GetPrinterDataFromPort)
Wenn der Vorgang erfolgreich ist, sollte die Funktion WAHR zurückgeben. Andernfalls sollte FALSE zurückgegeben werden.
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
)
Parameters (OpenPortEx)
hMonitor [in] (OpenPortEx)
Der vom Anrufer bereitgestellte Sprachüberwachungsinstanzhandle. Dies ist das Handle, das von der InitializePrintMonitor2-Funktion des Monitors zurückgegeben wird. (Dieser Parameter ist nicht vorhanden, wenn der Druckmonitor InitializePrintMonitor anstelle von InitializePrintMonitor2 unterstützt.) In einer Clusterumgebung können mehrere Instanzen von Sprachmonitoren vorhanden sein.
hMonitorPort [in] (OpenPortEx)
Der vom Anrufer bereitgestellte Portmonitorinstanzhandle. Dies ist das Handle, das von der InitializePrintMonitor2-Funktion des Monitors zurückgegeben wird. (Dieser Parameter ist nicht vorhanden, wenn der Druckmonitor InitializePrintMonitor anstelle von InitializePrintMonitor2 unterstützt.) Ein Sprachmonitor muss dieses Handle verwenden, wenn er Funktionen in der MONITOR2 Struktur des Portmonitors aufruft.
pPortName [in] (OpenPortEx)
Vom Aufrufer bereitgestellter Zeiger auf eine Zeichenfolge, die den Namen des zu öffnenden Ports enthält.
pPrinterName [in] (OpenPortEx)
Vom Aufrufer bereitgestellter Zeiger auf eine Zeichenfolge, die den Namen des Druckers enthält, der mit dem Anschluss verbunden ist.
pHandle [out] (OpenPortEx)
Vom Anrufer bereitgestellter Zeiger an einen Ort, an dem ein Porthandle empfangen wird.
pMonitor [in] (OpenPortEx)
Vom Aufrufer bereitgestellter Zeiger auf die MONITOR2 Struktur, die von der InitializePrintMonitor2-Funktion eines Portmonitors zurückgegeben wird.
Rückgabewert (OpenPortEx)
Wenn der Vorgang erfolgreich ist, sollte die Funktion WAHR zurückgeben. Andernfalls sollte FALSE zurückgegeben werden.
SetPortTimeOuts
BOOL (WINAPI *pfnSetPortTimeOuts)
(
_In_ HANDLE hPort,
_In_ LPCOMMTIMEOUTS lpCTO,
_In_ DWORD reserved // must be set to 0
);
Parameter (SetPortTimeOuts)
hPort [in] (SetPortTimeOuts)
Vom Aufrufer bereitgestellter Handle für den offenen Port, für den die Timeoutwerte festgelegt werden sollen.
lpCTO [in] (SetPortTimeOuts)
Vom Aufrufer bereitgestellter Zeiger auf eine COMMTIMEOUTS- Struktur.
reserviert [in] (SetPortTimeOuts)
Reserviert für die zukünftige Verwendung. Muss auf Null festgelegt werden.
Rückgabewert (SetPortTimeOuts)
Wenn der Vorgang erfolgreich ist, sollte die Funktion WAHR zurückgeben. Andernfalls sollte FALSE zurückgegeben werden.
StartDocPort
typedef BOOL (WINAPI *pfnStartDocPort)(
_In_ HANDLE hPort,
_In_ LPWSTR pPrinterName,
_In_ DWORD JobId,
_In_ DWORD Level,
_In_ LPBYTE pDocInfo
);
Parameter (StartDocPort)
hPort [in] (StartDocPort)
Vom Anrufer bereitgestellter Porthandle.
pPrinterName [in] (StartDocPort)
Vom Aufrufer bereitgestellter Zeiger auf eine Zeichenfolge, die den Druckernamen enthält.
JobId [in] (StartDocPort)
Vom Aufrufer bereitgestellter, Spooler zugewiesener Auftragsbezeichner.
Ebene [in] (StartDocPort)
Vom Aufrufer bereitgestellter Wert, der den Typ der Struktur angibt, auf die pDocInfo verweist.
Mögliche Werte sind 1 (DOC_INFO_1) oder 2 (DOC_INFO_2).
pDocInfo [in] (StartDocPort)
Vom Aufrufer bereitgestellter Zeiger auf eine DOC_INFO_1- oder DOC_INFO_2-Struktur.
Rückgabewert (StartDocPort)
Wenn der Vorgang erfolgreich ist, sollte die Funktion WAHR zurückgeben. Andernfalls sollte FALSE zurückgegeben werden.
Notizen
Der Spooler ruft AddPort- auf, wenn er eine Anwendungsanforderung empfängt, um seiner Umgebung einen Port hinzuzufügen. Der Spooler leitet den Aufruf an den benannten Portmonitor auf dem benannten Server weiter.
AddPort- ermöglicht es, einen Port interaktiv hinzuzufügen. Ein Monitor sollte einen Benutzer auffordern, den Portnamen in ein Dialogfeld im Fenster einzugeben, das hWndzugeordnet ist. AddPort- sollte den eingegebenen Portnamen überprüfen, indem die Win32 EnumPorts-Funktion aufgerufen wird, um sicherzustellen, dass der Spoolerumgebung keine doppelten Portnamen hinzugefügt werden. Ein Monitor sollte auch überprüfen, ob der Port einer ist, der unterstützt wird.
Der Spooler unterstützt keine Remote-AddPort-aufrufe. Daher können AddPort- Implementierungen die pName- und pMonitorName Parameter ignorieren.
Der Spooler ruft ConfigurePort auf, damit ein Portmonitor die Portkonfiguration ausführen kann. ConfigurePort- kann ein Dialogfeld anbieten, um einige oder alle erforderlichen Portkonfigurationsinformationen vom Benutzer abzurufen.
Der Spooler unterstützt keine Remote-ConfigurePort--Aufrufe; Daher können Monitore den pName Parameter ignorieren.
Der Spooler ruft DeletePort- auf, damit ein Portmonitor einen Port aus der Umgebung des Monitors löschen kann. Der Monitor sollte den angegebenen Port aus seinem Zustand löschen. Der Spooler ruft DeletePort- auf einem Monitor nicht auf, solange ein Port geöffnet ist.
Anwendungen können lokale und Remoteports löschen. Auf der Drucker-BEnutzeroberfläche wird ein Bestätigungsmeldungsfeld angezeigt, bevor der Pooler DeletePort-aufruft. Daher sollte ein Monitor den hWnd-parameter ignorieren und kein anderes Dialogfeld anzeigen.
Sprachmonitore- und Portmonitor-Server-DLLs sind erforderlich, um eine EndDocPort--Funktion zu definieren und die Adresse der Funktion in eine MONITOR2 Struktur einzuschließen.
Das Handle, das als hPort-Argument der Funktion empfangen wird, ist der Porthandle, den der Monitor OpenPort oder OpenPortEx- funktion bereitgestellt hat.
Die EndDocPort-funktion eines Sprachmonitors ruft in der Regel die EndDocPort--Funktion des zugeordneten Portmonitors auf. Außerdem sollte der Spooler benachrichtigt werden, wenn das Druckgerät den Auftrag beendet hat, indem SetJob-aufgerufen wird, wobei ein Befehl von JOB_CONTROL_LAST_PAGE_EJECTED angegeben wird. Sprachmonitore für bidirektionale Drucker sollten nicht SetJob- aufrufen, bis der Drucker die Benachrichtigung gesendet hat, dass der Auftrag wirklich abgeschlossen ist.
Die EndDocPort-Funktion einer Portmonitor-DLL ruft in der Regel die CloseHandle--Funktion auf, um das Handle zu schließen, das zuvor durch Aufrufen von CreateFile- aus StartDocPort-abgerufen wurde. Außerdem sollte der Spooler benachrichtigt werden, wenn das Druckgerät den Auftrag abgeschlossen hat, indem er SetJob-aufruft und einen Befehl für JOB_CONTROL_SENT_TO_PRINTER angibt. (Wenn ein Spooler über einen Sprachmonitor mit dem Port kommuniziert, wird der Auftrag erst abgeschlossen, wenn der Sprachmonitor JOB_CONTROL_LAST_PAGE_EJECTED sendet.)
Die funktion EndDocPort sollte alle Ressourcen freigeben, die von der StartDocPort--Funktion zugeordnet wurden.
Möglicherweise möchten Sie das Verhalten der EndDocPort-Funktion ändern, wenn der Benutzer den Druckauftrag gelöscht oder neu gestartet hat. Die Funktion kann GetJob-aufrufen und nach einem Status von JOB_STATUS_DELETING oder JOB_STATUS_RESTART suchen, um festzustellen, ob eines dieser Ereignisse aufgetreten ist.
Portmonitorserver-DLLs sind erforderlich, um eine EnumPorts--Funktion zu definieren und die Adresse der Funktion in eine MONITOR2 Struktur einzuschließen. Sprachmonitore exportieren diese Funktion nicht.
Der Zweck der funktion EnumPorts ist das Aufzählen der ports, die derzeit von einem Druckmonitor unterstützt werden. Bei diesen Ports handelt es sich um Ports, die zuvor für die AddPortUI-- oder AddPortEx- Funktion des Monitors angegeben wurden.
Die EnumPorts--Funktion sollte den Puffer füllen, auf den pPort- mit einem Array von PORT_INFO_1- oder PORT_INFO_2 Strukturen verweist. Ab dem letzten Arrayelement muss die Funktion dann alle Zeichenfolgen laden, auf die die Strukturelemente des Arrays verweisen.Then starting in a memory location following the last array element, the function must load all the strings point to the array members. Ein Beispiel hierfür finden Sie unter localmon.dll, einem Beispielportmonitor. Die Funktion muss auch die Anzahl der bereitgestellten Strukturen (d. h. die Anzahl der unterstützten Ports) zurückgeben, indem die Zahl an der Position platziert wird, auf die durch pcReturnedverwiesen wird.
Der Aufrufer gibt die Größe des bereitgestellten Puffers in cbBuf-an. Wenn der Puffer zu klein ist, sollte die Funktion die erforderliche Puffergröße an der Stelle platzieren, auf die pcbNeedverweist, rufen Sie SetLastError angeben ERROR_INSUFFICIENT_BUFFER auf, und geben Sie FALSE-zurück.
Wenn Level eine ungültige Levelnummer enthält, sollte die Funktion SetLastError angeben, ERROR_INVALID_LEVEL angeben und FALSE-zurückgeben. Einige Portmonitore unterstützen nur einen Levelwert von 1.
Der Portmonitor muss die Lokalisierung von Zeichenfolgen unterstützen, auf die durch die pMonitorName- und pDescription- Member der PORT_INFO_2-Struktur verwiesen wird. Diese Zeichenfolgen sollten in Ressourcendateien definiert und durch Aufrufen LoadString-abgerufen werden.
Das fPortType- Mitglied der PORT_INFO_2-Struktur wird nicht mit NT-basierten Betriebssystemen verwendet.
Language monitor und Port monitor server DLLs kann optional eine GetPrinterDataFromPort--Funktion definieren und die Adresse der Funktion in eine MONITOR2 Struktur einschließen.
Die Funktion ist für die Verwendung mit bidirektionalen Druckern vorgesehen und kann auf zwei Arten verwendet werden:
Als Mittel zum Anfordern eines Sprachmonitors zum Abrufen des Druckerports zum Abrufen des aktuellen Werts druckerspezifischer Informationen, die in der Registrierung gespeichert sind.
Als Mittel zum Anfordern eines Portmonitors zum Senden eines E/A-Steuercodes an den Porttreiber.
Wenn die GetPrinterDataFromPort-Funktion eines Sprachmonitors einen Zeichenfolgenzeiger in pValueName-empfängt, sollte ein Wert im angegebenen Ausgabepuffer zurückgegeben werden. In der Regel stellt die Zeichenfolge einen Registrierungswertnamen dar, und der Spooler ruft GetPrinterDataFromPort auf, wenn eine Anwendung die GetPrinterData--Funktion aufruft.
Die Verantwortung des Sprachmonitors besteht darin, einen Befehl an die Druckerhardware zu senden, indem die WritePort-Funktion des Portmonitors aufgerufen und die Antwort durch Aufrufen ReadPort-aufgerufen wird, um den erforderlichen Wert zu erhalten. Beispielsweise können pjlmon.dll, der Beispielsprachenmonitor, Werte für die Registrierungswertnamen "Installierter Speicher" und "Verfügbarer Speicher" eines Ports zurückgeben.
Nachdem der Spooler GetPrinterDataFromPort- aufgerufen hat, um einen Registrierungswert abzurufen, wird die Registrierung mit dem neuen Wert aktualisiert.
Portmonitore unterstützen in der Regel keine Aufrufe von GetPrinterDataFromPort-, die einen Zeichenfolgenzeiger in pValueName-enthalten.
Wenn die GetPrinterDataFromPort-Funktion eines Sprachmonitors in ControlID-einen Nichtzero-E/A-Steuerelementcode empfängt, sollte er nur die GetPrinterDataFromPort-Funktion des zugeordneten Portmonitors aufrufen und das Ergebnis zurückgeben. Die Kernel-Mode Drivers Reference listet E/A-Steuercodes für parallele und serielle Anschlüsse auf.
Wenn die GetPrinterDataFromPort-Funktion eines Portmonitors in ControlID-einen Nichtzero-E/A-Steuerelementcode empfängt, sollte DeviceIOControl- aufgerufen werden, um den Steuercode an den Kernelmodusporttreiber zu übergeben. Die lpInBuffer, cbInBuffer, lpOutBuffer, cbOutBufferund lpcbReturned Parameterwerte sollten auch an DeviceIOControlübergeben werden.
Sprachmonitore müssen eine OpenPortEx
-Funktion definieren und ihre Adresse in eine MONITOR2 Struktur einschließen. Die OpenPortEx
-Funktion wird vom Druckspooler aufgerufen, wenn eine Druckwarteschlange mit einem Port verbunden ist.
Der primäre Zweck der OpenPortEx
-Funktion besteht darin, ein Porthandle zurückzugeben, das der Aufrufer als Eingabeargument für nachfolgende Aufrufe der StartDocPort-des Sprachmonitors verwenden kann, WritePort, ReadPort, EndDocPortund GetPrinterDataFromPort Funktionen. Da ein Sprachmonitor diese Funktionen in der Regel durch Aufrufen der entsprechenden Funktionen im zugehörigen Portmonitor implementiert, ruft ein Sprachmonitor in der Regel einen Porthandle ab, indem die OpenPort-funktion des Portmonitors aufgerufen wird. Weitere Informationen finden Sie unter Language and Port Monitor Interaction.
Der OpenPortEx
-Parameter der OpenPortEx
-Funktion pMonitor ist ein Zeiger auf die MONITOR2 Struktur des Portmonitors. Diese Struktur enthält Zeiger auf die aufrufbaren Funktionen des Portmonitors. Die OpenPortEx
-Funktion sollte die Struktur überprüfen, um sicherzustellen, dass alle erforderlichen Funktionszeiger nichtNULL-sind. Wenn die Struktur gültig ist, sollte die Funktion sie in den lokalen Speicher kopieren. Andernfalls sollte OpenPortEx
SetLastError-aufrufen, ERROR_INVALID_PRINT_MONITOR angeben und FALSE-zurückgeben.
Drucküberwachungsfunktionen, die ein Porthandle akzeptieren, als Eingabe akzeptieren auch keinen Monitorhandle. Daher muss die OpenPortEx
-Funktion den empfangenen Monitorhandle an einem Ort speichern, auf den vom Porthandle verwiesen werden kann. Dadurch können die Funktionen, die ein Porthandle akzeptieren, auf den Monitorhandle verweisen.
Die SetPortTimeOuts
-Funktion eines Portmonitormonitors ermöglicht es einem Sprachmonitor, Porttimeoutwerte für einen offenen Port anzugeben. Die Funktion ist optional und muss nur bereitgestellt werden, wenn der Portmonitor einen Port steuert, der die Änderung der Porttimeoutwerte zulässt. Wenn die Funktion definiert ist, muss die Adresse in einer MONITOR2 Struktur enthalten sein.
Die Funktion wird von pjlmon.dll, dem Beispielsprachenmonitoraufgerufen, und Sie können einen angepassten Sprachmonitor schreiben, der sie aufruft. Der Druckspooler ruft SetPortTimeOuts
nicht auf.
Der Portmonitor sollte die Timeoutwerte des Ports innerhalb der OpenPort--Funktion initialisieren.
Sprachmonitore- und Portmonitor-Server-DLLs sind erforderlich, um eine StartDocPort
Funktion zu definieren und die Adresse der Funktion in eine MONITOR2 Struktur einzuschließen.
Das Handle, das als hPort--Argument der Funktion "hPort" empfangen wird, ist das Porthandle, das der Monitor OpenPort oder OpenPortEx- funktion bereitgestellt hat.
Die StartDocPort
-Funktion eines Sprachmonitors ruft in der Regel die StartDocPort
-Funktion des zugehörigen Portmonitors auf.
Die StartDocPort
-Funktion einer Portüberwachungsserver-DLL ruft in der Regel die CreateFile--Funktion auf, um eine Verbindung mit dem Kernelmodusporttreiber zu erstellen.
Bei Bedarf sollte der Portmonitor verhindern, dass andere Prozesse den angegebenen Port verwenden, bis EndDocPort- aufgerufen wird. Beispielsweise muss ein Portmonitor für einen COM-Port sicherstellen, dass während ein Spooler Druckerdaten an den Port sendet, eine andere Anwendung nicht davon aus, dass der Port mit einem bestimmten Kommunikationsgerät verbunden ist, und dann versuchen, mit diesem Gerät zu kommunizieren. Dieser hinweis gilt nicht für den lokalen Druckanbieter, der garantiert, dass er nie zweimal hintereinander aufruf StartDocPort
t, ohne einen dazwischen liegenden Aufruf an EndDocPort, aber es gilt für Druckanbieter, die diese Garantie nicht gewährleisten.
Anforderungen
Anforderung | Wert |
---|---|
Header- | winsplp.h (include Winsplp.h) |