XcvDataPort 함수(winsplp.h)
포트 모니터 서버 DLL의 XcvDataPort 함수는 포트 모니터의 UI DLL에서 정보를 수신하고 정보를 반환합니다.
통사론
DWORD XcvDataPort(
_In_ HANDLE hXcv,
_In_ LPCWSTR pszDataName,
_In_ PBYTE pInputData,
DWORD cbInputData,
_Out_ PBYTE pOutputData,
DWORD cbOutputData,
_Out_ PDWORD pcbOutputNeeded
);
매개 변수
[in] hXcv
OpenPrinter 호출하여 가져온 호출자 제공 프린터 핸들입니다(Microsoft Windows SDK 설명서에 설명됨). 이 핸들은 XcvOpenPort 함수에서 만들어지고 반환됩니다.
[in] pszDataName
요청되는 데이터의 이름을 나타내는 문자열에 대한 호출자 제공 포인터입니다. 자세한 내용은 다음 설명 섹션을 참조하세요.
[in] pInputData
입력 데이터가 포함된 버퍼에 대한 호출자 제공 포인터입니다.
cbInputData
pInputData 가리키는 버퍼의 호출자 제공 크기(바이트)입니다.
[out] pOutputData
출력 데이터를 수신하는 버퍼에 대한 호출자 제공 포인터입니다.
cbOutputData
pOutputData 가리키는 버퍼의 호출자 제공 크기(바이트)입니다.
[out] pcbOutputNeeded
pOutputData 가리키는 버퍼에 필요한 최소 크기(바이트)를 받을 위치에 대한 호출자 제공 포인터입니다.
반환 값
작업이 성공하면 이 함수는 ERROR_SUCCESS 반환해야 합니다. 그렇지 않으면 접두사로 ERROR_ Win32 오류 코드를 반환해야 합니다. 인쇄 모니터 UI DLL은 XcvData지정된 pdwStatus 위치에서 이 값을 받습니다.
발언
포트 모니터 서버 DLL은 포트 모니터 UI DLL에서 정보를 수신하고 정보를 반환할 수 있도록 XcvDataPort 함수를 정의해야 합니다. 함수의 주소는 MONITOR2 구조체에 포함되어야 합니다.
XcvDataPort 함수는 스풀러의 XcvData 함수에 의해 호출됩니다. XcvDataPort 및 XcvData 대한 함수 매개 변수는 거의 동일합니다. (XcvDataXcvDataPort없는 pdwStatus 추가 매개 변수가 있습니다.)
pszDataName 가리키는 문자열은 수행할 작업을 지정합니다. 함수는 다음 데이터 이름 문자열을 인식해야 합니다.
데이터 이름 문자열 | 수술 |
---|---|
L"AddPort" | 포트를 추가하는 데 필요한 모든 정보가 전송되었습니다. 함수는 포트 키 아래의 레지스트리에 포트 이름을 쓰는 것을 포함하여 지정된 포트를 추가하는 데 필요한 작업을 수행해야 합니다. pInputData 매개 변수는 NULL로 끝나는 포트 이름 문자열을 가리킵니다. 함수가 ERROR_SUCCESS 반환하는 경우 스풀러는 포트를 추가된 것으로 표시합니다. 이 문자열은 AddPortUI 함수 내에서 인쇄 모니터 UI DLL에 의해 지정됩니다. |
L"DeletePort" | 포트를 삭제하는 데 필요한 모든 정보가 전송되었습니다. 함수는 레지스트리의 포트 키에서 포트 이름을 제거하는 등 지정된 포트를 삭제하는 데 필요한 작업을 수행해야 합니다. pInputData 매개 변수는 NULL로 끝나는 포트 이름 문자열을 가리킵니다. 함수가 ERROR_SUCCESS 반환하면 스풀러는 포트를 삭제된 것으로 표시합니다. 이 문자열은 DeletePortUI 함수 내에서 인쇄 모니터 UI DLL에 의해 지정됩니다. |
L"MonitorUI" | 함수는 pOutputData 사용하여 연결된 포트 모니터 UI DLL의 이름을 반환해야 합니다. 이 문자열은 애플리케이션이 Microsoft Windows SDK AddPort 함수를 호출할 때 인쇄 스풀러에 의해 지정됩니다. |
일반적으로 함수는 AddPortUI, ConfigurePortUI및 DeletePortUI 함수 내에서 UI DLL에서 전송되는 사용자 지정된 추가 문자열을 인식하기 위해 작성됩니다. 이러한 문자열은 서버 DLL에서 현재 구성 값을 요청하거나 새 값을 제공하는 명령을 나타낼 수 있습니다. 예를 들어 XcvDataPort 함수는 UI DLL이 현재 저장된 전송 재시도 제한 시간 값을 요청하기 위해 서버 DLL로 보낼 수 있는 "GetTransmissionRetryTimeout" 문자열을 인식할 수 있습니다. 또는 "AddPort" 또는 "DeletePort"를 보내기 전에 전송해야 하는 문자열 집합을 정의할 수 있습니다. 여기서 문자열은 추가 또는 삭제할 포트를 식별하는 정보를 제공하는 데 사용됩니다.
지정된 pszDataName 문자열 및 입력 버퍼의 경우 XcvDataPort 먼저 cbOutputData 값 0으로 호출될 수 있습니다. 함수는 반환 값과 함께 pcbOutputNeeded필요한 버퍼 크기를 반환해야 ERROR_INSUFFICIENT_BUFFER. 호출자는 pcbOutputNeeded 수신된 값을 사용하여 적절한 크기의 출력 버퍼를 할당한 다음 XcvDataPort 다시 호출할 수 있습니다. 이번에는 cbOutputData할당된 버퍼 크기를 지정합니다.
XcvDataPort 함수는 모든 입력 인수의 유효성을 검사해야 합니다. 특히 함수는 다음을 수행해야 합니다.
pszDataName 매개 변수가 가리키는 문자열의 내용의 유효성을 검사합니다. 이 문자열이 관리 작업(일반적으로 포트 추가, 삭제 또는 구성)을 나타내는 경우 XcvDataPort 함수는 XcvOpenPort 함수에서 이전에 받은 부여된 액세스 마스크를 SERVER_ACCESS_ADMINISTER 비교해야 합니다. 비교에 실패하면 XcvDataPort ERROR_ACCESS_DENIED 반환해야 합니다.
pInputData 매개 변수가 가리키는 버퍼의 내용의 유효성을 검사합니다. 스풀러가 XcvOpenPort 함수를 호출하는 경우 이 버퍼의 내용에 대한 유효성 검사를 수행하지 않습니다. 모니터는 악성 애플리케이션에서 올 수 있는이 데이터의 유효성에 대 한 가정을 만들 수 없습니다.
TCPMON과 통신할 포트 모니터를 작성하는 경우 TCPMON Xcv 인터페이스참조하세요.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 바탕 화면 |
헤더 | winsplp.h(Winsplp.h 포함) |
라이브러리 | NtosKrnl.exe |