monitor structure (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)
呼叫端提供的監視實例句柄。 這是監視器的 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
);
Parameters (ConfigurePort)
hMonitor [in] (ConfigurePort)
呼叫端提供的監視實例句柄。 這是監視器的 InitializePrintMonitor2 函式所傳回的句柄。 (如果列印監視器支援 InitializePrintMonitor 而非 InitializePrintMonitor2.) ,則此參數不存在
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
)
Parameters (DeletePort)
hMonitor [in] (DeletePort)
呼叫端提供的監視實例句柄。 這是監視器的 InitializePrintMonitor2 函式所傳回的句柄。 (如果列印監視器支援 InitializePrintMonitor 而非 InitializePrintMonitor2.) ,則此參數不存在
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)
呼叫端提供的監視實例句柄。 這是監視器的 InitializePrintMonitor2 函式所傳回的句柄。 (如果列印監視器支援 InitializePrintMonitor 而非 InitializePrintMonitor2.) ,則此參數不存在
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 所指向之緩衝區的呼叫端提供大小,以位元組為單位。
(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 控制程式代碼。 值為零表示值名稱是由 pValueName 提供。
pValueName [in] (GetPrinterDataFromPort)
呼叫端提供的字串指標,用來識別所要求的資訊。 只有在 ControlID 為零時才有效。
lpInBuffer [in] (GetPrinterDataFromPort)
呼叫端提供的緩衝區指標,其中包含輸入數據。 只有在 ControlID 不是零時,才會使用。
cbInBuffer [in] (GetPrinterDataFromPort)
呼叫端提供的大小,以位元組為單位,由 lpInBuffer 指向的緩衝區。
lpOutBuffer [out] (GetPrinterDataFromPort)
呼叫端提供的緩衝區指標,以接收要求的數據。
cbOutBuffer [in] (GetPrinterDataFromPort)
呼叫端提供的大小,以位元組為單位,由 lpOutBuffer 指向的緩衝區。
lReturned [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)
呼叫端提供的語言監視器實例句柄。 這是監視器的 InitializePrintMonitor2 函式所傳回的句柄。 (如果列印監視器支援 InitializePrintMonitor 而不是 InitializePrintMonitor2.) 在叢集環境中,可能會有多個語言監視器實例,此參數就不存在。
hMonitorPort [in] (OpenPortEx)
呼叫端提供的埠監視實例句柄。 這是監視器的 InitializePrintMonitor2 函式所傳回的句柄。 (如果列印監視器支援 InitializePrintMonitor 而不是 InitializePrintMonitor2.) 語言監視器在呼叫埠監視器 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 結構的指標。
保留 [in] (SetPortTimeOuts)
保留供未來使用。 必須設定為零。
(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)
呼叫端提供的多任務緩衝處理指派工作標識碼。
Level [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 實作可以忽略 pName 和 pMonitorName 參數。
多任務緩衝處理程式會呼叫 ConfigurePort ,讓埠監視器可以執行埠設定。 ConfigurePort 可以提供對話方塊,以從使用者取得部分或所有必要的埠組態資訊。
多任務緩衝處理程式不支持遠端 ConfigurePort 呼叫;因此,監視器可以忽略 pName 參數。
多任務緩衝處理程式會呼叫 DeletePort ,讓埠監視器可以從監視器的環境刪除埠。 監視器應該從其狀態中刪除指定的埠。 只要埠開啟,多任務緩衝處理程式就不會在監視器上呼叫 DeletePort 。
應用程式可以刪除本機和遠端埠。 印表機 UI 會在多任務緩衝處理程式呼叫 DeletePort 之前顯示確認消息框,因此監視器應該忽略 hWnd 參數,而不會顯示另一個對話方塊。
需要語言監視器 和埠監視器伺服器 DLL,才能定義 EndDocPort 函式,並在 MONITOR2 結構中包含函式的位址。
接收為函式 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的狀態,以查看其中一個事件是否已發生。
需要埠監視伺服器 DLL 才能定義 EnumPorts 函式,並在 MONITOR2 結構中包含函式的位址。 語言監視器不會匯出此函式。
EnumPorts 函式的目的是列舉列印監視器目前支援的埠。 這些埠是先前指定給監視器的 AddPortUI 或 AddPortEx 函式的埠。
EnumPorts 函式應該以PORT_INFO_1或PORT_INFO_2 結構的陣列填滿 pPort 所指向的緩衝區。 然後,從最後一個陣列元素之後的記憶體位置開始,函式必須載入數位結構成員所指向的所有字串。 如需如何執行這項操作的範例,請參閱 localmon.dll 範例埠監視器。 函式也必須傳回 (所提供的結構數目,也就是將數位放在 pcReturned所指向的位置,以) 支援的埠數目。
呼叫端會指定 cbBuf 中提供的緩衝區大小。 如果緩衝區太小,函式應該將所需的緩衝區大小放在 由ERROR_INSUFFICIENT_BUFFER指定的 SetLastError ,並傳回 FALSE。
如果 Level 包含無效的層級號碼,函式應該呼叫指定ERROR_INVALID_LEVEL的 SetLastError ,並傳回 FALSE。 某些埠監視器只支援層級值 1。
埠監視器必須支援 PORT_INFO_2結構的 pMonitorName 和 pDescription 成員所指向的字串當地語系化。 這些字串應該定義在資源檔中,並藉由呼叫 LoadString來取得。
PORT_INFO_2 結構的 fPortType 成員不會與 NT 型作業系統搭配使用。
語言監視器 和埠監視器伺服器 DLL 可以選擇性地定義 GetPrinterDataFromPort 函式,並在 MONITOR2 結構中包含函式的位址。
函式適用於雙向印表機,而且可以透過下列兩種方式使用:
作為要求語言監視器輪詢印表機埠的方法,可取得儲存在登錄中之印表機特定資訊的目前值。
作為要求埠監視器將I/O控制程式碼傳送至埠驅動程式的方法。
如果語言監視器的 GetPrinterDataFromPort 函式在 pValueName 中收到字串指標,它應該會在提供的輸出緩衝區中傳回值。 一般而言,當應用程式呼叫 GetPrinterData 函式時,字串代表登錄值名稱,而多任務緩衝處理程式會呼叫 GetPrinterDataFromPort。
語言監視器的責任是藉由呼叫埠監視器的 WritePort 函式,以及呼叫 ReadPort 讀取回應,以取得所需的值,將命令傳送至印表機硬體。 例如,pjlmon.dll 範例語言監視器可以傳回埠的「已安裝記憶體」和「可用的記憶體」登錄值名稱的值。
在多任務緩衝處理程式呼叫 GetPrinterDataFromPort 以取得登錄值之後,它會以新的值更新登錄。
一般而言,埠監視器不支援呼叫 GetPrinterDataFromPort ,其中包含 pValueName 中的字串指標。
如果語言監視器的 GetPrinterDataFromPort 函式在 ControlID 中收到非零 I/O 控制程式程式代碼,它應該只會呼叫相關聯的埠監視器 GetPrinterDataFromPort 函式並傳回結果。 核心模式驅動程序參考會列出平行和串行埠的 I/O 控制程式代碼。
當埠監視器的 GetPrinterDataFromPort 函式在 ControlID 中收到非零 I/O 控制項程式代碼時,它應該呼叫 DeviceIOControl 將控件程式代碼傳遞至核心模式埠驅動程式。 lpInBuffer、cbInBuffer、lpOutBuffer、cbOutBuffer 和 lcsReturned 參數值也應該傳遞至 DeviceIOControl。
需要語言監視器才能定義函 OpenPortEx
式,並在 MONITOR2 結構中包含其位址。 當 OpenPortEx
列印佇列連接到埠時,列印後台處理程式會呼叫函式。
函 OpenPortEx
式的主要用途是傳回呼叫端可用來做為輸入自變數的埠句柄,以便後續呼叫語言監視器的 StartDocPort、 WritePort、 ReadPort、 EndDocPort 和 GetPrinterDataFromPort 函式。 由於語言監視器通常會藉由在其相關聯的埠監視器中呼叫對等函式來實作這些函式,因此語言監視器通常會藉由呼叫埠監視器的 OpenPort 函式來取得埠句柄。 如需詳細資訊,請參閱 語言和埠監視器互動。
函 OpenPortEx
式的 pMonitor 參數是埠 監視器MONITOR2結構的 指標。 這個結構包含埠監視器可呼叫函式的指標。 函 OpenPortEx
式應該檢查 結構,以確認所有必要的函式指標都是非 NULL。 如果結構有效,函式應該將它複製到本機記憶體。 否則 OpenPortEx
應該呼叫 SetLastError、指定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 埠的埠監視器必須確定,當多任務緩衝處理程式將印表機數據傳送至埠時,另一個應用程式不會假設埠已連線到特定通訊裝置,然後嘗試與該裝置通訊。 這個警告附注不適用於本機印印提供者,這保證它永遠不會連續呼叫 StartDocPort
兩次,而不需呼叫 EndDocPort,但它也適用於不保證此保證的列印提供者。
規格需求
需求 | 值 |
---|---|
標頭 | winsplp.h (包含 Winsplp.h) |