MONITOR-Struktur (winsplp.h)

Achtung

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;

Member

pfnEnumPorts

Die EnumPorts-Funktion einer Portmonitorserver-DLL listet die Vom Portmonitor unterstützten Ports auf.

pfnOpenPort

Zeiger auf die OpenPort-Funktion des Druckmonitors.

pfnOpenPortEx

Die Funktion eines Sprachmonitors OpenPortEx öffnet einen Druckeranschluss.

pfnStartDocPort

Die Funktion eines Druckmonitors StartDocPort führt die Aufgaben aus, die zum Starten eines Druckauftrags am angegebenen Port erforderlich sind.

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

Achtung

Die AddPort-Funktion ist veraltet und sollte nicht verwendet werden.

AddPort erstellt einen Port und fügt ihn der Liste der Ports hinzu, die derzeit vom angegebenen Monitor in der Spooler-Umgebung unterstützt werden.

pfnAddPortEx

(Veraltet. Muss NULL sein.) Zeiger auf die AddPortEx-Funktion des Druckmonitors. (Nur Portmonitore.)

pfnConfigurePort

Achtung

Die ConfigurePort-Funktion ist veraltet und sollte nicht verwendet werden. Verwenden Sie stattdessen ConfigurePortUI .

ConfigurePort ist eine Portverwaltungsfunktion, die den angegebenen Port konfiguriert.

pfnDeletePort

Achtung

Die DeletePort-Funktion ist veraltet und sollte nicht verwendet werden.

DeletePort löscht einen Port aus der Umgebung des Monitors.

pfnGetPrinterDataFromPort

Die GetPrinterDataFromPort-Funktion eines Portmonitors ruft status Informationen von einem bidirektionalen Drucker ab und gibt sie an den Aufrufer zurück.

pfnSetPortTimeOuts

Die Funktion einer Portmonitorserver-DLL SetPortTimeOuts legt Porttimeoutwerte für einen offenen Port fest.

pfnXcvOpenPort

Zeiger auf die XcvOpenPort-Funktion des Druckmonitors. (Nur Portmonitore.)

pfnXcvDataPort

Zeiger auf die XcvDataPort-Funktion des Druckmonitors. (Nur Portmonitore.)

pfnXcvClosePort

Zeiger auf die XcvClosePort-Funktion des Druckmonitors. (Nur Portmonitore.)

Hinweise

In den folgenden Abschnitten werden die einzelnen Rückrufmember ausführlicher beschrieben.

AddPort

typedef BOOL (WINAPI *pfnAddPort)(
  _In_ HANDLE hMonitor,
  _In_ LPWSTR pName,
  _In_ HWND   hWnd,
  _In_ LPWSTR pMonitorName
);

Parameter (AddPort)

Überwachen [in] (AddPort)

Vom Aufrufer bereitgestellter Monitor instance Handle. 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)

Zeiger auf eine NULL-Zeichenfolge, die den Namen des Servers angibt, mit dem der Port verbunden ist. Wenn pName NULL ist, ist der Port lokal.

hWnd [in] (AddPort)

Handle mit dem übergeordneten Fenster des Dialogfelds, in dem der Portname eingegeben wird.

pMonitorName [in] (AddPort)

Zeiger auf eine 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)

Vom Aufrufer bereitgestellter Monitor instance Handle. 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)

Zeiger auf eine NULL-Zeichenfolge, die den Namen des Servers angibt, auf dem sich der angegebene Port befindet. Wenn diese Zeichenfolge NULL ist, ist der Port lokal.

hWnd [in] (ConfigurePort)

Handle mit dem übergeordneten Fenster des Dialogfelds, in dem die Konfigurationsinformationen eingegeben werden.

pPortName [in] (ConfigurePort)

Zeiger auf eine NULL-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)

Vom Aufrufer bereitgestellter Monitor instance Handle. 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)

Zeiger auf eine NULL-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)

Handle mit dem übergeordneten Fenster des Dialogfelds zum Löschen von Ports.

pPortName [in] (DeletePort)

Zeiger auf eine 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 Aufrufer bereitgestelltes Porthandle.

Rückgabewert (EndDocPort)

Wenn der Vorgang erfolgreich ist, sollte die Funktion TRUE 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)

Vom Aufrufer bereitgestellter Monitor instance Handle. 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 aufgelistet werden sollen. Ein NULL-Zeiger stellt das System dar, auf dem die Portmonitorserver-DLL ausgeführt wird.

Level [in] (EnumPorts)

Vom Aufrufer bereitgestellter Wert, der den Typ der Strukturen angibt, die im Puffer zurückgegeben werden sollen, auf den 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 von Strukturmembern verwiesen wird.

cbBuf [in] (EnumPorts)

Vom Aufrufer bereitgestellte Größe des Puffers, auf den pPorts verweist, in Bytes.

pcbNeeded [out] (EnumPorts)

Vom Aufrufer bereitgestellter Zeiger auf einen Speicherort, an dem die Puffergröße in Bytes empfangen wird, die alle zurückgegebenen Informationen enthalten muss.

pcReturned [out] (EnumPorts)

Vom Aufrufer bereitgestellter Zeiger auf einen Ort, an dem die nummerumerierten Ports empfangen werden sollen.

Rückgabewert (EnumPorts)

Wenn der Vorgang erfolgreich ist, sollte die Funktion TRUE 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 Aufrufer bereitgestelltes Porthandle.

ControlID [in] (GetPrinterDataFromPort)

Vom Aufrufer bereitgestellter Geräte-E/A-Steuerungscode. Der Wert 0 (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 0 ist.

lpInBuffer [in] (GetPrinterDataFromPort)

Vom Aufrufer bereitgestellter Zeiger auf einen Puffer, der Eingabedaten enthält. Wird nur verwendet, wenn ControlID ungleich null ist.

cbInBuffer [in] (GetPrinterDataFromPort)

Vom Aufrufer bereitgestellte Größe des Puffers, auf den lpInBuffer verweist, in Bytes.

lpOutBuffer [out] (GetPrinterDataFromPort)

Vom Aufrufer bereitgestellter Zeiger auf einen Puffer zum Empfangen der angeforderten Daten.

cbOutBuffer [in] (GetPrinterDataFromPort)

Vom Aufrufer bereitgestellte Größe des Puffers, auf den lpOutBuffer verweist, in Bytes.

lpcbReturned [out] (GetPrinterDataFromPort)

Vom Aufrufer bereitgestellter Zeiger auf einen Speicherort, an dem die Anzahl der Bytes empfangen werden soll, die in den Puffer geschrieben werden, auf den lpOutBuffer verweist.

Rückgabewert (GetPrinterDataFromPort)

Wenn der Vorgang erfolgreich ist, sollte die Funktion TRUE 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
)

Parameter (OpenPortEx)

hMonitor [in] (OpenPortEx)

Vom Aufrufer bereitgestellter Sprachmonitor instance Handle. 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)

Vom Aufrufer bereitgestellter Portmonitor instance Handle. 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 Port verbunden ist.

pHandle [out] (OpenPortEx)

Vom Aufrufer bereitgestellter Zeiger auf einen Ort, an dem ein Porthandle empfangen werden soll.

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 TRUE 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 bereitgestelltes Handle für den geöffneten Port, an dem die Timeoutwerte festgelegt werden sollen.

lpCTO [in] (SetPortTimeOuts)

Vom Aufrufer bereitgestellter Zeiger auf eine COMMTIMEOUTS-Struktur .

reserved [in] (SetPortTimeOuts)

Für die zukünftige Verwendung reserviert. Muss auf 0 (null) festgelegt werden.

Rückgabewert (SetPortTimeOuts)

Wenn der Vorgang erfolgreich ist, sollte die Funktion TRUE 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 Aufrufer bereitgestelltes Porthandle.

pPrinterName [in] (StartDocPort)

Vom Aufrufer bereitgestellter Zeiger auf eine Zeichenfolge, die den Druckernamen enthält.

JobId [in] (StartDocPort)

Vom Aufrufer bereitgestellte, vom Spooler zugewiesene 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 TRUE zurückgeben. Andernfalls sollte FALSE zurückgegeben werden.

Hinweise

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 das interaktive Hinzufügen eines Ports. Ein Monitor sollte einen Benutzer auffordern, den Portnamen in einem Dialogfeld in dem Fenster einzugeben, das hWnd zugeordnet 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 unterstützt wird.

Der Spooler unterstützt keine AddPort-Remoteaufrufe . Daher können AddPort-Implementierungen die Parameter pName und pMonitorName ignorieren.

Der Spooler ruft ConfigurePort auf, damit ein Portmonitor die Portkonfiguration ausführen kann. ConfigurePort kann ein Dialogfeld zum Abrufen einiger oder aller erforderlichen Portkonfigurationsinformationen vom Benutzer bieten.

Der Spooler unterstützt keine ConfigurePort-Remoteaufrufe . 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 nicht auf einem Monitor 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 Spooler DeletePort aufruft. Daher sollte ein Monitor den hWnd-Parameter ignorieren und kein weiteres Dialogfeld anzeigen.

Sprachmonitore und Portmonitorserver-DLLs sind erforderlich, um eine EndDocPort-Funktion zu definieren und die Adresse der Funktion in eine MONITOR2-Struktur aufzunehmen.

Das Handle, das als hPort-Argument der Funktion empfangen wird, ist das Porthandle, das die OpenPort - oder OpenPortEx-Funktion des Monitors bereitgestellt hat.

Die EndDocPort-Funktion eines Sprachmonitors ruft in der Regel die EndDocPort-Funktion des zugeordneten Portmonitors auf. Darüber hinaus sollte der Spooler benachrichtigt werden, wenn das Druckgerät den Auftrag abgeschlossen hat, indem SetJob aufgerufen und ein Befehl JOB_CONTROL_LAST_PAGE_EJECTED angegeben wird. Sprachmonitore für bidirektionale Drucker sollten SetJob erst aufrufen, wenn der Drucker eine Benachrichtigung gesendet hat, dass der Auftrag wirklich abgeschlossen ist.

Die EndDocPort-Funktion einer Portmonitorserver-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 SetJob aufgerufen und ein Befehl JOB_CONTROL_SENT_TO_PRINTER angegeben wird. (Wenn ein Spooler über einen Sprachmonitor mit dem Port kommuniziert, gilt der Auftrag erst als abgeschlossen, wenn der Sprachmonitor JOB_CONTROL_LAST_PAGE_EJECTED sendet.)

Die EndDocPort-Funktion sollte alle Ressourcen freigeben, die von der StartDocPort-Funktion zugewiesen wurden.

Sie können das Verhalten der EndDocPort-Funktion ändern, wenn der Benutzer den Druckauftrag gelöscht oder neu gestartet hat. Die Funktion kann GetJob aufrufen und nach einer 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 EnumPorts-Funktion besteht darin, die Ports aufzulisten, die derzeit von einem Druckmonitor unterstützt werden. Diese Ports wurden zuvor für die AddPortUI- oder AddPortEx-Funktion des Monitors angegeben.

Die EnumPorts-Funktion sollte den Puffer, auf den pPort verweist, mit einem Array von PORT_INFO_1- oder PORT_INFO_2-Strukturen füllen. Ab einem Speicherspeicherort nach dem letzten Arrayelement muss die Funktion dann alle Zeichenfolgen laden, auf die die Strukturelemente des Arrays verweisen. Ein Beispiel dafür finden Sie in localmon.dll, einem Beispielportmonitor. Die Funktion muss auch die Anzahl der bereitgestellten Strukturen zurückgeben (d. h. die Anzahl der unterstützten Ports), indem die Zahl an der Position platziert wird, auf die von pcReturned verwiesen 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 Position platzieren, auf die von pcbNeed verwiesen wird, SetLastError aufrufen, ERROR_INSUFFICIENT_BUFFER angeben, und FALSE zurückgeben.

Wenn Level eine ungültige Levelnummer enthält, sollte die Funktion SetLastError aufrufen und ERROR_INVALID_LEVEL angeben und FALSE zurückgeben. Einige Portmonitore unterstützen nur den Levelwert 1.

Der Portmonitor muss die Lokalisierung von Zeichenfolgen unterstützen, auf die von den pMonitorName - und pDescription-Membern der PORT_INFO_2-Struktur verwiesen wird. Diese Zeichenfolgen sollten in Ressourcendateien definiert und durch Aufrufen von LoadString abgerufen werden.

Das fPortType-Element der PORT_INFO_2-Struktur wird bei NT-basierten Betriebssystemen nicht verwendet.

Sprachmonitore und Portmonitorserver-DLLs können 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 die folgenden beiden Arten verwendet werden:

  • Als Mittel zum Anfordern eines Sprachmonitors zum Abfragen des Druckerports, um den aktuellen Wert der druckerspezifischen Informationen abzurufen, die in der Registrierung gespeichert sind.

  • Als Mittel zum Anfordern eines Portmonitors zum Senden eines E/A-Steuerungscodes 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 von ReadPort gelesen wird, um den erforderlichen Wert abzurufen. Beispielsweise kann pjlmon.dll, der Beispielsprachmonitor, Werte für die Registrierungswertnamen "Installierter Arbeitsspeicher" und "Verfügbarer Arbeitsspeicher" eines Ports zurückgeben.

Nachdem der Spooler GetPrinterDataFromPort aufgerufen hat, um einen Registrierungswert abzurufen, aktualisiert er die Registrierung mit dem neuen Wert.

Portmonitore unterstützen in der Regel keine Aufrufe von GetPrinterDataFromPort , die einen Zeichenfolgenzeiger in pValueName enthalten.

Wenn die GetPrinterDataFromPort-Funktion eines Sprachmonitors einen nichtzero-E/A-Steuerelementcode in ControlID empfängt, sollte sie einfach die GetPrinterDataFromPort-Funktion des zugehörigen Portmonitors aufrufen und das Ergebnis zurückgeben. Die Referenz zu Kernelmodustreibern listet E/A-Steuercodes für parallele und serielle Ports auf.

Wenn die GetPrinterDataFromPort-Funktion eines Portmonitors einen nichtzero-E/A-Steuerelementcode in ControlID empfängt, sollte DeviceIOControl aufgerufen werden, um den Steuerungscode an den Kernelmodusporttreiber zu übergeben. Die Parameterwerte lpInBuffer, cbInBuffer, lpOutBuffer, cbOutBuffer und lpcbReturned sollten ebenfalls an DeviceIOControl übergeben werden.

Sprachmonitore sind erforderlich, um eine OpenPortEx Funktion zu definieren und deren Adresse in eine MONITOR2-Struktur aufzunehmen. Die OpenPortEx Funktion wird vom Druckspooler aufgerufen, wenn eine Druckwarteschlange mit einem Port verbunden ist.

Der OpenPortEx Hauptzweck der Funktion besteht darin, ein Porthandle zurückzugeben, das der Aufrufer als Eingabeargument für nachfolgende Aufrufe der Funktionen StartDocPort, WritePort, ReadPort, EndDocPort und GetPrinterDataFromPort des Sprachmonitors verwenden kann. Da ein Sprachmonitor diese Funktionen in der Regel durch Aufruf der entsprechenden Funktionen im zugehörigen Portmonitor implementiert, ruft ein Sprachmonitor in der Regel ein Porthandle ab, indem die OpenPort-Funktion des Portmonitors aufgerufen wird. Weitere Informationen finden Sie unter Sprach- und Portmonitorinteraktion.

Der OpenPortExpMonitor-Parameter der Funktion 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 nicht NULL sind. Wenn die Struktur gültig ist, sollte sie von der Funktion in den lokalen Speicher kopiert werden. Andernfalls OpenPortEx sollte SetLastError aufgerufen werden, ERROR_INVALID_PRINT_MONITOR angeben und FALSE zurückgeben.

Drucküberwachungsfunktionen, die ein Porthandle als Eingabe akzeptieren, akzeptieren nicht auch ein Monitorhandle. Daher muss die Funktion das OpenPortEx empfangene Monitorhandle an einer Position speichern, auf die vom Porthandle verwiesen werden kann. Dadurch können die Funktionen, die ein Porthandle akzeptieren, auf das Monitorhandle verweisen.

Die Funktion einer SetPortTimeOuts Portmonitorserver-DLL 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 von Porttimeoutwerten zulässt. Wenn die Funktion definiert ist, muss ihre Adresse in einer MONITOR2-Struktur enthalten sein.

Die Funktion wird von pjlmon.dll aufgerufen, dem Beispielsprachmonitor, und Sie können einen benutzerdefinierten Sprachmonitor schreiben, der sie aufruft. Der Druckspooler ruft nicht auf SetPortTimeOuts.

Der Portmonitor sollte die Timeoutwerte des Ports in seiner OpenPort-Funktion initialisieren.

Sprachmonitore und Portmonitorserver-DLLs sind erforderlich, um eine StartDocPort Funktion zu definieren und die Adresse der Funktion in eine MONITOR2-Struktur aufzunehmen.

Das Handle, das als hPort-Argument der Funktion empfangen wird, ist das Porthandle, das die OpenPort - oder OpenPortEx-Funktion des Monitors bereitgestellt hat.

Die Funktion eines Sprachmonitors StartDocPort ruft in der Regel die Funktion des zugeordneten Portmonitors StartDocPort auf.

Die Funktion einer StartDocPort Portmonitorserver-DLL ruft in der Regel die CreateFile-Funktion auf, um eine Verbindung mit dem Kernelmodus-Porttreiber herzustellen.

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 ausgeht, dass der Port mit einem bestimmten Kommunikationsgerät verbunden ist, und dann versucht, mit diesem Gerät zu kommunizieren. Dieser warnende Hinweis gilt nicht für den lokalen Druckanbieter, der garantiert, dass er nie zweimal hintereinander aufruft StartDocPort , ohne einen dazwischenliegenden Anruf bei EndDocPort, aber er gilt für Druckanbieter, die diese Garantie nicht übernehmen.

Anforderungen

Anforderung Wert
Header winsplp.h (einschließlich Winsplp.h)

Weitere Informationen

MONITOR2

MONITORUI