Share via


Struttura MONITOR (winsplp.h)

Attenzione

La struttura MONITOR è obsoleta ed è supportata solo per motivi di compatibilità. I nuovi monitoraggi di stampa devono implementare MONITOR2 in modo che possano essere usati con i cluster del server di stampa.

La struttura MONITOR contiene puntatori alle funzioni definite dai monitoraggi di stampa.

Sintassi

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;

Members

pfnEnumPorts

La funzione EnumPorts di una DLL del server di monitoraggio delle porte enumPorts enumera le porte supportate dal monitoraggio delle porte.

pfnOpenPort

Puntatore alla funzione OpenPort del monitor di stampa.

pfnOpenPortEx

La funzione di un monitoraggio del OpenPortEx linguaggio apre una porta della stampante.

pfnStartDocPort

La funzione di un monitor di StartDocPort stampa esegue le attività necessarie per avviare un processo di stampa sulla porta specificata.

pfnWritePort

Puntatore alla funzione WritePort del monitor di stampa.

pfnReadPort

Puntatore alla funzione ReadPort del monitor di stampa.

pfnEndDocPort

La funzione EndDocPort di un monitor di stampa esegue le attività necessarie per terminare un processo di stampa sulla porta specificata.

pfnClosePort

Puntatore alla funzione ClosePort del monitor di stampa.

pfnAddPort

Attenzione

La funzione AddPort è obsoleta e non deve essere usata.

AddPort crea una porta e la aggiunge all'elenco delle porte attualmente supportate dal monitoraggio specificato nell'ambiente spooler.

pfnAddPortEx

(Obsoleto. Deve essere NULL. Puntatore alla funzione AddPortEx del monitor di stampa. (Solo monitoraggi delle porte).

pfnConfigurePort

Attenzione

La funzione ConfigurePort è obsoleta e non deve essere usata. Usare invece ConfigurePortUI .

ConfigurePort è una funzione di gestione delle porte che configura la porta specificata.

pfnDeletePort

Attenzione

La funzione DeletePort è obsoleta e non deve essere usata.

DeletePort elimina una porta dall'ambiente del monitoraggio.

pfnGetPrinterDataFromPort

La funzione GetPrinterDataFromPort di un monitor della porta ottiene informazioni sullo stato da una stampante bidirezionale e la restituisce al chiamante.

pfnSetPortTimeOuts

La funzione della DLL del server di SetPortTimeOuts monitoraggio delle porte imposta i valori di timeout delle porte per una porta aperta.

pfnXcvOpenPort

Puntatore alla funzione XcvOpenPort del monitor di stampa. (Solo monitoraggi delle porte).

pfnXcvDataPort

Puntatore alla funzione XcvDataPort del monitor di stampa. (Solo monitoraggi delle porte).

pfnXcvClosePort

Puntatore alla funzione XcvClosePort del monitor di stampa. (Solo monitoraggi delle porte).

Commenti

Le sezioni seguenti descrivono in modo più dettagliato ogni membro di callback.

AddPort

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

Parametri (AddPort)

Monitoraggio [in] (AddPort)

Il chiamante ha fornito l'handle dell'istanza di monitoraggio. Si tratta dell'handle restituito dalla funzione InitializePrintMonitor2 del monitor. Questo parametro non esiste se il monitor di stampa supporta InitializePrintMonitor2 anziché InitializePrintMonitor2.

pName [in] (AddPort)

Puntatore a una stringa con terminazione Null che specifica il nome del server a cui è connessa la porta. Se pName è NULL, la porta è locale.

hWnd [in] (AddPort)

Handle nella finestra padre della finestra di dialogo in cui verrà immesso il nome della porta.

pMonitorName [in] (AddPort)

Puntatore a una stringa con terminazione Null che specifica il monitoraggio associato alla porta.

Valore restituito (AddPort)

Il valore restituito è TRUE se la funzione ha esito positivo e FALSE in caso contrario.

ConfigurePort

typedef BOOL (WINAPI *pfnConfigurePort)(
  _In_ HANDLE hMonitor,
  _In_ LPWSTR pName,
  _In_ HWND   hWnd,
  _In_ LPWSTR pPortName
);

Parametri (ConfigurePort)

hMonitor [in] (ConfigurePort)

Il chiamante ha fornito l'handle dell'istanza di monitoraggio. Si tratta dell'handle restituito dalla funzione InitializePrintMonitor2 del monitor. Questo parametro non esiste se il monitor di stampa supporta InitializePrintMonitor anziché InitializePrintMonitor2.

pName [in] (ConfigurePort)

Puntatore a una stringa con terminazione Null che specifica il nome del server in cui è presente la porta specificata. Se questa stringa è NULL, la porta è locale.

hWnd [in] (ConfigurePort)

Handle nella finestra padre della finestra di dialogo in cui verranno immesse le informazioni di configurazione.

pPortName [in] (ConfigurePort)

Puntatore a una stringa con terminazione Null che specifica il nome della porta da configurare.

Valore restituito (ConfigurePort)

Il valore restituito è TRUE se la funzione ha esito positivo.

DeletePort

pfnDeletePort DeletePort;

BOOL WINAPI DeletePort(
  _In_ HANDLE hMonitor,
  _In_ LPWSTR pName,
  _In_ HWND   hWnd,
  _In_ LPWSTR pPortName
)

Parametri (DeletePort)

hMonitor [in] (DeletePort)

Il chiamante ha fornito l'handle dell'istanza di monitoraggio. Si tratta dell'handle restituito dalla funzione InitializePrintMonitor2 del monitor. Questo parametro non esiste se il monitor di stampa supporta InitializePrintMonitor anziché InitializePrintMonitor2.

pName [in] (DeletePort)

Puntatore a una stringa con terminazione Null che specifica il nome del server in cui è presente la porta da eliminare. Se questo parametro è NULL, la porta è locale.

hWnd [in] (DeletePort)

Handle nella finestra padre della finestra di dialogo di eliminazione delle porte.

pPortName [in] (DeletePort)

Puntatore a una stringa con terminazione Null che assegna un nome alla porta da eliminare.

Valore restituito (DeletePort)

Il valore restituito è TRUE se la funzione ha esito positivo.

EndDocPort

typedef BOOL ( WINAPI *pfnEndDocPort)(
  _In_ HANDLE hPort
);

Parametri (EndDocPort)

hPort [in] (EndDocPort)

Handle di porta fornito dal chiamante.

Valore restituito (EndDocPort)

Se l'operazione ha esito positivo, la funzione deve restituire TRUE. In caso contrario, deve restituire 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
);

Parametri (EnumPorts)

hMonitor [in] (EnumPorts)

Il chiamante ha fornito l'handle dell'istanza di monitoraggio. Si tratta dell'handle restituito dalla funzione InitializePrintMonitor2 del monitor. Questo parametro non esiste se il monitor di stampa supporta InitializePrintMonitor anziché InitializePrintMonitor2.

pName [in, facoltativo] (EnumPorts)

Puntatore fornito dal chiamante a una stringa contenente il nome del server le cui porte devono essere enumerate. Un puntatore NULL rappresenta il sistema in cui è in esecuzione la DLL del server di monitoraggio delle porte.

Level [in] (EnumPorts)

Valore fornito dal chiamante che indica il tipo di strutture da restituire nel buffer a cui punta pPorts.

I valori possibili sono 1 (PORT_INFO_1) o 2 (PORT_INFO_2).

pPorts [out] (EnumPorts)

Puntatore fornito dal chiamante a un buffer per ricevere informazioni sulla porta. Le informazioni restituite devono essere costituite da una matrice di strutture PORT_INFO_1 o PORT_INFO_2 , seguite dalle stringhe a cui puntano i membri della struttura.

cbBuf [in] (EnumPorts)

Dimensione fornita dal chiamante, in byte, del buffer a cui punta pPorts.

pcbNeeded [out] (EnumPorts)

Puntatore fornito dal chiamante a una posizione per ricevere le dimensioni del buffer, in byte, necessarie per contenere tutte le informazioni restituite.

pcReturned [out] (EnumPorts)

Puntatore fornito dal chiamante a una posizione per ricevere le porte enumerate.

Valore restituito (EnumPorts)

Se l'operazione ha esito positivo, la funzione deve restituire TRUE. In caso contrario, deve restituire 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
)

Parametri (GetPrinterDataFromPort)

hPort [in] (GetPrinterDataFromPort)

Handle di porta fornito dal chiamante.

ControlID [in] (GetPrinterDataFromPort)

Codice di controllo di I/O del dispositivo fornito dal chiamante. Un valore pari a zero indica che un nome di valore viene fornito da pValueName.

pValueName [in] (GetPrinterDataFromPort)

Puntatore fornito dal chiamante a una stringa che identifica le informazioni richieste. Valido solo se ControlID è zero.

lpInBuffer [in] (GetPrinterDataFromPort)

Puntatore fornito dal chiamante a un buffer contenente i dati di input. Usato solo se ControlID è diverso da zero.

cbInBuffer [in] (GetPrinterDataFromPort)

Dimensione fornita dal chiamante, in byte, del buffer a cui punta lpInBuffer.

lpOutBuffer [out] (GetPrinterDataFromPort)

Puntatore fornito dal chiamante a un buffer per ricevere i dati richiesti.

cbOutBuffer [in] (GetPrinterDataFromPort)

Dimensione fornita dal chiamante, in byte, del buffer a cui punta lpOutBuffer.

lpcbReturned [out] (GetPrinterDataFromPort)

Puntatore fornito dal chiamante a una posizione per ricevere il numero di byte scritti nel buffer a cui punta lpOutBuffer.

Valore restituito (GetPrinterDataFromPort)

Se l'operazione ha esito positivo, la funzione deve restituire TRUE. In caso contrario, deve restituire 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
)

Parametri (OpenPortEx)

hMonitor [in] (OpenPortEx)

Handle dell'istanza di Monitoraggio del linguaggio fornito dal chiamante. Si tratta dell'handle restituito dalla funzione InitializePrintMonitor2 del monitor. Questo parametro non esiste se il monitor di stampa supporta InitializePrintMonitor anziché InitializePrintMonitor2. In un ambiente cluster possono essere presenti più istanze di monitoraggi del linguaggio.

hMonitorPort [in] (OpenPortEx)

Handle dell'istanza di monitoraggio delle porte fornito dal chiamante. Si tratta dell'handle restituito dalla funzione InitializePrintMonitor2 del monitor. Questo parametro non esiste se il monitor di stampa supporta InitializePrintMonitor anziché InitializePrintMonitor2. Un monitoraggio del linguaggio deve usare questo handle quando chiama le funzioni nella struttura di MONITOR2 del monitoraggio delle porte.

pPortName [in] (OpenPortEx)

Puntatore fornito dal chiamante a una stringa contenente il nome della porta da aprire.

pPrinterName [in] (OpenPortEx)

Puntatore fornito dal chiamante a una stringa contenente il nome della stampante connessa alla porta.

pHandle [out] (OpenPortEx)

Puntatore fornito dal chiamante a una posizione per ricevere un handle di porta.

pMonitor [in] (OpenPortEx)

Puntatore fornito dal chiamante alla struttura MONITOR2 restituita dalla funzione InitializePrintMonitor2 di un monitor della porta.

Valore restituito (OpenPortEx)

Se l'operazione ha esito positivo, la funzione deve restituire TRUE. In caso contrario, deve restituire FALSE.

SetPortTimeOuts

BOOL (WINAPI *pfnSetPortTimeOuts)
    (
    _In_ HANDLE  hPort,
    _In_ LPCOMMTIMEOUTS lpCTO,
    _In_ DWORD   reserved    // must be set to 0
    );

Parametri (SetPortTimeOuts)

hPort [in] (SetPortTimeOuts)

Handle fornito dal chiamante sulla porta aperta su cui impostare i valori di timeout.

lpCTO [in] (SetPortTimeOuts)

Puntatore fornito dal chiamante a una struttura COMMTIMEOUTS .

reserved [in] (SetPortTimeOuts)

Riservato per utilizzi futuri. Deve essere impostato su zero.

Valore restituito (SetPortTimeOuts)

Se l'operazione ha esito positivo, la funzione deve restituire TRUE. In caso contrario, deve restituire FALSE.

StartDocPort

typedef BOOL (WINAPI *pfnStartDocPort)(
  _In_ HANDLE hPort,
  _In_ LPWSTR pPrinterName,
  _In_ DWORD  JobId,
  _In_ DWORD  Level,
  _In_ LPBYTE pDocInfo
);

Parametri (StartDocPort)

hPort [in] (StartDocPort)

Handle di porta fornito dal chiamante.

pPrinterName [in] (StartDocPort)

Puntatore fornito dal chiamante a una stringa contenente il nome della stampante.

JobId [in] (StartDocPort)

Identificatore del processo assegnato dal chiamante e assegnato dallo spooler.

Level [in] (StartDocPort)

Valore fornito dal chiamante che indica il tipo di struttura a cui punta pDocInfo.

I valori possibili sono 1 (DOC_INFO_1) o 2 (DOC_INFO_2).

pDocInfo [in] (StartDocPort)

Puntatore fornito dal chiamante a una struttura DOC_INFO_1 o DOC_INFO_2 .

Valore restituito (StartDocPort)

Se l'operazione ha esito positivo, la funzione deve restituire TRUE. In caso contrario, deve restituire FALSE.

Note

Lo spooler chiama AddPort quando riceve una richiesta dell'applicazione per aggiungere una porta al proprio ambiente. Lo spooler inoltra la chiamata al monitoraggio della porta denominata nel server denominato.

AddPort consente di aggiungere una porta in modo interattivo. Un monitoraggio deve richiedere a un utente di immettere il nome della porta in una finestra di dialogo nella finestra associata a hWnd. AddPort deve convalidare il nome della porta immessa chiamando la funzione Win32 EnumPorts per assicurarsi che non vengano aggiunti nomi di porta duplicati all'ambiente spooler. Un monitoraggio deve anche verificare che la porta sia supportata.

Lo spooler non supporta chiamate AddPort remote. Di conseguenza, le implementazioni di AddPort possono ignorare i parametri pName e pMonitorName .

Lo spooler chiama ConfigurePort in modo che un monitoraggio delle porte possa eseguire la configurazione della porta. ConfigurePort può offrire una finestra di dialogo per ottenere alcune o tutte le informazioni di configurazione delle porte necessarie dall'utente.

Lo spooler non supporta le chiamate ConfigurePort remote; di conseguenza, i monitoraggi possono ignorare il parametro pName .

Lo spooler chiama DeletePort in modo che un monitoraggio delle porte possa eliminare una porta dall'ambiente del monitoraggio. Il monitoraggio deve eliminare la porta specificata dal relativo stato. Lo spooler non chiamerà DeletePort su un monitor purché sia aperta una porta.

Le applicazioni possono eliminare porte locali e remote. L'interfaccia utente della stampante visualizza una finestra di messaggio di conferma prima che lo spooler chiami DeletePort, quindi un monitor deve ignorare il parametro hWnd e non visualizzare un'altra finestra di dialogo.

I monitoraggi del linguaggio e le DLL del server di monitoraggio delle porte sono necessari per definire una funzione EndDocPort e includere l'indirizzo della funzione in una struttura MONITOR2 .

L'handle ricevuto come argomento hPort della funzione è l'handle di porta fornito dalla funzione OpenPort o OpenPortEx del monitor.

La funzione EndDocPort di un monitoraggio del linguaggio chiama in genere la funzione EndDocPort del monitoraggio delle porte associata. Deve anche notificare allo spooler quando il dispositivo di stampa ha terminato il processo chiamando SetJob, specificando un comando di JOB_CONTROL_LAST_PAGE_EJECTED. I monitoraggi della lingua per le stampanti bidirezionali non devono chiamare SetJob finché la stampante non ha inviato una notifica che indica che il processo è stato effettivamente completato.

Una funzione EndDocPort del server di monitoraggio delle porte chiama in genere la funzione CloseHandle per chiudere l'handle ottenuto in precedenza chiamando CreateFile da StartDocPort. Deve anche notificare allo spooler quando il dispositivo di stampa ha completato il processo, chiamando SetJob, specificando un comando di JOB_CONTROL_SENT_TO_PRINTER. Se uno spooler comunica con la porta tramite un monitoraggio lingua, non considera il processo completato fino a quando il monitoraggio della lingua non invia JOB_CONTROL_LAST_PAGE_EJECTED.

La funzione EndDocPort deve liberare tutte le risorse allocate dalla funzione StartDocPort .

È possibile modificare il comportamento della funzione EndDocPort se l'utente ha eliminato o riavviato il processo di stampa. La funzione può chiamare GetJob e verificare lo stato di JOB_STATUS_DELETING o JOB_STATUS_RESTART per verificare se si è verificato uno di questi eventi.

Le DLL del server di monitoraggio delle porte sono necessarie per definire una funzione EnumPorts e includere l'indirizzo della funzione in una struttura MONITOR2 . I monitoraggi del linguaggio non esportano questa funzione.

Lo scopo della funzione EnumPorts è enumerare le porte attualmente supportate da un monitor di stampa. Queste porte sono quelle specificate in precedenza per la funzione AddPortUI o AddPortEx del monitoraggio.

La funzione EnumPorts deve riempire il buffer a cui punta pPort con una matrice di strutture PORT_INFO_1 o PORT_INFO_2. A partire quindi da una posizione di memoria dopo l'ultimo elemento della matrice, la funzione deve caricare tutte le stringhe a cui puntano i membri della struttura della matrice. Fare riferimento a localmon.dll, un monitoraggio delle porte di esempio, per un esempio di come eseguire questa operazione. La funzione deve anche restituire il numero di strutture fornite (ovvero il numero di porte supportate) inserendo il numero nella posizione a cui punta pcReturned.

Il chiamante specifica le dimensioni del buffer fornito in cbBuf. Se il buffer è troppo piccolo, la funzione deve inserire le dimensioni del buffer necessarie nella posizione a cui punta pcbNeeded, chiamare SetLastError specificando ERROR_INSUFFICIENT_BUFFER e restituire FALSE.

Se Level contiene un numero di livello non valido, la funzione deve chiamare SetLastError specificando ERROR_INVALID_LEVEL e restituire FALSE. Alcuni monitoraggi delle porte supportano solo un valore di livello 1.

Il monitoraggio delle porte deve supportare la localizzazione delle stringhe a cui puntano i membri pMonitorName e pDescription della struttura PORT_INFO_2. Queste stringhe devono essere definite nei file di risorse e ottenute chiamando LoadString.

Il membro fPortType della struttura PORT_INFO_2 non viene utilizzato con i sistemi operativi basati su NT.

I monitoraggi del linguaggio e le DLL del server di monitoraggio delle porte possono facoltativamente definire una funzione GetPrinterDataFromPort e includere l'indirizzo della funzione in una struttura MONITOR2 .

La funzione è destinata all'uso con stampanti bidirezionali e può essere usata nei due modi seguenti:

  • Come mezzo per richiedere a un monitoraggio della lingua di eseguire il polling della porta della stampante, per ottenere il valore corrente delle informazioni specifiche della stampante archiviate nel Registro di sistema.

  • Come mezzo per richiedere un monitoraggio delle porte per inviare un codice di controllo di I/O al driver della porta.

Se la funzione GetPrinterDataFromPort di un monitor del linguaggio riceve un puntatore di stringa in pValueName, deve restituire un valore nel buffer di output fornito. In genere, la stringa rappresenta un nome di valore del Registro di sistema e lo spooler chiama GetPrinterDataFromPort quando un'applicazione chiama la funzione GetPrinterData .

La responsabilità del monitoraggio del linguaggio è inviare un comando all'hardware della stampante chiamando la funzione WritePort del monitor della porta e leggendo la risposta chiamando ReadPort, per ottenere il valore necessario. Ad esempio, pjlmon.dll, il monitoraggio del linguaggio di esempio, può restituire i valori per i nomi dei valori del Registro di sistema "Memoria installata" e "Memoria disponibile".

Dopo che lo spooler chiama GetPrinterDataFromPort per ottenere un valore del Registro di sistema, aggiorna il Registro di sistema con il nuovo valore.

In genere, i monitoraggi delle porte non supportano le chiamate a GetPrinterDataFromPort che includono un puntatore stringa in pValueName.

Se la funzione GetPrinterDataFromPort di un monitor del linguaggio riceve un codice di controllo I/O diverso da zero in ControlID, deve semplicemente chiamare la funzione GetPrinterDataFromPort del monitor della porta associata e restituire il risultato. Le informazioni di riferimento sui driver in modalità kernel elencano i codici di controllo di I/O per le porte parallele e seriali.

Quando la funzione GetPrinterDataFromPort di un monitor della porta riceve un codice di controllo I/O diverso da zero in ControlID, deve chiamare DeviceIOControl per passare il codice di controllo al driver della porta in modalità kernel. I valori dei parametri lpInBuffer, cbInBuffer, lpOutBuffer, cbOutBuffer e lpcbReturned devono essere passati anche a DeviceIOControl.

I monitoraggi del linguaggio sono necessari per definire una OpenPortEx funzione e includerne l'indirizzo in una struttura MONITOR2 . La OpenPortEx funzione viene chiamata dallo spooler di stampa quando una coda di stampa è connessa a una porta.

Lo OpenPortEx scopo principale della funzione è restituire un handle di porta che il chiamante può usare come argomento di input per le chiamate successive alle funzioni StartDocPort, WritePort, ReadPort, EndDocPort e GetPrinterDataFromPort del monitoraggio del linguaggio. Poiché un monitoraggio del linguaggio implementa in genere queste funzioni chiamando le funzioni equivalenti nel monitoraggio delle porte associato, un monitoraggio del linguaggio ottiene in genere un handle di porta chiamando la funzione OpenPort del monitoraggio delle porte. Per altre informazioni, vedere Interazione tra Linguaggio e Monitoraggio porte.

Il OpenPortEx parametro pMonitor della funzione è un puntatore alla struttura MONITOR2 del monitor delle porte. Questa struttura contiene puntatori alle funzioni chiamabili del monitoraggio delle porte. La OpenPortEx funzione deve controllare la struttura per verificare che tutti i puntatori a funzione necessari siano diversi da NULL. Se la struttura è valida, la funzione deve copiarla nell'archiviazione locale. In caso contrario OpenPortEx , deve chiamare SetLastError, specificando ERROR_INVALID_PRINT_MONITOR e restituendo FALSE.

Le funzioni di monitoraggio di stampa che accettano un handle di porta come input non accettano anche un handle di monitoraggio. Pertanto, la OpenPortEx funzione deve archiviare l'handle di monitoraggio ricevuto in una posizione a cui è possibile fare riferimento dall'handle di porta. In questo modo le funzioni che accettano un handle di porta per fare riferimento all'handle di monitoraggio.

La funzione della DLL del SetPortTimeOuts server di monitoraggio delle porte consente a un monitoraggio del linguaggio di specificare i valori di timeout della porta per una porta aperta. La funzione è facoltativa e deve essere fornita solo se il monitoraggio delle porte controlla una porta che consente la modifica dei valori di timeout della porta. Se la funzione è definita, il relativo indirizzo deve essere incluso in una struttura MONITOR2 .

La funzione viene chiamata da pjlmon.dll, dal monitoraggio del linguaggio di esempio ed è possibile scrivere un monitoraggio del linguaggio personalizzato che lo chiama. Lo spooler di stampa non chiama SetPortTimeOuts.

Il monitoraggio delle porte deve inizializzare i valori di timeout della porta dall'interno della relativa funzione OpenPort .

I monitoraggi del linguaggio e le DLL del server di monitoraggio delle porte sono necessari per definire una StartDocPort funzione e includere l'indirizzo della funzione in una struttura di MONITOR2 .

L'handle ricevuto come argomento hPort della funzione è l'handle di porta fornito dalla funzione OpenPort o OpenPortEx del monitor.

La funzione di monitoraggio del StartDocPort linguaggio chiama in genere la funzione del StartDocPort monitoraggio delle porte associata.

La funzione della DLL del server di StartDocPort monitoraggio delle porte chiama in genere la funzione CreateFile per creare una connessione al driver della porta in modalità kernel.

Se necessario, il monitoraggio delle porte deve impedire ad altri processi di usare la porta specificata fino a quando non viene chiamato EndDocPort . Ad esempio, un monitoraggio delle porte per una porta COM deve garantire che, mentre uno spooler invia i dati della stampante alla porta, un'altra applicazione non presuppone che la porta sia connessa a un dispositivo di comunicazione specifico e quindi tenti di comunicare con tale dispositivo. Questa nota di cautela non si applica al provider di stampa locale, che garantisce che non chiami StartDocPort mai due volte in successione senza una chiamata interverrà a EndDocPort, ma si applica ai provider di stampa che non fanno questa garanzia.

Requisiti

Requisito Valore
Intestazione winsplp.h (include Winsplp.h)

Vedi anche

MONITOR2

MONITORUI