다음을 통해 공유


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

포트 모니터 서버 DLL의 EnumPorts 함수는 포트 모니터가 지원하는 포트를 열거합니다.

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)

모니터 [in](AddPort)

호출자가 제공된 모니터 instance 핸들입니다. 모니터의 InitializePrintMonitor2 함수에서 반환되는 핸들입니다. 인쇄 모니터가 InitializePrintMonitor2 대신 InitializePrintMonitor2를 지원하는 경우에는 이 매개 변수가 없습니다.

pName [in] (AddPort)

포트가 연결된 서버의 이름을 지정하는 null로 끝나는 문자열에 대한 포인터입니다. pName이 NULL이면 포트가 로컬입니다.

hWnd [in](AddPort)

포트 이름을 입력할 대화 상자의 부모 창에 대한 핸들입니다.

pMonitorName [in] (AddPort)

포트와 연결된 모니터를 지정하는 null로 끝나는 문자열에 대한 포인터입니다.

반환 값(AddPort)

함수가 성공하면 반환 값이 TRUE이고, 그렇지 않으면 FALSE입니다.

ConfigurePort

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

매개 변수(ConfigurePort)

hMonitor [in] (ConfigurePort)

호출자가 제공된 모니터 instance 핸들입니다. 모니터의 InitializePrintMonitor2 함수에서 반환되는 핸들입니다. 인쇄 모니터가 InitializePrintMonitor2 대신 InitializePrintMonitor를 지원하는 경우에는 이 매개 변수가 없습니다.

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)

호출자가 제공된 모니터 instance 핸들입니다. 모니터의 InitializePrintMonitor2 함수에서 반환되는 핸들입니다. 인쇄 모니터가 InitializePrintMonitor2 대신 InitializePrintMonitor를 지원하는 경우에는 이 매개 변수가 없습니다.

pName [in] (DeletePort)

삭제할 포트가 있는 서버의 이름을 지정하는 null로 끝나는 문자열에 대한 포인터입니다. 이 매개 변수가 NULL이면 포트는 로컬입니다.

hWnd [in](DeletePort)

포트 삭제 대화 상자의 부모 창에 대한 핸들입니다.

pPortName [in] (DeletePort)

삭제할 포트의 이름을 지정하는 null로 끝나는 문자열에 대한 포인터입니다.

반환 값(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)

호출자가 제공된 모니터 instance 핸들입니다. 모니터의 InitializePrintMonitor2 함수에서 반환되는 핸들입니다. 인쇄 모니터가 InitializePrintMonitor2 대신 InitializePrintMonitor를 지원하는 경우에는 이 매개 변수가 없습니다.

pName [in, optional](EnumPorts)

포트를 열거할 서버의 이름을 포함하는 문자열에 대한 호출자 제공 포인터입니다. NULL 포인터는 포트 모니터 서버 DLL이 실행되는 시스템을 나타냅니다.

수준 [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)

호출자가 제공하는 디바이스 I/O 제어 코드입니다. 값이 0이면 pValueName에서 값 이름이 제공됨을 나타냅니다.

pValueName [in] (GetPrinterDataFromPort)

요청되는 정보를 식별하는 문자열에 대한 호출자 제공 포인터입니다. ControlID가 0인 경우에만 유효합니다.

lpInBuffer [in] (GetPrinterDataFromPort)

입력 데이터를 포함하는 버퍼에 대한 호출자 제공 포인터입니다. ControlID가 0이 아닌 경우에만 사용됩니다.

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)

호출자가 제공한 언어 모니터 instance 핸들입니다. 모니터의 InitializePrintMonitor2 함수에서 반환되는 핸들입니다. 인쇄 모니터가 InitializePrintMonitor2 대신 InitializePrintMonitor를 지원하는 경우에는 이 매개 변수가 없습니다. 클러스터 환경에는 여러 언어 모니터 인스턴스가 있을 수 있습니다.

hMonitorPort [in] (OpenPortEx)

호출자가 포트 모니터 instance 핸들을 제공했습니다. 모니터의 InitializePrintMonitor2 함수에서 반환되는 핸들입니다. 인쇄 모니터가 InitializePrintMonitor2 대신 InitializePrintMonitor를 지원하는 경우에는 이 매개 변수가 없습니다. 언어 모니터는 포트 모니터의 MONITOR2 구조에서 함수를 호출할 때 이 핸들을 사용해야 합니다.

pPortName [in] (OpenPortEx)

열 포트의 이름을 포함하는 문자열에 대한 호출자 제공 포인터입니다.

pPrinterName [in] (OpenPortEx)

포트에 연결된 프린터의 이름을 포함하는 문자열에 대한 호출자 제공 포인터입니다.

pHandle [out](OpenPortEx)

포트 핸들을 받을 위치에 대한 호출자 제공 포인터입니다.

pMonitor [in] (OpenPortEx)

포트 모니터의 InitializePrintMonitor2 함수에서 반환된 MONITOR2 구조체에 대한 호출자 제공 포인터입니다.

반환 값(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)

다음에 사용하도록 예약됩니다. 0으로 설정해야 합니다.

반환 값(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)

호출자가 제공한 스풀러 할당 작업 식별자입니다.

수준 [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 구현은 pNamepMonitorName 매개 변수를 무시할 수 있습니다.

스풀러는 포트 모니터가 포트 구성을 수행할 수 있도록 ConfigurePort 를 호출합니다. ConfigurePort 는 사용자에게 필요한 포트 구성 정보의 일부 또는 전부를 가져오는 대화 상자를 제공할 수 있습니다.

스풀러는 원격 ConfigurePort 호출을 지원하지 않습니다. 따라서 모니터는 pName 매개 변수를 무시할 수 있습니다.

스풀러는 DeletePort 를 호출하므로 포트 모니터가 모니터 환경에서 포트를 삭제할 수 있습니다. 모니터는 지정된 포트를 해당 상태에서 삭제해야 합니다. 스풀러는 포트가 열려 있는 한 모니터에서 DeletePort 를 호출하지 않습니다.

애플리케이션은 로컬 및 원격 포트를 삭제할 수 있습니다. 프린터 UI는 스풀러가 DeletePort를 호출하기 전에 확인 메시지 상자를 표시하므로 모니터는 hWnd 매개 변수를 무시하고 다른 대화 상자를 표시하지 않아야 합니다.

EndDocPort 함수를 정의하고 함수의 주소를 MONITOR2 구조에 포함하려면 언어 모니터 및 포트 모니터 서버 DLL이 필요합니다.

함수의 hPort 인수로 받은 핸들은 모니터의 OpenPort 또는 OpenPortEx 함수가 제공한 포트 핸들입니다.

언어 모니터의 EndDocPort 함수는 일반적으로 연결된 포트 모니터의 EndDocPort 함수를 호출합니다. 또한 인쇄 디바이스가 SetJob을 호출하고 JOB_CONTROL_LAST_PAGE_EJECTED 명령을 지정하여 작업을 완료할 때 스풀러에 알립니다. 양방향 프린터에 대한 언어 모니터는 프린터가 작업이 실제로 완료되었다는 알림을 보낼 때까지 SetJob 을 호출하면 안 됩니다.

포트 모니터 서버 DLL의 EndDocPort 함수는 일반적으로 CloseHandle 함수를 호출하여 StartDocPort 내에서 CreateFile을 호출하여 이전에 가져온 핸들을 닫습니다. 또한 인쇄 디바이스가 작업을 완료할 때 SetJob을 호출하고 JOB_CONTROL_SENT_TO_PRINTER 명령을 지정하여 스풀러에 알립니다. (스풀러가 언어 모니터를 통해 포트와 통신하는 경우 언어 모니터가 JOB_CONTROL_LAST_PAGE_EJECTED 보낼 때까지 작업이 완료된 것으로 간주되지 않습니다.

EndDocPort 함수는 StartDocPort 함수에 의해 할당된 모든 리소스를 해제해야 합니다.

사용자가 인쇄 작업을 삭제하거나 다시 시작한 경우 EndDocPort 함수의 동작을 수정할 수 있습니다. 함수는 GetJob을 호출하고 JOB_STATUS_DELETING 또는 JOB_STATUS_RESTART 상태 대해 검사 이러한 이벤트 중 하나가 발생했는지 확인할 수 있습니다.

EnumPorts 함수를 정의하고 함수의 주소를 MONITOR2 구조에 포함하려면 포트 모니터 서버 DLL이 필요합니다. 언어 모니터는 이 함수를 내보내지 않습니다.

EnumPorts 함수의 목적은 현재 인쇄 모니터에서 지원되는 포트를 열거하는 것입니다. 이러한 포트는 이전에 모니터의 AddPortUI 또는 AddPortEx 함수에 지정된 포트 입니다 .

EnumPorts 함수는 pPort가 가리키는 버퍼를 PORT_INFO_1 또는 PORT_INFO_2 구조의 배열로 채워야 합니다. 그런 다음 마지막 배열 요소 다음에 있는 메모리 위치에서 시작하여 함수는 배열의 구조체 멤버가 가리키는 모든 문자열을 로드해야 합니다. 이 작업을 수행하는 방법의 예는 샘플 포트 모니터인 localmon.dll 참조하세요. 또한 함수는 pcReturned이 가리키는 위치에 숫자를 배치하여 제공된 구조체 수(지원되는 포트 수)를 반환해야 합니다.

호출자는 cbBuf에서 제공된 버퍼의 크기를 지정합니다. 버퍼가 너무 작은 경우 함수는 pcbNeeded가 가리키는 위치에 필요한 버퍼 크기를 배치하고, ERROR_INSUFFICIENT_BUFFER 지정하는 SetLastError 를 호출하고, FALSE를 반환해야 합니다.

Level에 잘못된 수준 번호가 포함된 경우 함수는 ERROR_INVALID_LEVEL 지정하는 SetLastError를 호출하고 FALSE를 반환해야 합니다. 일부 포트 모니터는 수준 값 1만 지원합니다.

포트 모니터는 PORT_INFO_2 구조체의 pMonitorNamepDescription 멤버가 가리키는 문자열의 지역화를 지원해야 합니다. 이러한 문자열은 리소스 파일에 정의되고 LoadString을 호출하여 가져와야 합니다.

PORT_INFO_2 구조의 fPortType 멤버는 NT 기반 운영 체제에서 사용되지 않습니다.

언어 모니터 및 포트 모니터 서버 DLL은 필요에 따라 GetPrinterDataFromPort 함수를 정의하고 함수의 주소를 MONITOR2 구조에 포함할 수 있습니다.

이 함수는 양방향 프린터와 함께 사용하기 위한 것이며 다음 두 가지 방법으로 사용할 수 있습니다.

  • 언어 모니터에 프린터 포트를 폴링하여 레지스트리에 저장된 프린터 관련 정보의 현재 값을 가져오도록 요청하는 수단입니다.

  • 포트 모니터에 I/O 제어 코드를 포트 드라이버에 보내도록 요청하는 수단입니다.

언어 모니터의 GetPrinterDataFromPort 함수가 pValueName에서 문자열 포인터를 받으면 제공된 출력 버퍼의 값을 반환해야 합니다. 일반적으로 문자열은 레지스트리 값 이름을 나타내고 스풀러는 애플리케이션이 GetPrinterData 함수를 호출할 때 GetPrinterDataFromPort 호출합니다.

언어 모니터의 책임은 포트 모니터의 WritePort 함수를 호출하고 ReadPort를 호출하여 응답을 읽어 필요한 값을 가져와 프린터 하드웨어에 명령을 보내는 것입니다. 예를 들어 샘플 언어 모니터인 pjlmon.dll 포트의 "설치된 메모리" 및 "사용 가능한 메모리" 레지스트리 값 이름에 대한 값을 반환할 수 있습니다.

스풀러가 GetPrinterDataFromPort 를 호출하여 레지스트리 값을 가져온 후 레지스트리를 새 값으로 업데이트합니다.

일반적으로 포트 모니터는 pValueName에 문자열 포인터를 포함하는 GetPrinterDataFromPort에 대한 호출을 지원하지 않습니다.

언어 모니터의 GetPrinterDataFromPort 함수가 ControlID에서 0이 아닌 I/O 컨트롤 코드를 수신하는 경우 연결된 포트 모니터의 GetPrinterDataFromPort 함수를 호출하고 결과를 반환해야 합니다. 커널 모드 드라이버 참조에는 병렬 및 직렬 포트에 대한 I/O 제어 코드가 나열됩니다.

포트 모니터의 GetPrinterDataFromPort 함수가 ControlID에서 0이 아닌 I/O 컨트롤 코드를 받으면 DeviceIOControl 을 호출하여 제어 코드를 커널 모드 포트 드라이버에 전달해야 합니다. lpInBuffer, cbInBuffer, lpOutBuffer, cbOutBufferlpcbReturned 매개 변수 값도 DeviceIOControl에 전달되어야 합니다.

언어 모니터는 함수를 OpenPortEx 정의하고 해당 주소를 MONITOR2 구조에 포함해야 합니다. OpenPortEx 인쇄 큐가 포트에 연결될 때 인쇄 스풀러에서 함수를 호출합니다.

OpenPortEx 함수의 주요 목적은 호출자가 언어 모니터의 StartDocPort, WritePort, ReadPort, EndDocPortGetPrinterDataFromPort 함수에 대한 후속 호출에 대한 입력 인수로 사용할 수 있는 포트 핸들을 반환하는 것입니다. 언어 모니터는 일반적으로 연결된 포트 모니터에서 해당 함수를 호출하여 이러한 함수를 구현하기 때문에 언어 모니터는 일반적으로 포트 모니터의 OpenPort 함수를 호출하여 포트 핸들을 가져옵니다. 자세한 내용은 언어 및 포트 모니터 상호 작용을 참조하세요.

OpenPortEx 함수의 pMonitor 매개 변수는 포트 모니터의 MONITOR2 구조에 대한 포인터입니다. 이 구조체에는 포트 모니터의 호출 가능한 함수에 대한 포인터가 포함되어 있습니다. 함수는 OpenPortEx 구조체를 검사 필요한 모든 함수 포인터가 NULL이 아닌지 확인해야 합니다. 구조체가 유효한 경우 함수는 이를 로컬 스토리지에 복사해야 합니다. 그렇지 않으면 OpenPortExSetLastError를 호출하고 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 포트에 대한 포트 모니터는 스풀러가 프린터 데이터를 포트로 보내는 동안 다른 애플리케이션이 포트가 특정 통신 디바이스에 연결되어 있다고 가정한 다음 해당 디바이스와 통신을 시도하지 않도록 해야 합니다. 이 주의 사항은 EndDocPort에 대한 중간 호출 없이 연속해서 두 번 연속으로 호출 StartDocPort 되지 않도록 보장하는 로컬 인쇄 공급자에는 적용되지 않지만 이를 보장하지 않는 인쇄 공급자에는 적용됩니다.

요구 사항

요구 사항
헤더 winsplp.h(Winsplp.h 포함)

추가 정보

MONITOR2

MONITORUI