描述
AddPrinter功能将打印机添加到指定服务器支持的打印机列表中。
C++ 语法
HANDLE AddPrinter( __in LPTSTR *pName, __in DWORD Level, __in LPBYTE pPrinter ); |
PowerBASIC 语法
FUNCTION AddPrinterA ( _ BYREF pName AS ASCIIZ, _ BYVAL Level AS DWORD, _ BYREF pPrinter AS ANY _ ) AS DWORD |
Unicode版本:
FUNCTION AddPrinterW ( _ BYREF pName AS WSTRINGZ, _ BYVAL Level AS DWORD, _ BYREF pPrinter AS ANY _ ) AS LONG |
参数
pName
[in]指向指定要在其上安装打印机的服务器的名称的以空值终止的字符串的指针。如果此字符串为NULL,则打印机将在本地安装。
Windows 95/98 / Me:此参数必须为NULL。AddPrinter功能只能安装本地打印机。
Level
[in]指定pPrinter指向的结构的版本。该值必须为2。
pPrinter
[in]指向包含有关打印机信息的PRINTER_INFO_2结构的指针。在调用AddPrinter之前,必须为此结构的pPrinterName,pPortName,pDriverName和pPrintProcessor成员指定非NULL值。
返回值
如果函数成功,则返回值是新的打印机对象的句柄(而不是线程安全的)。完成句柄后,将其传递给ClosePrinter函数以关闭它。
如果函数失败,返回值为NULL。
备注
不要在DllMain中调用此方法。
来电者必须有SeLoadDriverPrivilege.
返回的句柄不是线程安全的。如果呼叫者需要在多个线程上同时使用,则它们必须通过Win32同步功能提供对打印机句柄的自定义同步访问。为避免编写自定义代码,应用程序可以根据需要打开每个线程上的打印机句柄。
以下是可以在调用AddPrinter函数之前设置的PRINTER_INFO_2结构的成员:
属性
pPrintProcessor
DefaultPriority
优先
pComment
pSecurityDescriptor
pDatatype
pSepFile
pDevMode
pShareName
pLocationla
StartTime
pParameters
UntilTime
AveragePPMAveragePPM和AveragePPMAveragePPM结构的成员保留供GetPrinter功能使用。不要在调用AddPrinter之前设置它们。
Windows NT / 2000 / XP / Vista / Windows 7:如果pSecurityDescriptor为NULL,系统会为打印机分配默认安全描述符。默认安全描述符具有以下权限。
值 |
描述 |
管理员和高级用户 |
完全控制打印队列。这意味着这些组的成员可以打印,管理队列(可以删除队列,更改队列的任何设置,包括安全描述符),并管理everybodys作业(删除,暂停,恢复,重新启动作业)。
请注意,高级用户在Windows XP Professional之前不存在。 |
Creator/Owner |
可以管理自己的工作。这意味着提交作业的用户可以管理(删除,暂停,恢复,重新启动)自己的作业。 |
大家 |
执行和标准读取控制。这意味着每个组的成员都可以打印和读取打印队列的属性。 |
应用程序创建具有AddPrinter功能的打印机对象后,必须使用PrinterProperties功能指定与打印机对象关联的打印机驱动程序的正确设置。
如果具有相同名称的打印机对象已存在,AddPrinter函数将返回错误,除非该对象被标记为待删除。在这种情况下,现有打印机不会被删除,AddPrinter创建参数用于更改现有的打印机设置(就像应用程序使用了SetPrinter功能一样)。
使用EnumPrintProcessors功能枚举安装在服务器上的一组打印处理器。使用EnumPrintProcessorDatatypes功能枚举打印处理器支持的数据类型集。使用EnumPorts功能枚举可用端口集。使用EnumPrinterDrivers功能枚举已安装的打印机驱动程序。
Windows NT / 2000 / XP / Vista / Windows 7:AddPrinter函数的调用者必须对要在其上创建打印机的服务器进行SERVER_ACCESS_ADMINISTER访问。该函数返回的句柄将具有PRINTER_ALL_ACCESS权限,可用于对打印机执行管理操作。
Windows 95/98 / Me:Windows 95不支持打印机对象的访问验证或安全性。
Windows XP:如果DrvPrinterEvent函数传递PRINTER_EVENT_FLAG_NO_UI标志,驱动程序不应在DrvPrinterEvent期间使用UI调用。要执行与UI相关的作业,安装程序应使用打印机的.inf文件中的VendorSetup条目,或者对于即插即用设备,安装程序可以使用特定于设备的共同安装程序。有关VendorSetup的更多信息,请参阅Microsoft Windows 2000驱动程序开发工具包。
Windows XP SP2 / Vista / Windows 7:默认情况下,Internet连接防火墙(ICF)阻止打印机端口,但是当您运行AddPrinter时,文件和打印共享的异常将被启用。
Windows 95/98 / Me:Microsoft Layer for Unicode支持AddPrinterW.
引用文件 #INCLUDE Once
WinSpool.inc(包括Windows.inc)