AKADEMIA GÓRNICZO-HUTNICZA



Podobne dokumenty
Samsung Universal Print Driver Podręcznik użytkownika

Instrukcje dotyczące systemu Windows w przypadku drukarki podłączonej lokalnie

INSTALACJA LICENCJI SIECIOWEJ NET HASP Wersja 8.32

Drukarki termosublimacyjne

INSTRUKCJA INSTALACJI DRUKARKI. (Dla Windows CP-D70DW/D707DW)

Laboratorium Ericsson HIS NAE SR-16

Definiowanie drukarek w programie ZAFIR

Instrukcje dotyczące systemu Windows w przypadku drukarki podłączonej lokalnie

VComNet Podręcznik użytkownika. VComNet. Podręcznik użytkownika Wstęp

Instalacja i konfiguracja Symfonia.Common.Server oraz Symfonia.Common.Forte

Instrukcje ustawień funkcji zwalniania wydruku

Pracownia internetowa w szkole ZASTOSOWANIA

1. Instalacja systemu Integra 7

Zarządzanie rolami jakie może pełnić serwer System prosi o wybór roli jaklą ma spełniać serwer.

Instalacja serwera Firebird

OPTIMA PC v Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA ELFON. Instrukcja obsługi. Rev 1

Tomasz Greszata - Koszalin

INSTRUKCJA INSTALACJI

Instrukcja konfiguracji funkcji skanowania

Instrukcja instalacji połączenia sterownika PL11-MUT24 ze stroną internetową.

Fiery Remote Scan. Uruchamianie programu Fiery Remote Scan. Skrzynki pocztowe

SPOSOBY DYSTRYBUCJI OPROGRAMOWANIA PANDA

Połączenia. Obsługiwane systemy operacyjne. Instalowanie drukarki przy użyciu dysku CD Oprogramowanie i dokumentacja

Biuletyn techniczny. CDN OPT!MA 12.0 Drukarki fiskalne w usługach terminalowych. Copyright 2007 COMARCH SA

Windows 10 - Jak uruchomić system w trybie

DHL CAS ORACLE Wymagania oraz instalacja

SKRó CONA INSTRUKCJA OBSŁUGI

BSX PRINTER INSTRUKCJA UŻYTKOWNIKA. Autor: Karol Wierzchołowski 30 marca 2015

SERWER AKTUALIZACJI UpServ

Dział Dopuszczający Dostateczny Dobry Bardzo dobry Celujący

Instrukcja postępowania w procesie aktualizacji systemu UPLOOK / STATLOOK z wersji 3.0 do wersji 3.2

SERWER AKTUALIZACJI UpServ

Zadanie1: Odszukaj w serwisie internetowym Wikipedii informacje na temat protokołu http.

INSTRUKCJA OBSŁUGI DLA SIECI

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED

Instrukcja instalacji i obsługi programu Szpieg 3

Asix. Konfiguracja serwera MS SQL dla potrzeb systemu Asix. Pomoc techniczna NIEZAWODNE ROZWIĄZANIA SYSTEMÓW AUTOMATYKI

UNIFON podręcznik użytkownika

Podręcznik instalacji Command WorkStation 5.6 z aplikacjami Fiery Extended Applications 4.2

System Kancelaris. Zdalny dostęp do danych

Instrukcje ustawień funkcji zwalniania wydruku

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego

SERWER AKTUALIZACJI UpServ

Instrukcje instalacji pakietu IBM SPSS Data Access Pack dla systemu Windows

Dokonaj instalacji IIS opublikuj stronę internetową z pierwszych zajęć. Ukaże się kreator konfigurowania serwera i klikamy przycisk Dalej-->.

Generator Wniosków o Dofinansowanie dla Regionalnego Programu Operacyjnego Województwa Podlaskiego na lata Instrukcja instalacji

7 Business Ship Control dla Symfonia Handel

Połączenia. Instalowanie drukarki lokalnie (Windows) Co to jest drukowanie lokalne?

Wykaz zmian w aplikacji USCWIN wersja 2.1 z dnia

Biuletyn techniczny. Drukarki fiskalne w usługach terminalowych. Comarch OPT!MA Copyright 2007 COMARCH SA

Serwer druku w Windows Server

COLOR LASERJET ENTERPRISE CM4540 MFP SERIES. Instrukcje instalowania oprogramowania

Serwer Sieci Web (IIS)

Zarządzanie licencjami dla opcji Fiery na komputerze klienta

Opcje Fiery1.3 pomoc (klient)

Rozdział 8. Sieci lokalne

Przykłady. Instalacja roli serwera wydruku

KONFIGURACJA INTERFEJSU SIECIOWEGO

8. Sieci lokalne. Konfiguracja połączenia lokalnego

11. Rozwiązywanie problemów

Instalacja i konfiguracja SAS PC Files Server

Zasady współpracy programu Doradca Handlowy z Symfonią

Dokumentacja instalatora środowiska obsługi kart mikroprocesorowych w wersji Spis treści

Udostępnianie drukarek za pomocą systemu Windows (serwer wydruku).

1. Podręcznik instalacji aplikacji EXR Creator Wstęp Instalacja Instalacja aplikacji EXR Creator z płyty CD

IBM SPSS Statistics Wersja 22. Linux - Instrukcja instalacji (licencja autoryzowanego użytkownika)

LASERJET ENTERPRISE M4555 MFP SERIES. Instrukcje instalowania oprogramowania

Brinet sp. z o.o. wyłączny przedstawiciel DrayTek w Polsce

NPS-520. Serwer druku do urządzeń wielofukcyjnych. Skrócona instrukcja obsługi. Wersja 1.00 Edycja 1 11/2006

Zadanie1: Odszukaj w serwisie internetowym Wikipedii informacje na temat protokołu ftp.

Oprogramowanie Capture Pro

1. Opis. 2. Wymagania sprzętowe:

Instrukcja instalacji oprogramowania Systemu e-kt

e-audytor v.3.x INSTRUKCJA INSTALACJI I URUCHOMIENIA SYSTEMU

Szpieg 2.0 Instrukcja użytkownika

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED

enova Instalacja wersji demo

Silent setup SAS Enterprise Guide (v 3.x)

WINDOWS Instalacja serwera WWW na systemie Windows XP, 7, 8.

Przed skonfigurowaniem tego ustawienia należy skonfigurować adres IP urządzenia.

NIEZAWODNE ROZWIĄZANIA SYSTEMÓW AUTOMATYKI. asix. Aktualizacja pakietu asix 4 do wersji 5 lub 6. Pomoc techniczna

Materiały dodatkowe. Simulink Real-Time

Dokumentacja techniczna

Instrukcja obsługi urządzenia DS150E z systemem operacyjnym Windows 7. Dangerfield luty 2010 V1.0 Delphi PSS

Fiery Remote Scan. Łączenie z serwerami Fiery servers. Łączenie z serwerem Fiery server przy pierwszym użyciu

Instrukcjaaktualizacji

Krótka instrukcja instalacji

Oprogramowanie uproszczonej rejestracji komputerowej dla central analogowych CALLNET - instrukcja instalacji i obsługi (wersja 15.1).

AKTYWNY SAMORZĄD. Instrukcja instalacji, aktualizacji i konfiguracji.

7 Business Ship Control dla Systemu Zarządzania Forte

1. Moduł Print Master

Komentarz technik teleinformatyk 312[02]-02 Czerwiec 2009

Geneza rejestru systemu Windows

Instrukcja konfiguracji drukarki HP LaserJet 1018 dla systemu dreryk

INSTRUKCJA UŻYTKOWANIA CZYTNIKA KART PROCESOROWYCH SYGNET 5v1 IU SY5

Program Płatnik Instrukcja instalacji

Wskazówki do instalacji Systemu Symfonia Forte. Szybki start

Instrukcja użytkownika ARSoft-WZ1

Kancelaria Prawna.WEB - POMOC

PODRĘCZNIK UŻYTKOWNIKA programu Automat 3

Transkrypt:

AKADEMIA GÓRNICZO-HUTNICZA Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki KATEDRA INFORMATYKI Remote Printer alternatywna usługa zdalnego wydruku dla systemów Microsoft Windows Kierunek, rok studiów: Wersja 0.1-20 z dnia 05.07.2004 Informatyka, rok IV Przedmiot: Administracja systemami komputerowymi Grupa (projekt): Prowadzący zajęcia: Rok akad: 2003/2004 dr inż. Rafał Wcisło Semestr: letni Zespół autorski: Paweł Zawada Bogdan Tomczyk Marek Wiącek Paweł Witek Kraków, lipiec 2004

Spis treści 1. Wstęp. 3 1.1. Architektura 3 1.2. Narzędzia i środowisko uruchomieniowe 4 1.3. Kompilacja 5 2. Implementacja. 6 2.1. Sterownik. 6 2.1.1. Opis drukarki - GPD 6 2.1.2. Implementacja interfejsu użytkownika 7 2.1.3. Problemy 9 2.2. Print Processor. 10 2.2.1. Zasada działania 10 2.2.2. Problemy 11 2.3. Serwer wydruku. 11 3. Instalacja. 16 3.1. Problemy 18 4. Inne możliwe rozwiązania 19 4.1. Przesyłanie kompletnych plików spoolera (shd, spl) 19 4.2. Wirtualny port równoległy 19 5. Wykorzystane materiały 21 Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 2 Długość: 307 kb 2

1. Wstęp. Celem niniejszego projektu było stworzenie wirtualnego sterownika drukarki pozwalającego na zdalne drukowanie dokumentów w systemie Windows. Z uwagi na różnice w obsłudze wydruku pomiędzy różnymi wersjami systemu Windows powstały sterownik początkowo działał tylko pod obsługą Windows 2000, w wersji ostatecznej dodana została obsługa Windows XP. Zarówno sterownik, jak i serwer wydruku są w pełni konfigurowalne za pomocą graficznego interfejsu użytkownika. 1.1. Architektura Ogólny schemat architektury usługi drukowania w systemie Windows został przedstawiony na Rysunek 1 Rysunek 1. Architektura usługi wydruku w Windows (źródło: MSDN) W dużym uproszczeniu interesujące nas etapy procesu wydruku są następujące: 1. aplikacja użytkownika konfiguruje parametry wydruku i przekazuje drukowany dokument do sterownika drukarki 2. jeśli printprocesor skonfigurowany jest w trybie EMF (a tylko ta sytuacja nas interesuje) plik kolejkowany jest w katalogu spoolera, po wcześniejszej konwersji poszczególnych stron do formatu EMF Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 3 Długość: 307 kb 3

3. uruchamiany jest printprocesor celem dodatkowej, zależnej od konkretnego urządzenia, obróbki pliku 4. faza właściwego wydruku poprzez portmonitor i port drukarki Po rozważeniu wielu możliwości (opisanych w rozdziale Inne możliwe rozwiązania) zdecydowaliśmy, że nasze rozwiązanie będzie przeźroczystym(na tyle na ile to możliwe) pośrednikiem między fazami 3 i 4 powyższego algorytmu. Wymagało to stworzenia następujących własnych elementów architektury usługi wydruku: sterownika wirtualnej drukarki (opartego o ogólny sterownik UNIDRV i specyfikację GPD - Generic Printer Description). Sterownik ten umożliwia konfigurację połączeń do serwerów wydruku, pobranie z serwera parametrów drukarki i ich konfigurację podczas wydruku printprocesora, którego zadaniem jest ekstrakcja kolejnych drukowanych stron (format EMF) z plików spoolera i ich przesył za pomocą sieci TCP/IP do serwera wydruku serwera wydruku odpowiedzialnego za podstawową autentykację, wysyłanie parametrów drukarki, oraz właściwe drukowanie 1.2. Narzędzia i środowisko uruchomieniowe Oprogramowanie zostało wykonane przy użyciu następujących narzędzi: MS Visual Studio 6.0 MS Visual Studio.NET MS Windows 2000 DDK Minidriver Development Tool Compuware DriverStudio (+ SofICE Debugger) Oprogramowanie klienta (Sterownik wrirtualnej drukarki Do uruchomienia serwera wydruku niezbędny jest.net Framework w wersji 1.1 (do pobrania z http://msdn.microsoft.com/netframework/technologyinfo/howtoget/default.aspx, jest również dołączona na płycie CD w katalogu \MS.NETFramework1.1\) dowolna wersja systemu Windows, na której można go zainstalować. Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 4 Długość: 307 kb 4

1.3. Kompilacja Serwer: Ze środowiska MS Visual Studio.NET po wczytaniu pliku projektu src\remoteprinterserver\remoteprinter.sln Plugin interfejsu użytkownika : W konsoli Windows 2000 DDK\ Build Environment poleceniem build cwz uruchamianym w katalogu ze źródłami src\rpdrvui\dll_src PrintProcesor: W konsoli Windows 2000 DDK\ Build Environment poleceniem build cwz uruchamianym w katalogu ze źródłami src\genprint Instalator: Ze środowiska MSVisualStudio 6.0 po wczytaniu pliku projektu src\installer\install.dsw Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 5 Długość: 307 kb 5

2. Implementacja. 2.1. Sterownik. 2.1.1. Opis drukarki - GPD Sterownik został zrealizowany jako rozszerzenie uniwersalnego sterownika Unidrv. Możliwości sterownika są opisywane za pomocą plików GPD generowanych dynamicznie na podstawie danych zwróconych przez serwer wydruku. Wykorzystane w projekcie elementy definicji GPD zawierają następujące informacje (razem z przykładami fragmentów wygenerowanego pliku GPD): ogólne parametry drukarki: *GPDSpecVersion: "1.1" *GPDFileVersion: "1.1" *GPDFileName: "vprinter.gpd" *ModelName: "Remote Printer" *ResourceDLL: "vprinter.dll" *PrinterType: SERIAL układ pionowy/poziomy *Feature: Orientation { *rcnameid: =ORIENTATION_DISPLAY *Option: PORTRAIT { *rcnameid: =PORTRAIT_DISPLAY } *Option: LANDSCAPE_CC270 { *rcnameid: =LANDSCAPE_DISPLAY } } listy obsługiwanych źródeł (podajników) papieru *Feature: InputBin { *rcnameid: =PAPER_SOURCE_DISPLAY *Option: UPPER { *rcnameid: =UPPER_TRAY_DISPLAY } *Option: MANUAL { *rcnameid: =MANUAL_FEED_DISPLAY }... } rodzaj medium wydruku (papier/folia itp.) nazwy i parametry rozmiarów papieru *Feature: PaperSize { *rcnameid: =PAPER_SIZE_DISPLAY *Option: LETTER { *rcnameid: =RCID_DMPAPER_SYSTEM_NAME *PrintableArea: PAIR(60721, 78581) *PrintableOrigin: PAIR(0, 0) }... Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 6 Długość: 307 kb 6

} rozdzielczości wydruku *Feature: Resolution { *rcnameid: =RESOLUTION_DISPLAY *Option: r150x150 { *Name: "150 x 150 " =DOTS_PER_INCH *DPI: PAIR(150, 150) *TextDPI: PAIR(150, 150) *SpotDiameter: 1 }... } tryby koloru (Mono/Color); *Feature: ColorMode { *rcnameid: =COLOR_PRINTING_MODE_DISPLAY *Option: Mono { *Color?: FALSE *rcnameid: =MONO_DISPLAY } *Option: Color { *Color?: TRUE *rcnameid: =COLOR_DISPLAY } } inne parametry (np. maksymalna liczba kopii, sortowanie stron, wydruk dupleksowy, jakości wydruku) *MaxCopies: 1 *MasterUnits: PAIR(7200, 7200) *Command: CmdSendBlockData { *Cmd : "<1B>0" } *BestQualitySettings: LIST(ColorMode.Mono) *BetterQualitySettings: LIST(ColorMode.Mono) *DraftQualitySettings: LIST(ColorMode.Mono)... 2.1.2. Implementacja interfejsu użytkownika Sterownik UNIDRV umożliwia dołączanie komponentów interfejsu za pomocą mechanizmu Common Property Sheet User Interface (CPSUI). Nasz sterownik jest wyposażony interfejs użytkownika dostępny jako zakładka w oknie właściwości drukarki (Rysunek 2). Interfejs pozwala na wybranie hosta oraz portu, z którym sterownik ma się łączyć oraz na zapisywanie informacji o utworzonych sesjach. Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 7 Długość: 307 kb 7

Rysunek 2. Zakładka konfiguracji połączeń z serwerem Interfejs zdefiniowany jest jako plug-in w postaci pliku dll (oemui.dll), który podczas wyświetlania okna właściwości drukarki jest uruchamiany przez unidrv.dll poprzez zestaw ustandaryzowanych funkcji (IPrintOemUI COM Interface). Funkcje te musi zaimplementować główna klasa biblioteki dll. Należą do nich: IPrintOemUI::CommonUIProp Umożliwia modyfikacje istniejących zakładek okna właściwości drukowanego dokumentu/drukarki IPrintOemUI::DeviceCapabilities Umożliwia dodanie niestandardowych właściwości urządzenia IPrintOemUI::DevicePropertySheets Umożliwia dodanie komponentów (zakładek) do okna właściwości drukarki IPrintOemUI::DevMode Przeprowadza operacje na prywatnej strukturze DEVMODE Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 8 Długość: 307 kb 8

IPrintOemUI::DevQueryPrintEx Umożliwia sprawdzanie czy zadanie wydruku może być wydrukowane IPrintOemUI::DocumentPropertySheets Umożliwia dodanie komponentów (zakładek) do okna właściwości drukowanego dokumentu IPrintOemUI::DriverEvent Wywoływane w celu obsługi zdarzeń, którymi może być zainteresowany plugin pochodzącymi od sterownika IPrintOemUI::FontInstallerDlgProc Zamiennik standardowego interfejsu instalacji czcionek IPrintOemUI::GetInfo Identyfikacja pluginu IPrintOemUI::PrinterEvent Wywoływane w celu obsługi zdarzeń, którymi może być zainteresowany plugin pochodzącymi od drukarki IPrintOemUI::PublishDriverInterface Używane do komunikacji ze sterownikiem drukarki za pomocą mechanizmu COM IPrintOemUI::QueryColorProfile Specyfikowanie profilów kolorów ICC IPrintOemUI::UpdateExternalFonts Umożliwia modyfikację definicji czcionek IPrintOemUI::UpgradePrinter Umożliwia uaktualnianie parametrów drukarki z rejestru Drukowanie za pomocą wirtualnego sterownika jest realizowane w następujący sposób: drukowany dokument jest przekazywany do procesora wydruku, który generuje pliki EMF. Pliki te są następnie przekazywane do serwera wydruku razem z ustawieniami wydruku za pomocą sieci i drukowane po jego stronie na odpowiedniej drukarce. 2.1.3. Problemy Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 9 Długość: 307 kb 9

Sterownik Unidrv działa niezgodnie z dokumentacją, w szczególności chodzi o pluginy do interfejsu użytkownika dynamiczne zmiany własności drukarki wymagały nadpisywania plików GPD. 2.2. Print Processor. Print processor jest (w sterownikach rzeczywistych drukarek) elementem odpowiedzialnym obróbkę drukowanego plika na najniższym, najbliższym samemu urządzeniu poziomie. Gdy spooler zadecyduje, że dane zadanie (dokument) należy wydrukować przekazuje uchwyt do dokumentu do print processor a. Print Processor ma za zadanie przetwarza kolejne rekordy EMF i przy wykorzystaniu funkcji GDI konwertuje dokument do postaci specjalnie przygotowanej dla sprzętu. Print Processor jest obecny w systemie w postaci biblioteki DLL, biblioteka ta musi eksportować funcje: EnumPrintProcessorDatatypesW zwraca listę obsługiwanych typów OpenPrintProcessor funkcja wywoływana przed drukowaniem dokumentu, przygotowuje print processor do drukowania, zwraca uchwyt, którym spooler posługuje się do komunikacji z print processor em PrintDocumentOnPrintProcessor funkcja wywoływana w celu drukowania dokumentu, wysyła dane do urządzenia (lub print monitor a) ControlPrintProcessor funkcja pozwalająca kontrolować zadanie wydruku (wstrzymanie, wznowienie, anulowanie) ClosePrintProcessor funkcja kończy zadanie drukowania, zwalnia zasoby wykorzystywane przez print processor, GetPrintProcessorCapabilities zwraca informacja na temot możliwości print processor a w zakresie obróbki zadanego formatu dokumentów 2.2.1. Zasada działania Drukarka jest tak skonfigurowana (przez program instalatora) aby domyślnym dla niej formatem był NT EMF 1.008 i aby korzystała z dostarczanego przez nas print processor a. Tak więc jeśli chcemy drukować dokument i jako drukarkę wybierzemy naszą drukarkę spooler zapisze spool file w formacie EMF (wlaściwie jest to specjalny, mocno strzeżony przez Microsoft format zawierający kolejne rekordy dokumenty EMF). Następnie tak zapisany plik trafia do print processor a, który w funkcji PrintDocumentOnPrintProcessor odczytuje kolejne rekordy EMF i przesyła je przez sieć do serwera. Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 10 Długość: 307 kb 10

2.2.2. Problemy Microsoft nie udostepnia specyfikacji formatu *.spl w którym zapisywane są zadania wydruku, co więcej format ten może się różnić w zależności od systemu operacyjnego. W print processorze nie można uzyskać w sposób pewny uchywtu do pliku *.spl, do funkcji PrintDocumentOnPrintProcessor dostarczany jest HANDLE który nie jest zwykłym uchytem do pliku i nie można go normalnie czytać (można wykonać tylko funkcje wysokiego poziomu typu GdiPlayPageEMF). Nie ma również pewnego sposobu aby dowiedzieć się, w którym miejscu został zlokalizowany plik spl przechowywujący zadanie drukowania. Microsoft uważa że sterownik nie powinien być zależny od lokalizacji tego pliku ani jego formatu (wypowiedzi Ashwin a na grupie microsoft.public.development.device.drivers). Co więcej zarówno sam format pliku jak i jego polożenie i nazwa są zależne od wersji systemu. Dla Windows 2000 plik spoolera tworzony jest w katalogu C:\WINNT\system32\spool\printers a jego nazwa jest zależna od numeru zadania drukowania i ma format xxxxx.spl (gdzie xxxxx to pięciocyfrowa liczba, wypełniona zerami na początku). 2.3. Serwer wydruku. Serwer wydruku jest zrealizowany jako usługa systemu Windows zaimplementowana za pomocą platformy.net. Usługa umożliwia udostępnienie wielu drukarek na różnych portach i jest konfigurowalna za pomocą aplikacji dostępnej z paska zadań. Rysunek 3. Ikona aplikacji na pasku zadań. Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 11 Długość: 307 kb 11

Rysunek 4. Konfiguracja serwera druku. Dostęp do usługi określa się podając dozwolone adresy IP oraz maski, które mają być używane przy ich porównywaniu. Rysunek 5. Określanie praw dostępu do usługi. Powyższy rysunek przedstawia przykładową konfigurację praw dostępu. Z usługą będą mogły komunikować się komputery należące do podsieci 192.168.0.0/16 oraz 127.0.0.1/8. 2.3.1. Model. 2.3.1.1. Usługa systemu Windows..NET Framework oferuje klasę ServiceBase, dziedzicząc po której można łatwo stworzyć własne usługi i instalować je za pomocą programu installutil. Klasą usługi jest w tym przypadku PrintService, tworzący dla każdej zarejestrowanej drukarki osobną instancję klasy RequestHandler. Klasy Connection oraz Protocol są używane do komunikacji z klientem. Klasa RequestHandler jest odpowiedzialna za realizację następującej funkcjonalności: Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 12 Długość: 307 kb 12

drukowanie (HandlePrintRequest), ustawianie parametrów wydruku (HandleSetParametersRequest), pobranie informacji o możliwościach drukarki (HandlePrinterCapabilitiesRequest), pobranie nazwy drukarki (HandlePrinterNameRequest). RequestHandler - «property» EventLog : EventLog - stop : bool = false - port : int - devmode : byte[] = null - allowedranges : IPRange [] + RequestHandler ( ) + Start ( ) + Stop ( ) - ProvideNextPage ( ) - HandlePrintRequest ( ) - HandleSetParametersRequest ( ) - HandlePrinterNameRequest ( ) - HandlePrinterCapabilitiesRequest ( ) - HandleRequest ( ) - Accept ( ) - AcceptConnections ( ) - DeviceCapabilities ( ) - «get» EventLog ( ) 1..* 1 - service 0..1 1 - _Protocol PrintService + PrintService ( ) - Main ( ) - InitializeComponent ( ) # Dispose ( ) # OnStart ( ) # OnStop ( ) Protocol + WriteString ( ) + ReadString ( ) + WriteInt ( ) + ReadInt ( ) - connection 1 Connection + «property» In : BinaryReader + «property» Out : BinaryWriter + Connection ( ) + «get» In ( ) + «get» Out ( ) 2.3.1.2. Serwer druku. Na serwer wydruku składają się następujące klasy: PrintServer odpowiedzialny za drukowanie dokumentów na określonej drukarce, ServerConfigurator klasa odpowiedzialna za odczyt i zapisywanie konfiguracji drukarki do rejestru, IPRange i PrinterDefinition klasy używane przez ServerConfigurator. Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 13 Długość: 307 kb 13

PrintServer + «property» InstalledPrinters : string [] + «property» PrinterSettings : PrinterSettings + «property» PrinterName : string + «property» PrinterResolutions : PrinterResolution [] + «property» PaperSources : PaperSource [] + «property» PaperSizes : PaperSize [] - printername : string - DM_ORIENTATION : uint = 1 - DM_COPIES : uint = 256 - DM_COLOR : uint = 2048 - DM_PAPERSIZE : uint = 2 - DM_PAPERLENGTH : uint = 4 - DM_PAPERWIDTH : uint = 8 - DM_SCALE : uint = 16 - DM_PRINTQUALITY : uint = 1024 - DM_DEFAULTSOURCE : uint = 512 - DMORIENT_LANDSCAPE : uint = 2 - DMORIENT_PORTRAIT : uint = 1 - DMCOLOR_COLOR : uint = 2 - DMCOLOR_MONOCHROME : uint = 1 + PrintServer ( ) + PrintServer ( ) + Print ( ) - AlignDevMode ( ) - GetPrinterResolution ( ) - GetPaperSourceByKind ( ) - GetPaperSizeByKind ( ) - ApplySettings ( ) + Print ( ) + Print ( ) - CreatePrintDocument ( ) - CreatePrinterSettings ( ) - OnBeginPrint ( ) - OnEndPrint ( ) + MetafileUnitToPageSize ( ) - OnPrintPage ( ) + «get» InstalledPrinters ( ) + «get» PrinterSettings ( ) + «set» PrinterSettings ( ) + «get» PrinterName ( ) + «get» PrinterResolutions ( ) + «get» PaperSources ( ) + «get» PaperSizes ( ) ServerConfigurator + «property» AllowedIPRanges : IPRange [] + «property» PrinterDefinitions : PrinterDefinition [] - PRINTER_NAME : string = "PrinterName" - PRINTER_PORT : string = "PrinterPort" - RANGE_ADDRESS : string = "RangeAddress" - RANGE_MASK : string = "RangeMask" - REGISTRY_MAIN_KEY : string = "Software" - REGISTRY_SUB_KEY : string = "RemotePrinter" + ServerConfigurator ( ) + «get» AllowedIPRanges ( ) + «set» AllowedIPRanges ( ) + «get» PrinterDefinitions ( ) + «set» PrinterDefinitions ( ) IPRange + «property» Address : IPAddress + «property» Mask : IPAddress + IPRange ( ) + Accept ( ) - MaskBytes ( ) - CompareBytes ( ) + ToString ( ) + «get» Address ( ) + «set» Address ( ) + «get» Mask ( ) + «set» Mask ( ) PrinterDefinition + «property» PrinterName : String + «property» Port : int - printername : String - port : int + PrinterDefinition ( ) + ToString ( ) + «get» PrinterName ( ) + «set» PrinterName ( ) + «get» Port ( ) + «set» Port ( ) 2.3.1.3. Program konfiguracyjny. Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 14 Długość: 307 kb 14

TrayIconApp - exitapp : bool + TrayIconApp ( ) + TrayIconApp ( ) # InitializeMenu ( ) - ExitHandler ( ) - EditPropertiesHandler ( ) # Dispose ( ) - InitializeComponent ( ) + Run ( ) # EditProperties ( ) + Main ( ) ServerPropertiesForm + ServerPropertiesForm ( ) # Dispose ( ) - InitializeComponent ( ) - startbutton_click ( ) - stopbutton_click ( ) - refreshtimer_tick ( ) - printerlistbox_selectedindexchanged ( ) - ShowPrinterPropertiesForm ( ) - ShowIPRangePropertiesForm ( ) - UpdatePrinterList ( ) - UpdatePrinterList ( ) - UpdateIPRangeList ( ) - UpdateIPRangeList ( ) - addbutton_click ( ) - editbutton_click ( ) - removebutton_click ( ) - rangelistbox_selectedindexchanged ( ) - addrangebutton_click ( ) - editrangebutton_click ( ) - removerangebutton_click ( ) PrinterPropertiesForm + «property» Port : int + «property» PrinterName : string - port : int - printername : String + PrinterPropertiesForm ( ) # Dispose ( ) - InitializeComponent ( ) - PrinterPropertiesForm_Validating ( ) - okbutton_click ( ) - cancelbutton_click ( ) + «get» Port ( ) + «set» Port ( ) + «get» PrinterName ( ) + «set» PrinterName ( ) IPRangePropertiesForm + «property» Address : IPAddress + «property» Mask : IPAddress + IPRangePropertiesForm ( ) # Dispose ( ) - InitializeComponent ( ) - IPRangePropertiesForm_Activated ( ) - cancelbutton_click ( ) - okbutton_click ( ) + «get» Address ( ) + «set» Address ( ) + «get» Mask ( ) + «set» Mask ( ) Główną klasą aplikacji jest TrayIconApp, odpowiedzialna za wyświetlanie pozostałych kontrolek. Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 15 Długość: 307 kb 15

3. Instalacja. 3.1. Instalacja sterownika po stronie klienta. Aby maksymalnie uprościć proces instalacji stworzyliśmy program, który wykonuje wszelkie czynności, które przy instalacji za pomocy samego pliku *.inf użytkownik musiałby wykonać samodzielnie, odpowiadając na szereg pytań kreatora dodawania nowej drukarki, oraz zmieniając zaawansowane ustawienia. Aby zainstalować drukarkę należy uruchomić program instalacyjny z parametrem install. Przy instalacji można podać dodatkowy parametr katalog domyślny spoolera. Na procedurę automatycznej instalacji składają się następujące czynności: 1. Przekopiowanie plików preprocesora do katalogu systemowego PrintProcessor Directory. 2. Przekopiowanie plików instalacyjnych drukarki do katalogu systemowego Printer Driver Directory. 3. Zainstalowanie i zarejestrowanie w systemie Print Procesor a 4. Dodanie lokalnego portu wykorzystywanego przez drukarkę 5. Zainstalowanie sterownika drukarki 6. W końcu dodanie samej drukarki 7. Usunięcie plików instalacyjnych sterownika drukarki 8. Ustawienie katalogu domyślnego dla plików spoolera Ostatni podpunkt jest szczególnie ważny w systemie WindowsXP, jest to jedyna możliwość aby wymusić odpowiednie nazywanie plików przez podsystem drukowania. Po zainstalowaniu drukarki przy pomocy programu instalacyjnego, należy sprawdzić czy w ustawieniach drukarki zaznaczona została opcja Przechowaj dokumenty po wydrukowaniu. Opcja ta musi być zaznaczona aby sterownik działał poprawnie. Po zainstalowniu i wprowadzeniu zmian należy ponownie uruchomić usługę bufor wydruku albo zresetować komputer. Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 16 Długość: 307 kb 16

Procedura deinstalacji przebiega w przeciwnym kierunku. 1. Usunięcie drukarki z systemu 2. Odinstalowanie sterownika 3. Usunięcie lokalnego portu drukarki 4. Odinstalowanie print processor a 5. Usunięcie pliku print processor a Drukarkę możemy odinstalować wywołując program instalacyjny z parametrem uninstall. Przed przystąpieniem do deinstalacji należy upewnić się, że zostały usunięte wszystkie zadania z kolejki drukowania. Pliki sterownika nie są usuwane z systemu. W czasie instalacji (wywołanie funkcji AddPrinterDriver()) system kopiuje pliki z Printer Driver Directory do znanego sobie katalogu, gdzie zostają one do czasu gdy użytkownik sam je skasuje. Ewentualnie, w momencie instalowania kolejnej wersji sterownika, odpowiednie pliki zostaną zastąpione nowszymi wersjami. Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 17 Długość: 307 kb 17

3.2. Instalacja usługi po stronie serwera. Instalacja usługi po stronie serwera wymaga użycia narzędzia installutil (stanowiącego część.net Framework) w katalogu z binariami dla serwera w następujący sposób: installutil RemotePrinter.Service.exe Instalator tworzy nową usługę systemu Windows o nazwie RemotePrinter, którą można uruchamiać i zatrzymywać zarówno za pomocą aplikacji konfiguracyjnej, jak i z poziomu panelu sterowania. Narzędzie installutil może być również użyte do usunięcia usługi: installutil /u RemotePrinter.Service.exe 3.3. Problemy Dodanie portu lokalnego bez interacji z użytkownikiem. WINAPI nie udostępnia funkcji która umożliwiła by wykonanie tego zadania. Standardową reakcją na wywołanie funkcji AddPort z WINAPI jest wyświetlenie okienka dialogowego umożliwiającego wpisanie odpowiednich parametrów. Odpowiedź jak tego uniknąć można było odnaleźć w postach wysłanych na grupę dyskusyjną microsoft.public.development.device.drivers. Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 18 Długość: 307 kb 18

4. Inne możliwe rozwiązania 4.1. Przesyłanie kompletnych plików spoolera (shd, spl) Printprocesor przesyła pliki z kolejki wydruku bezpośrednio do serwera, serwer kopiuje je do katalogu spoolera i restartuje usługę bufora wydruku ustawiając parametry kolejkowania (nazwa kolejki, kolejność) tak by wyglądały na zapisane lokalnie. Zalety: - pliki spl nie muszą być parsowane, co przy braku jawnej oficjalnej specyfikacji tego formatu uwalniałoby nas od konieczności zdania się na niepewne metody wyodrębniania plików EMF - jeśli sterownik drukarki i system na kliencie i serwerze byłyby identyczne można wykorzystać wszystkie nawet niestandardowe właściwości drukarki Wady: - konieczność posiadania identycznej wersji systemu na kliencie i serwerze - niemożliwe dynamiczne dostosowywanie się i korzystanie z wielu serwerów wydruku przez tę samą drukarkę wirtualną - na serwerze konieczność przerywania drukowania dokumentów, w celu zrestartowania usługi bufora wydruku, co jest zabiegiem powolnym i blokującym ciągłą pracę pozostałych użytkowników drukarki. 4.2. Wirtualny port równoległy Klient instaluje wirtualny sterownik portu równoległego oraz oryginalny sterownik drukarki z wyjściem na ten port. Sterownik portu przesyła wszystkie dane do serwera zamiast do drukarki. Na serwerze dane przesyłane są do rzeczywistego portu drukarki. Zalety: - pliki spl nie muszą być parsowane - wykorzystywany jest standardowy sterownik drukarki - praktycznie pełna przeźroczystość rozwiązania (przy założeniu, że rozwiązanie w ogóle jest realizowalne, patrz: wady) Wady: - na serwerze duży problem z przydziałem dostępu do portu drukarki (dostęp musiałby się odbywać w trybie surowym z pominięciem spoolera na serwerze) - trudna do rozwiązania konieczność przechwytywania odpowiedzi od drukarki i rozstrzygania czy powinny być one przesłane do klienta czy pozostawione na serwerze Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 19 Długość: 307 kb 19

- na kliencie niemożliwe dynamiczne dostosowywanie się i korzystanie z wielu serwerów wydruku przez tę samą drukarkę wirtualną Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 20 Długość: 307 kb 20

5. Wykorzystane materiały 1. Microsoft Development Network: http://msdn.microsoft.com, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/graphics/hh/graphics/prnspool_7ig7.asp, http://www.microsoft.com/whdc/device/print/default.mspx 2. USENET: microsoft.public.development.device.drivers microsoft.public.win32.programmer.gdi microsoft.public.windowsnt.print 3. MS Windows 2000 DDK Documentation 4. MS Windows 2000 DDK Examples 5. Virtual Printer 6. Virtual Printer (http://www.mabuse.de/vprinter.mhtml) 7. PrintMirror (http://sourceforge.net/projects/printmirror/) 8. SoftICE Command Reference Help Plik: virtual_printer_driver.doc Wersja: 0.1-20 z dnia 05.07.2004 Stron: 21 Długość: 307 kb 21