共用方式為


XcvDataPort 函式 (winsplp.h)

埠監視器伺服器 DLL 的 XcvDataPort 函式會接收來自埠監視器 UI DLL 的資訊,並將資訊傳回至該埠監視器的 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 才能定義 XcvDataPort 函式,以便接收資訊,並將資訊傳回埠監視器 UI DLL。 函式的地址必須包含在 MONITOR2 結構中。

XcvDataPort 函式是由多任務緩衝處理器的 XcvData 函式所呼叫。 XcvDataPortXcvData 的函式參數幾乎完全相同。 (XcvData 有額外的參數 pdwStatus,不存在 於 XcvDataPort.)

pszDataName 指向的字串會指定要執行的作業。 函式必須辨識下列資料名稱字串:

數據名稱字串 作業
L“AddPort” 已傳送新增埠所需的所有資訊。 函式應該執行新增指定埠所需的作業,包括在登錄的埠機碼下寫入埠名稱。 pInputData 參數會指向 NULL 終止的埠名稱字串。 如果函式傳回ERROR_SUCCESS,多任務緩衝處理程式會將埠標示為已新增。 此字串是由列印監視器 UI DLL 從其 AddPortUI 函式內指定。
L“DeletePort” 刪除埠所需的所有資訊都已傳送。 函式應該執行刪除指定埠所需的作業,包括從登錄的 Ports 機碼移除埠名稱。 pInputData 參數會指向 NULL 終止的埠名稱字串。 如果函式傳回ERROR_SUCCESS,多任務緩衝處理程式會將埠標示為已刪除。 此字串是由列印監視器 UI DLL 從其 DeletePortUI 函式內指定。
L“MonitorUI” 函式應該使用 pOutputData 傳回相關聯埠監視器 UI DLL 的名稱。 當應用程式呼叫 Microsoft Windows SDK addPort 函式時,列印後台處理程式會指定此字串。

函式通常會寫入,以辨識 UI DLL 在其 AddPortUIConfigurePortUI 和 DeletePortUI 函式內傳送的其他自定義字元串。 這些字串可能代表從伺服器 DLL 要求目前組態值的命令,或提供新值的命令。 例如, 您的 XcvDataPort 函式可能會辨識字串 「GetTransmissionRetryTimeout」,您的 UI DLL 可以傳送至您的伺服器 DLL,以要求目前儲存的傳輸重試逾時值。 或者,您可以定義一組必須在傳送 「AddPort」 或 「DeletePort」 之前傳送的字串,其中字串用來提供識別要新增或刪除之埠的資訊。

針對指定的 pszDataName 字串和輸入緩衝區, XcvDataPort 可能會先以 零的 cbOutputData 值呼叫。 函式應該會傳回 ERROR_INSUFFICIENT_BUFFER的ERROR_INSUFFICIENT_BUFFER,以在ERROR_INSUFFICIENT_BUFFER中傳回所需的緩衝區大小。 呼叫端可以使用 在 sqlOutputNeeded 中收到的值來配置適當大小的輸出緩衝區,然後再次呼叫 XcvDataPort ,這次指定 cbOutputData 中配置的緩衝區大小。

XcvDataPort 函式必須驗證所有輸入自變數。 具體而言,函式必須:

  • 驗證 pszDataName 參數指向的字串內容。 如果此字串代表系統管理作業, (通常會新增、刪除或設定埠 ) ,XcvDataPort 函式應該會比較 XcvOpenPort 函式先前收到的授與存取遮罩與SERVER_ACCESS_ADMINISTER。 如果比較失敗, XcvDataPort 必須傳回ERROR_ACCESS_DENIED。

  • 驗證 pInputData 參數指向的緩衝區內容。 當多任務緩衝處理程式呼叫 XcvOpenPort 函式時,它不會對此緩衝區的內容執行驗證。 此監視器無法假設此數據的有效性,這可能來自惡意應用程式。

如果您要撰寫會與 TCPMON 通訊的埠監視器,請參閱 TCPMON Xcv 介面

規格需求

需求
目標平台 桌面
標頭 winsplp.h (包含 Winsplp.h)
程式庫 NtosKrnl.exe

另請參閱

XcvOpenPort

DeletePortUI

ConfigurePortUI

AddPortUI

XcvData