Announcement

Collapse
No announcement yet.

EnumPrinters Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • EnumPrinters Problem

    Hallo,

    ich habe folgendes Problem:

    Wir haben ein Tool, welches die Drucker-Informationen von zwei Druckservern im Netzwerk ausliest.

    Die Druckserver sind Windows 2000 Server.

    Die Drucker-Informationen werden mit folgendem Befehl ausgelesen:

    EnumPrinters(PRINTER_ENUM_NAME,printername,2,@info Array1,buffer,bufNeeded,numPrinters)

    Das klappte bisher prima. Nach der Installation weiterer Drucker auf einem der Druckserver versagte allerdings der Aufruf, da mehr Printer Information Buffer benötigt wird, wie die Variable bufNeeded mir verraten hat.
    Ich habe daraufhin den Wert für den Buffer auf einen höheren Wert gesetzt und auch die Größe des infoArray1 entsprechend angepasst.
    Nun funktionierte das Auslesen der Druckerinformationen überhaupt nicht mehr. Es kommt die Fehlermeldung "Der Remoteprozeduraufruf ist fehlgeschlagen.

    Ich habe nun festgestellt, dass die Maximale Buffergröße exakt 1048519 Byte beträgt. Dies sind 57 Byte weniger als ein MByte. Die benötigte Buffergröße beträgt allerdings ca. 1067000 Byte.

    Kann mir irgendjemand sagen, ob es eine Einschränkung seitens der Windows API bzw der winspool.drv gibt, dass der Printer Information Buffer nicht größer als 1MB sein darf bzw. ob man dies ggf. durch Änderung eines Registry Keys änden kann.

    Das Problem tritt übrigens nicht nur bei Verwendung von Delphi auf, sondern auch in einem Testprogramm, was ich unter Visual Basic getestet habe. Dies stärkt meine Vermutung, dass es sich hier wohl eher um ein Problem der API handelt.

    Recherchen in der MSDN bzw. in Foren haben mir bisher leider keine Informationen hierzu gebracht.

    Gruß
    Stefan

  • #2
    Ich habe das Problem selbst lösen können.

    Mal wieder die tollen Defaultwerte von Windows...

    Die Größe der "Incoming Data Blocks" eines Remote Procedure Calls ist standardmäßig auf 1048576 Bytes gesetzt.

    Um diese zu vergrößern, muss die Registry auf dem Druckserver angepasst werden. Unter HKLM\System\CurrentControlSet\Control\Print muss ein neuer REG_DWORD namens MaxRpcSize angelegt werden mit einem entsprechend höheren Wert.

    Comment

    Working...
    X