EnumPrinters Fails When Enumerating Connected PrintersLast reviewed: April 29, 1997Article ID: Q153101 |
3.5 3.51
WINDOWS NT
kbprint kbbug3.5 kbbug3.51 kbfix4.00
The information in this article applies to:
SYMPTOMSWhen a service, or an application running in the context of a service (for example, started by the scheduler service), calls EnumPrinters with the PRINTER_ENUM_CONNECTIONS flag to get printer connections to a Windows NT Server, the API might fail with error code 122 (ERROR_INSUFFICIENT_BUFFER) even if you have specified plenty of buffer space. It will return an arbitrary size of memory needed in pcbNeeded. An example of this behavior is starting Print Manager using the scheduler service. Since Print Manager will call this API multiple times to find how much memory it needs, it can end up in multiple scenarios (depending on the value of pcbNeeded): - An out of memory dialog box appears and then Print Manager displays a dialog box stating that it could not get printer information.- Print Manager causes an Access Violation. - SPOOLSS (Spooler Services) causes an Access Violation.
CAUSETo look up the printer connections, the Spooler Service, which implements this API on Windows NT, tries to access the registry of the calling user by accessing its current user hive. However, a service does not have such a hive because it is created by WinLogon and services are logged in by Service Control Manager. The EnumPrinter API did not handle the absence of the current user hive correctly.
STATUSMicrosoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article. The problem will be fixed in Windows NT 4.0. The API will not return connected printers if it cannot access the current user hive.
|
KBCategory: kbprint
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |