PRINTPROVIDOR 结构 (winsplp.h)

警告

从 Windows 10 开始,支持第三方打印提供程序的 API 已弃用。 Microsoft 不建议对第三方打印提供商进行任何投资。 此外,在提供 v4 打印驱动程序模型的Windows 8和较新的产品上,第三方打印提供商可能不会创建或管理使用 v4 打印驱动程序的队列。

PRINTPROVIDOR 结构用作打印提供程序的 InitializePrintProvidor 函数的参数。 所有结构成员值都由提供程序提供。

语法

typedef struct _PRINTPROVIDOR {
  BOOL( )(PWSTR pPrinterName,PHANDLE phPrinter,PPRINTER_DEFAULTS pDefault)    *fpOpenPrinter;
  BOOL( )(HANDLE hPrinter,DWORD JobId,DWORD Level,LPBYTE pJob,DWORD Command)    *fpSetJob;
  BOOL( )(HANDLE hPrinter,DWORD JobId,DWORD Level,LPBYTE pJob,DWORD cbBuf,LPDWORD pcbNeeded)    *fpGetJob;
  BOOL( )(HANDLE hPrinter,DWORD FirstJob,DWORD NoJobs,DWORD Level,LPBYTE pJob,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned)    *fpEnumJobs;
  HANDLE( )(LPWSTR pName,DWORD Level,LPBYTE pPrinter)  *fpAddPrinter;
  BOOL( )(HANDLE hPrinter)    *fpDeletePrinter;
  BOOL( )(HANDLE hPrinter,DWORD Level,LPBYTE pPrinter,DWORD Command)    *fpSetPrinter;
  BOOL( )(HANDLE hPrinter,DWORD Level,LPBYTE pPrinter,DWORD cbBuf,LPDWORD pcbNeeded)    *fpGetPrinter;
  BOOL( )(DWORD Flags,LPWSTR Name,DWORD Level,LPBYTE pPrinterEnum,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned)    *fpEnumPrinters;
  BOOL( )(LPWSTR pName,DWORD Level,LPBYTE pDriverInfo)    *fpAddPrinterDriver;
  BOOL( )(LPWSTR pName,LPWSTR pEnvironment,DWORD Level,LPBYTE pDriverInfo,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned)    *fpEnumPrinterDrivers;
  BOOL( )(HANDLE hPrinter,LPWSTR pEnvironment,DWORD Level,LPBYTE pDriverInfo,DWORD cbBuf,LPDWORD pcbNeeded)    *fpGetPrinterDriver;
  BOOL( )(LPWSTR pName,LPWSTR pEnvironment,DWORD Level,LPBYTE pDriverDirectory,DWORD cbBuf,LPDWORD pcbNeeded)    *fpGetPrinterDriverDirectory;
  BOOL( )(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pDriverName)    *fpDeletePrinterDriver;
  BOOL( )(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pPathName,LPWSTR pPrintProcessorName)    *fpAddPrintProcessor;
  BOOL( )(LPWSTR pName,LPWSTR pEnvironment,DWORD Level,LPBYTE pPrintProcessorInfo,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned)    *fpEnumPrintProcessors;
  BOOL( )(LPWSTR pName,LPWSTR pEnvironment,DWORD Level,LPBYTE pPrintProcessorInfo,DWORD cbBuf,LPDWORD pcbNeeded)    *fpGetPrintProcessorDirectory;
  BOOL( )(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pPrintProcessorName)    *fpDeletePrintProcessor;
  BOOL( )(LPWSTR pName,LPWSTR pPrintProcessorName,DWORD Level,LPBYTE pDataypes,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned)    *fpEnumPrintProcessorDatatypes;
  DWORD( )(HANDLE hPrinter,DWORD Level,LPBYTE pDocInfo)   *fpStartDocPrinter;
  BOOL( )(HANDLE hPrinter)    *fpStartPagePrinter;
  BOOL( )(HANDLE hPrinter,LPVOID pBuf,DWORD cbBuf,LPDWORD pcWritten)    *fpWritePrinter;
  BOOL( )(HANDLE hPrinter)    *fpEndPagePrinter;
  BOOL( )(HANDLE hPrinter)    *fpAbortPrinter;
  BOOL( )(HANDLE hPrinter,LPVOID pBuf,DWORD cbBuf,LPDWORD pNoBytesRead)    *fpReadPrinter;
  BOOL( )(HANDLE hPrinter)    *fpEndDocPrinter;
  BOOL( )(HANDLE hPrinter,DWORD Level,LPBYTE pData,DWORD cbBuf,LPDWORD pcbNeeded)    *fpAddJob;
  BOOL( )(HANDLE hPrinter,DWORD JobId)    *fpScheduleJob;
  DWORD( )(HANDLE hPrinter,LPWSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded)   *fpGetPrinterData;
  DWORD( )(HANDLE hPrinter,LPWSTR pValueName,DWORD Type,LPBYTE pData,DWORD cbData)   *fpSetPrinterData;
  DWORD( )(HANDLE hPrinter,DWORD Flags)   *fpWaitForPrinterChange;
  BOOL( )(HANDLE hPrinter)    *fpClosePrinter;
  BOOL( )(HANDLE hPrinter,DWORD Level,LPBYTE pForm)    *fpAddForm;
  BOOL( )(HANDLE hPrinter,LPWSTR pFormName)    *fpDeleteForm;
  BOOL( )(HANDLE hPrinter,LPWSTR pFormName,DWORD Level,LPBYTE pForm,DWORD cbBuf,LPDWORD pcbNeeded)    *fpGetForm;
  BOOL( )(HANDLE hPrinter,LPWSTR pFormName,DWORD Level,LPBYTE pForm)    *fpSetForm;
  BOOL( )(HANDLE hPrinter,DWORD Level,LPBYTE pForm,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned)    *fpEnumForms;
  BOOL( )(LPWSTR pName,DWORD Level,LPBYTE pMonitors,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned)    *fpEnumMonitors;
  BOOL( )(LPWSTR pName,DWORD Level,LPBYTE pPorts,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned)    *fpEnumPorts;
  BOOL( )(LPWSTR pName,HWND hWnd,LPWSTR pMonitorName)    *fpAddPort;
  BOOL( )(LPWSTR pName,HWND hWnd,LPWSTR pPortName)    *fpConfigurePort;
  BOOL( )(LPWSTR pName,HWND hWnd,LPWSTR pPortName)    *fpDeletePort;
  HANDLE( )(HANDLE hPrinter,LPDEVMODEW pDevMode)  *fpCreatePrinterIC;
  BOOL( )(HANDLE hPrinterIC,LPBYTE pIn,DWORD cIn,LPBYTE pOut,DWORD cOut,DWORD ul)    *fpPlayGdiScriptOnPrinterIC;
  BOOL( )(HANDLE hPrinterIC)    *fpDeletePrinterIC;
  BOOL( )(LPWSTR pName)    *fpAddPrinterConnection;
  BOOL( )(LPWSTR pName)    *fpDeletePrinterConnection;
  DWORD( )(HANDLE hPrinter,DWORD Error,HWND hWnd,LPWSTR pText,LPWSTR pCaption,DWORD dwType)   *fpPrinterMessageBox;
  BOOL( )(LPWSTR pName,DWORD Level,LPBYTE pMonitorInfo)    *fpAddMonitor;
  BOOL( )(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pMonitorName)    *fpDeleteMonitor;
  BOOL( )(HANDLE hPrinter,LPPRINTER_DEFAULTS pDefault)    *fpResetPrinter;
  BOOL( )(HANDLE hPrinter,LPWSTR pEnvironment,DWORD Level,LPBYTE pDriverInfo,DWORD cbBuf,LPDWORD pcbNeeded,DWORD dwClientMajorVersion,DWORD dwClientMinorVersion,PDWORD pdwServerMajorVersion,PDWORD pdwServerMinorVersion)    *fpGetPrinterDriverEx;
  BOOL( )(HANDLE hPrinter,DWORD fdwFlags,DWORD fdwOptions,HANDLE hNotify,PDWORD pfdwStatus,PVOID pPrinterNotifyOptions,PVOID pPrinterNotifyInit)    *fpFindFirstPrinterChangeNotification;
  BOOL( )(HANDLE hPrinter)    *fpFindClosePrinterChangeNotification;
  BOOL( )(LPWSTR pName,DWORD Level,LPBYTE lpBuffer,LPWSTR lpMonitorName)    *fpAddPortEx;
  BOOL( )(LPVOID pvReserved)    *fpShutDown;
  BOOL( )(HANDLE hPrinter,DWORD Reserved,PVOID pvReserved,PVOID pPrinterNotifyInfo)    *fpRefreshPrinterChangeNotification;
  BOOL( )(LPWSTR pPrinterName,LPHANDLE phPrinter,LPPRINTER_DEFAULTS pDefault,LPBYTE pClientInfo,DWORD Level)    *fpOpenPrinterEx;
  HANDLE( )(LPWSTR pName,DWORD Level,LPBYTE pPrinter,LPBYTE pClientInfo,DWORD ClientInfoLevel)  *fpAddPrinterEx;
  BOOL( )(LPWSTR pName,LPWSTR pPortName,DWORD Level,LPBYTE pPortInfo)    *fpSetPort;
  DWORD( )(HANDLE hPrinter,DWORD dwIndex,LPWSTR pValueName,DWORD cbValueName,LPDWORD pcbValueName,LPDWORD pType,LPBYTE pData,DWORD cbData,LPDWORD pcbData)   *fpEnumPrinterData;
  DWORD( )(HANDLE hPrinter,LPWSTR pValueName)   *fpDeletePrinterData;
  DWORD( )(LPCTSTR pszServer,LPCTSTR pszResource,PHANDLE phSpooler,LPCTSTR pszName,LPCTSTR pszAddress)   *fpClusterSplOpen;
  DWORD( )(HANDLE hSpooler)   *fpClusterSplClose;
  DWORD( )(HANDLE hSpooler)   *fpClusterSplIsAlive;
  DWORD( )(HANDLE hPrinter,LPCWSTR pKeyName,LPCWSTR pValueName,DWORD Type,LPBYTE pData,DWORD cbData)   *fpSetPrinterDataEx;
  DWORD( )(HANDLE hPrinter,LPCWSTR pKeyName,LPCWSTR pValueName,LPDWORD pType,LPBYTE pData,DWORD nSize,LPDWORD pcbNeeded)   *fpGetPrinterDataEx;
  DWORD( )(HANDLE hPrinter,LPCWSTR pKeyName,LPBYTE pEnumValues,DWORD cbEnumValues,LPDWORD pcbEnumValues,LPDWORD pnEnumValues)   *fpEnumPrinterDataEx;
  DWORD( )(HANDLE hPrinter,LPCWSTR pKeyName,LPWSTR pSubkey,DWORD cbSubkey,LPDWORD pcbSubkey)   *fpEnumPrinterKey;
  DWORD( )(HANDLE hPrinter,LPCWSTR pKeyName,LPCWSTR pValueName)   *fpDeletePrinterDataEx;
  DWORD( )(HANDLE hPrinter,LPCWSTR pKeyName)   *fpDeletePrinterKey;
  BOOL( )(HANDLE hPrinter,LARGE_INTEGER liDistanceToMove,PLARGE_INTEGER pliNewPointer,DWORD dwMoveMethod,BOOL bWrite)    *fpSeekPrinter;
  BOOL( )(LPWSTR pName,LPWSTR pEnvironment,LPWSTR pDriverName,DWORD dwDeleteFlag,DWORD dwVersionNum)    *fpDeletePrinterDriverEx;
  BOOL( )(LPCWSTR pServer,LPCWSTR pPrinterName,LPCWSTR pPrintServer,LPCWSTR pProvider)    *fpAddPerMachineConnection;
  BOOL( )(LPCWSTR pServer,LPCWSTR pPrinterName)    *fpDeletePerMachineConnection;
  BOOL( )(LPCWSTR pServer,LPBYTE pPrinterEnum,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned)    *fpEnumPerMachineConnections;
  BOOL( )(HANDLE hXcv,LPCWSTR pszDataName,PBYTE pInputData,DWORD cbInputData,PBYTE pOutputData,DWORD cbOutputData,PDWORD pcbOutputNeeded,PDWORD pdwStatus)    *fpXcvData;
  BOOL( )(LPWSTR pName,DWORD Level,LPBYTE pDriverInfo,DWORD dwFileCopyFlags)    *fpAddPrinterDriverEx;
  BOOL()(HANDLE hPrinter,LPBYTE *pBuf,DWORD cbBuf)    * fpSplReadPrinter;
  BOOL( )(LPWSTR pDriverFile)    *fpDriverUnloadComplete;
  BOOL()(HANDLE hPrinter,LPWSTR *pSpoolDir,LPHANDLE phFile,HANDLE hSpoolerProcess,HANDLE hAppProcess)    * fpGetSpoolFileInfo;
  BOOL( )(HANDLE hPrinter,DWORD cbCommit)    *fpCommitSpoolData;
  BOOL( )(HANDLE hPrinter)    *fpCloseSpoolFileHandle;
  BOOL( )(HANDLE hPrinter,LPBYTE pBuf,DWORD cbBuf,LPDWORD pcWritten,DWORD cSleep)    *fpFlushPrinter;
  DWORD()(HANDLE hPrinter,LPCWSTR pAction,PBIDI_REQUEST_CONTAINER pReqData,PBIDI_RESPONSE_CONTAINER *ppResData)   * fpSendRecvBidiData;
  BOOL( )(LPCWSTR pName,DWORD dwLevel,PVOID pInfo)    *fpAddPrinterConnection2;
#if ...
  HRESULT((PCWSTR, const IID &,VOID **) * )fpGetPrintClassObject;
#else
  HRESULT(PCWSTR, const IID *,VOID **) * )(fpGetPrintClassObject;
#endif
  HRESULT( )(HANDLE hPrinter,ULONG jobId,EPrintXPSJobOperation jobOperation,EPrintXPSJobProgress jobProgress) *fpReportJobProcessingProgress;
  VOID()(DWORD dwLevel,VOID *pfOut)    * fpEnumAndLogProvidorObjects;
  HRESULT( )(HANDLE hPrinter,LPWSTR pEnvironment,DWORD Level,LPBYTE pDriverInfo,DWORD cbBuf,LPDWORD pcbNeeded,DWORD dwClientMajorVersion,DWORD dwClientMinorVersion,PDWORD pdwServerMajorVersion,PDWORD pdwServerMinorVersion) *fpInternalGetPrinterDriver;
  HRESULT( )(LPCWSTR pcszPnpId,LPCWSTR pcszPortName,LPWSTR pszManufacturerName,DWORD cchManufacturerName,LPDWORD pcchRequiredManufacturerNameSize,LPWSTR pszModelName,DWORD cchModelName,LPDWORD pcchRequiredModelNameSize,LPDWORD pdwRank0Matches) *fpFindCompatibleDriver;
  HRESULT( )(LPCWSTR pcszConnectionName) *fpInstallPrinterDriverPackageFromConnection;
  DWORD()(HANDLE hPrinter,DWORD JobId,PCWSTR pszName,PrintPropertyValue *pValue)   * fpGetJobNamedPropertyValue;
  DWORD()(HANDLE hPrinter,DWORD JobId, const PrintNamedProperty *pProperty)   * fpSetJobNamedProperty;
  DWORD( )(HANDLE hPrinter,DWORD JobId,PCWSTR pszName)   *fpDeleteJobNamedProperty;
  DWORD(HANDLE hPrinter,DWORD JobId,DWORD *pcProperties,PrintNamedProperty **ppProperties)   * )(fpEnumJobNamedProperties;
  DWORD()(DWORD event,POWERBROADCAST_SETTING *pPowerSetting)   * fpPowerEvent;
  DWORD()(HANDLE hPrinter,HKEY *phKey)   * fpGetUserPropertyBag;
  BOOL( )()    *fpCanShutdown;
  DWORD( )(HANDLE hPrinter,PBranchOfficeJobDataContainer pJobDataContainer)   *fpLogJobInfoForBranchOffice;
  DWORD( )(HANDLE hPrinter)   *fpRegeneratePrintDeviceCapabilities;
  HRESULT( )(HANDLE hPrinter,DWORD JobId,DWORD dwOperationType,LPBYTE pInputData,DWORD cbInputData,LPDWORD pcWritten) *fpPrintSupportOperation;
  HRESULT()(HANDLE hPrinter,DWORD jobId,PCWSTR pdlFormat,DWORD jobAttributesBufferSize,PBYTE jobAttributeGroupBuffer,PDWORD ippResponseBufferSize,PBYTE *ippResponseBuffer) * fpIppCreateJobOnPrinter;
  HRESULT(NDLE hPrinter,DWORD JobId,DWORD attributeNameCount, const wchar_t **attributeNames,DWORD *ippResponseBufferSize,BYTE **ippResponseBuffer) * )(HAfpIppGetJobAttributes;
  HRESULT(ANDLE hPrinter,DWORD JobId,DWORD jobAttributeGroupBufferSize,BYTE *jobAttributeGroupBuffer,DWORD *ippResponseBufferSize,BYTE **ippResponseBuffer) * )(HfpIppSetJobAttributes;
  HRESULT(NDLE hPrinter,DWORD attributeNameCount, const wchar_t **attributeNames,DWORD *ippResponseBufferSize,BYTE **ippResponseBuffer) * )(HAfpIppGetPrinterAttributes;
  HRESULT(ANDLE hPrinter,DWORD jobAttributeGroupBufferSize,BYTE *jobAttributeGroupBuffer,DWORD *ippResponseBufferSize,BYTE **ippResponseBuffer) * )(HfpIppSetPrinterAttributes;
  HRESULT()(HANDLE hPrinter,DWORD jobId,PCWSTR pdlFormat,DWORD jobAttributesBufferSize,PBYTE jobAttributeGroupBuffer,DWORD operationAttributesBufferSize,PBYTE operationAttributeGroupBuffer,PDWORD ippResponseBufferSize,PBYTE *ippResponseBuffer) * fpIppCreateJobOnPrinterWithAttributes;
} PRINTPROVIDOR, *LPPRINTPROVIDOR;

成员

fpOpenPrinter

(Required.) 指向提供程序的 OpenPrinter 函数的指针。 但是,在提供程序级别,此函数必须提供下表中列出的 DWORD 返回值之一。

返回值 定义
ROUTER_SUCCESS 提供程序支持指定的打印机并已将其打开。
ROUTER_STOP_ROUTING 提供程序支持指定的打印机,但发生错误,无法打开打印机。 假定没有其他提供程序可以支持打印机。 该函数必须调用 SetLastError
ROUTER_UNKNOWN 提供程序不支持指定的打印机。 该函数必须调用 SetLastError 并指定ERROR_INVALID_NAME。

路由器调用每个提供程序,直到其中一个提供程序返回ROUTER_SUCCESS或ROUTER_STOP_ROUTING。 如果提供程序返回ROUTER_SUCCESS,则它还必须返回唯一句柄。 有关详细信息,请参阅 打印提供程序简介。) 路由器首先尝试调用提供程序的 OpenPrinterEx 函数。 如果不支持该函数,路由器将调用 OpenPrinter

fpSetJob

(Required.) 指向提供程序的 SetJob 函数的指针。

fpGetJob

(Required.) 指向提供程序的 GetJob 函数的指针。

fpEnumJobs

(Required.) 指向提供程序的 EnumJobs 函数的指针。

fpAddPrinter

(可选。可以为 NULL.) 指向提供程序的 AddPrinter 函数的指针。

fpDeletePrinter

(可选。可以为 NULL.) 指向提供程序的 DeletePrinter 函数的指针。

fpSetPrinter

(Required.) 指向提供程序的 SetPrinter 函数的指针。

fpGetPrinter

(Required.) 指向提供程序的 GetPrinter 函数的指针。 如果要 编写网络打印提供程序 ,并且 GetPrinter 返回 PRINTER_INFO_2 结构,则函数应仅提供 cJobsStatus 结构成员。 本地打印提供程序) 提供其余结构成员。

fpEnumPrinters

(Required.) 指向提供程序的 EnumPrinters 函数的指针。

fpAddPrinterDriver

(可选。可以为 NULL.) 指向提供程序的 AddPrinterDriver 函数的指针。 如果提供程序不支持指定的驱动程序或服务器,则应在返回 FALSE 之前将 ERROR_INVALID_NAME 指定为 SetLastError

fpEnumPrinterDrivers

(可选。可以为 NULL.) 指向提供程序的 EnumPrinterDrivers 函数的指针。 如果提供程序不支持指定的服务器,则应在返回 FALSE 之前将 ERROR_INVALID_NAME 指定为 SetLastError

fpGetPrinterDriver

(可选。可以为 NULL.) 指向提供程序的 GetPrinterDriver 函数的指针。 路由器首先尝试调用提供程序的 GetPrinterDriverEx 函数。 如果不支持该函数,则路由器将调用 GetPrinterDriver

fpGetPrinterDriverDirectory

(可选。可以为 NULL.) 指向提供程序的 GetPrinterDriverDirectory 函数的指针。 如果提供程序不支持指定的服务器,则应在返回 FALSE 之前将 ERROR_INVALID_NAME 指定为 SetLastError

fpDeletePrinterDriver

(可选。可以为 NULL.) 指向提供程序的 DeletePrinterDriver 函数的指针。 如果提供程序不支持指定的服务器,则应在返回 FALSE 之前将 ERROR_INVALID_NAME 指定为 SetLastError

fpAddPrintProcessor

(可选。可以为 NULL.) 指向提供程序的 AddPrintProcessor 函数的指针。

fpEnumPrintProcessors

(可选。可为 NULL.) 指向提供程序的 EnumPrintProcessors 函数的指针。

fpGetPrintProcessorDirectory

(可选。可以为 NULL.) 指向提供程序的 GetPrintProcessorDirectory 函数的指针。

fpDeletePrintProcessor

(可选。可以为 NULL.) 指向提供程序的 DeletePrintProcessor 函数的指针。

fpEnumPrintProcessorDatatypes

(可选。可以为 NULL.) 指向提供程序的 EnumPrintProcessorDatatypes 函数的 指针。

fpStartDocPrinter

(Required.) 指向提供程序的 StartDocPrinter 函数的指针。

fpStartPagePrinter

(可选。可以为 NULL.) 指向提供程序的 StartPagePrinter 函数的指针。

fpWritePrinter

(Required.) 指向提供程序的 WritePrinter 函数的指针。

fpEndPagePrinter

(可选。可以为 NULL.) 指向提供程序的 EndPagePrinter函数的指针。

fpAbortPrinter

(Required.) 指向提供程序的 AbortPrinter 函数的指针。

fpReadPrinter

(可选。可以为 NULL.) 指向提供程序的 ReadPrinter 函数的指针。

fpEndDocPrinter

(Required.) 指向提供程序的 EndDocPrinter 函数的指针。

fpAddJob

(Required.) 指向提供程序的 AddJob 函数的指针。

fpScheduleJob

(Required.) 指向提供程序的 ScheduleJob 函数的指针。

fpGetPrinterData

(可选。可以为 NULL.) 指向提供程序的 GetPrinterData 函数的指针。

fpSetPrinterData

(可选。可以为 NULL.) 指向提供程序的 SetPrinterData 函数的指针。

fpWaitForPrinterChange

已过时。 必须为 NULL。

fpClosePrinter

(Required.) 指向提供程序的 ClosePrinter 函数的指针。 如果已创建打印机更改通知对象,则路由器会在调用 ClosePrinter 之前调用提供程序的 FindClosePrinterChangeNotification 函数。

fpAddForm

(可选。可以为 NULL.) 指向提供程序的 AddForm 函数的指针。

fpDeleteForm

(可选。可以为 NULL.) 指向提供程序的 DeleteForm 函数的指针。

fpGetForm

(可选。可以为 NULL.) 指向提供程序的 GetForm 函数的指针。

fpSetForm

(可选。可以为 NULL.) 指向提供程序的 SetForm 函数的指针。

fpEnumForms

(可选。可以为 NULL.) 指向提供程序的 EnumForms 函数的 指针。

fpEnumMonitors

(可选。可以是 NULL.) 指向提供程序的 EnumMonitors 函数的指针,如Windows SDK文档中所述。 但是,在提供程序级别,此函数必须提供下表中列出的 DWORD 返回值之一。

返回值 定义
ROUTER_SUCCESS 提供程序已枚举指定服务器上的监视器。
ROUTER_STOP_ROUTING 提供程序枚举了指定服务器上的监视器,路由器不应调用其他提供程序。
ROUTER_UNKNOWN 提供程序不支持指定的服务器。

fpEnumPorts

返回值 定义
ROUTER_SUCCESS 提供程序已枚举指定服务器上的端口。
ROUTER_STOP_ROUTING 提供程序枚举了指定服务器上的端口,路由器不应调用其他提供程序。
ROUTER_UNKNOWN 提供程序不支持指定的服务器。

fpAddPort

(可选。可以为 NULL.) 指向提供程序的 AddPort 函数的指针。 如果提供程序不支持指定的端口,则必须在返回 FALSE 之前向 SetLastError 提供ERROR_NOT_SUPPORTED。

fpConfigurePort

(Required.) 指向提供程序的 ConfigurePort 函数的指针。 如果函数向 SetLastError 提供ERROR_NOT_SUPPORTED、ERROR_INVALID_NAME或ERROR_UNKNOWN_PORT,则路由器将尝试调用另一个提供程序。

fpDeletePort

(Required.) 指向提供程序的 DeletePort 函数的指针。 如果提供程序不支持指定的端口,则必须在返回 FALSE 之前向 SetLastError 提供ERROR_NOT_SUPPORTED。

fpCreatePrinterIC

仅限内部使用。 必须为 NULL。

fpPlayGdiScriptOnPrinterIC

仅限内部使用。 必须为 NULL。

fpDeletePrinterIC

仅限内部使用。 必须为 NULL。

fpAddPrinterConnection

(可选。可以为 NULL.) 指向提供程序的 AddPrinterConnection 函数的指针。

fpDeletePrinterConnection

(可选。可以为 NULL.) 指向提供程序的 DeletePrinterConnection 函数的指针。

fpPrinterMessageBox

未使用。 必须为 NULL。

fpAddMonitor

(可选。可以为 NULL.) 指向提供程序的 AddMonitor 函数的指针。 如果提供程序不支持指定的监视器,则必须在返回 FALSE 之前向 SetLastError 提供ERROR_INVALID_NAME。

fpDeleteMonitor

(可选。可以为 NULL.) 指向提供程序的 DeleteMonitor 函数的指针。 如果提供程序不支持指定的监视器,则必须在返回 FALSE 之前向 SetLastError 提供ERROR_INVALID_NAME。

fpResetPrinter

(可选。可以为 NULL.) 指向提供程序的 ResetPrinter 函数的指针。

fpGetPrinterDriverEx

(可选。可以为 NULL.) 指向提供程序的 GetPrinterDriverEx 函数的指针。 如果 不支持 GetPrinterDriverEx ,路由器将尝试调用 GetPrinterDriver

fpFindFirstPrinterChangeNotification

(可选。可以为 NULL.) 指向提供程序的 FindFirstPrinterChangeNotification 函数的指针。

fpFindClosePrinterChangeNotification

(可选。可以为 NULL.) 指向提供程序的 FindClosePrinterChangeNotification 函数的指针。

fpAddPortEx

(可选。可以为 NULL.) 指向提供程序的 AddPortEx 函数的指针。 如果提供程序不支持指定的端口,则必须在返回 FALSE 之前向 SetLastError 提供ERROR_NOT_SUPPORTED。

fpShutDown

仅限内部使用。 必须为 NULL。

fpRefreshPrinterChangeNotification

(可选。可以为 NULL.) 指向提供程序的 RefreshPrinterChangeNotification 函数的指针。

fpOpenPrinterEx

仅限内部使用。 必须为 NULL。

fpAddPrinterEx

仅限内部使用。 必须为 NULL。

fpSetPort

(可选。可以为 NULL.) 指向提供程序的 SetPort 函数的指针。 如果函数向 SetLastError 提供ERROR_NOT_SUPPORTED、ERROR_INVALID_NAME或ERROR_UNKNOWN_PORT,则路由器将尝试调用另一个提供程序。

fpEnumPrinterData

(可选。可以为 NULL.) 指向提供程序的 EnumPrinterData 函数的指针。

fpDeletePrinterData

(可选。可以为 NULL.) 指向提供程序的 DeletePrinterData 函数的指针。

fpClusterSplOpen

仅限内部使用。 必须为 NULL。

fpClusterSplClose

仅限内部使用。 必须为 NULL。

fpClusterSplIsAlive

仅限内部使用。 必须为 NULL。

fpSetPrinterDataEx

(可选。可以为 NULL.) 指向提供程序的 SetPrinterDataEx 函数的指针。

fpGetPrinterDataEx

(可选。可以为 NULL.) 指向提供程序的 GetPrinterDataEx 函数的指针。

fpEnumPrinterDataEx

(可选。可以为 NULL.) 指向提供程序的 EnumPrinterDataEx 函数的指针。

fpEnumPrinterKey

(可选。可以为 NULL.) 指向提供程序的 EnumPrinterKey 函数的指针。

fpDeletePrinterDataEx

(可选。可以为 NULL.) 指向提供程序的 DeletePrinterDataEx 函数的指针。

fpDeletePrinterKey

(可选。可以为 NULL.) 指向提供程序的 DeletePrinterKey 函数的指针。

fpSeekPrinter

仅限内部使用。 必须为 NULL。

fpDeletePrinterDriverEx

(可选。可以为 NULL.) 指向提供程序的 DeletePrinterDriverEx 函数的指针。 如果提供程序不支持指定的服务器,则应在返回 FALSE 之前将 ERROR_INVALID_NAME 指定为 SetLastError

fpAddPerMachineConnection

仅限内部使用。 必须为 NULL。

fpDeletePerMachineConnection

仅限内部使用。 必须为 NULL。

fpEnumPerMachineConnections

仅限内部使用。 必须为 NULL。

fpXcvData

(可选。可以为 NULL.) 指向提供程序的 XcvData 函数的指针。

fpAddPrinterDriverEx

(可选。可以为 NULL.) 指向提供程序的 AddPrinterDriverEx 函数的指针。 如果提供程序不支持指定的服务器,则应在返回 FALSE 之前将 ERROR_INVALID_NAME 指定为 SetLastError

fpSplReadPrinter

仅限内部使用。 必须为 NULL。

fpDriverUnloadComplete

仅限内部使用。 必须为 NULL。

fpGetSpoolFileInfo

仅限内部使用。 必须为 NULL。

fpCommitSpoolData

仅限内部使用。 必须为 NULL。

fpCloseSpoolFileHandle

仅限内部使用。 必须为 NULL。

fpFlushPrinter

仅限内部使用。 必须为 NULL。

fpSendRecvBidiData

(可选。可以为 NULL.) 指向提供程序的 SendRecvBidiData 函数的指针。 如果此参数为 NULL,则表示提供程序不支持 bidi 通信。

fpAddPrinterConnection2

仅限内部使用。 必须为 NULL。

fpGetPrintClassObject

仅限内部使用。 必须为 NULL。

fpReportJobProcessingProgress

仅限内部使用。 必须为 NULL。

fpEnumAndLogProvidorObjects

仅限内部使用。 必须为 NULL。

fpInternalGetPrinterDriver

仅限内部使用。 必须为 NULL。

fpFindCompatibleDriver

仅限内部使用。 必须为 NULL。

fpInstallPrinterDriverPackageFromConnection

仅限内部使用。 必须为 NULL。

fpGetJobNamedPropertyValue

仅限内部使用。 必须为 NULL。

fpSetJobNamedProperty

仅限内部使用。 必须为 NULL。

fpDeleteJobNamedProperty

仅限内部使用。 必须为 NULL。

fpEnumJobNamedProperties

仅限内部使用。 必须为 NULL。

fpPowerEvent

仅限内部使用。 必须为 NULL。

fpGetUserPropertyBag

仅限内部使用。 必须为 NULL。

fpCanShutdown

仅限内部使用。 必须为 NULL。

fpLogJobInfoForBranchOffice

仅限内部使用。 必须为 NULL。

fpRegeneratePrintDeviceCapabilities

仅限内部使用。 必须为 NULL。

fpPrintSupportOperation

仅限内部使用。 必须为 NULL。

fpIppCreateJobOnPrinter

仅限内部使用。 必须为 NULL。

fpIppGetJobAttributes

仅限内部使用。 必须为 NULL。

fpIppSetJobAttributes

仅限内部使用。 必须为 NULL。

fpIppGetPrinterAttributes

仅限内部使用。 必须为 NULL。

fpIppSetPrinterAttributes

仅限内部使用。 必须为 NULL。

fpIppCreateJobOnPrinterWithAttributes

仅限内部使用。 必须为 NULL。

注解

函数指针按在 PRINTPROVIDOR 结构中指定的顺序列出。 若要查看按相关功能分组的函数说明,请参阅 打印提供程序定义的函数

要求

要求
Header winsplp.h (包括 Winsplp.h)

另请参阅

FindFirstPrinterChangeNotification

InitializePrintProvidor

RefreshPrinterChangeNotification

SendRecvBidiData

XcvData