[返回]
微电脑机世界1999年第21期

Windows NT网络共享打印机的计账管理

东北大学计算中心 马沂夫

  共享打印的计账管理在整个管理系统中是一个重要环节,它对提高效率、减少浪费是一个有力手段。但Windows NT 本身并未提供共享打印的计账管理功能,这就需要在系统平台上开发计账应用程序。可以在应用程序中通过对系统日志的读取,来获得打印事件的原始数据并进行处理,从而实现Windows NT 网络共享打印的计账管理功能。

一、Windows NT 的共享打印管理机制

  在Windows NT 网络系统中,共享打印的访问控制是基于域用户进行管理的。为了实现共享打印,系统管理员应创建用于共享的打印设备(包括绘图仪)并对其命名(这个名字称为共享名),然后对用户或用户组授予访问权。对于打印客户来说,要求具有合法的权限,即需要用户名和口令、打印服务器名和共享名。使用客户机上的打印机设置功能进行相应的设置即可实现共享打印。
net32_1.jpg (19978 字节)
图1 网络共享打印实例
  如图1 所示,打印服务器名为PrnServ,打印机共享名为LP,授权用户名为User1,在客户机CLT 上设置打印机为\\ PrnServ\LP。由于User1 是被授权的合法用户,当在客户机CLT 上以User1 的身份向PrnServ 发出打印请求时,可在\\ PrnServ\LP 上实现打印。

二、打印计账管理软件的开发

  1 .基本数据的获取
  基本数据的获取是实现打印计账管理的关键。Windows NT 的系统日志较详细地记录了系统服务的各类事件,其中对打印事件记录了客户机器名、用户名、打印时间、文档字节数、打印页数、文档名等信息。应用程序不能直接读取而必须通过调用API 函数才能获得这些信息。下面的程序段访问打印服务器名为PrnServ 的系统日志,并过滤出有关打印的信息。

HANDLE hdle;
EVENTLOGRECORD *ptr;
BYTE buff[4096];
DWORD read_len, next_len;
ptr=(EVENTLOGRECORD *)&buff;
hdle=OpenEventLog("PrnServ", "Print");
// 打开PrnServ上有关打印(Print)的系统日志
if (hdle==NULL) {
// 打开日志失败}
else {
// 打开日志成功}
while(ReadEventLog(hdle,
// 读取系统日志
EVENTLOG_FORWARDS_READ |
EVENTLOG_SEQUENTIAL_READ,
1,
ptr,
sizeof(buff),
&read_len,
&next_len)) {
// 信息处理程序段}
CloseEventLog(hdle);
// 关闭系统日志
  读取的信息以结构EVENTLOGRECORD 中所定义的格式存储在buff 中,通过指针ptr 可以获得这些信息。在信息处理程序段,将获得的信息以记录形式存入数据库,以便进行统计查询。
  这里需要指出的是,应用程序不仅可以读取本机上的系统日志,而且还可以读取其他服务器的系统日志,条件是必须具有Administrator 的权限,这就意味着一个应用程序可以对多台打印服务器进行计账管理。
  2 .软件的查询统计功能
  对共享打印信息的查询统计,实际上是用前端开发工具开发的应用程序对后台数据库的操作。基本功能如图2 所示。
net32_2.jpg (18453 字节)
图2 软件功能
  其中,查询管理可以分别按机器名、打印机名、用户名、文档名等查询,并且可选年、月、日及任意时间段进行统计,得到打印页数、字节量等结果并显示或打印;数据管理主要包括对历史数据的整理、归档等;系统设置包括对打印服务器名、打印机名及ODBC 或BDE 系统数据源的配置信息的管理。
  在数据库应用程序的开发中,对于前端工具和后台数据库有多种选择。前端工具如VB、Delphi、PB、C++ Builder 等都有很好的开发环境,考虑设计用户界面和调用API 函数的方便性,本软件的开发使用了C++ Builder。对于后台数据库,本软件适用于任何ODBC 或BDE 支持的数据库,只要在系统设置功能中进行设置即可。

三、小结

  Windows NT 网络共享打印计账管理软件的设计与开发,可以方便地对打印服务器、客户机、用户和文档名进行计账管理,按时间段统计出文档字节数、打印页数等信息,为MIS 和办公自动化系统提供了一个实用工具。
  Windows NT 系统的日志较详细地记录了系统的各类事件,包括系统服务、安全及应用程序的操作记录,并且提供了事件查看器和读取日志的API 函数,在此基础上,还可以开发与日志信息有关的其他应用,如网络用户登录监视、文件服务计账管理等。