Mechanizmy komunikacyjne w systemach Windows i

Transkrypt

Mechanizmy komunikacyjne w systemach Windows i
Mechanizmy komunikacyjne w systemach Windows
i Windows XP.
Przemysław Musiał, Artur Zezula
14 grudnia 2002
Spis treści
1 Wstep
˛
3
1.1 Mechanizmy systemów Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Mechanizmy proste
4
5
2.1 Schowek (Clipboard) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.1.1 Formaty i ich rejestracja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.1.2 Operacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.1.2.1
Kopiowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.1.2.2
Wklejanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.1.2.3
Właściciel schowka . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.1.2.4
Podglad
˛ schowka . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.1.2.5
Generowanie na żadanie
˛
. . . . . . . . . . . . . . . . . . . . . . . . .
9
2.1.2.6
Pami˛eć . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.2 Data Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3 File Mapping (Pami˛eć współdzielona)
. . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.3.1 Obiekt mapowania pliku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.3.2 Widoku pliku
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.4 Mailslots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.5 Potoki (Pipes) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.5.1 Named Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.5.1.1
Nazwa potoku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.5.1.2
Synchronizacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
2.5.2 Anonymous Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
2.6 NetBIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3 Mechanizmy rozbudowane
17
3.1 COM (COM+) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.1.1 COM od podszewki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.1.1.1
Kompatybilność binarna . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.1.2 Dost˛epność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.1.3 Object Linking and Embedding (OLE) . . . . . . . . . . . . . . . . . . . . . .
20
3.2 DDE (DDEML)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.2.1 Ogólnie o DDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
1
SPIS TREŚCI
SPIS TREŚCI
3.2.2 DDEML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.2.2.1
Inicjalizacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.2.2.2
Funkcja zwrotna DdeCallback . . . . . . . . . . . . . . . . . . . . .
23
3.2.2.3
Wykorzystanie stringów . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.2.2.4
Nawiazywanie
˛
połaczenia
˛
- konwersacje
. . . . . . . . . . . . . . .
23
3.2.2.5
Zarzadzanie
˛
danymi . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
3.2.2.6
Transakcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
3.3 RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
3.4 Windows Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.4.1 Windows Sockets 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4 Podsumowanie
31
5 Bibliografia
34
2
Rozdział 1
Wstep
˛
Wi˛ekszość obecnie używanych systemów posiada mechanizmy ułatwiajace
˛ komunikacj˛e i wymian˛e danych mi˛edzy programami. Zespół wszystkich tych mechanizmów określany jest mianem
Interprocess Communication w skrócie IPC. Zakres użycia każdego z mechanizmów jest
odmienny - jedne specjalizowane sa˛ do wymiany danych lokalnie, pomi˛edzy procesami, inne
natomiast pomi˛edzy komputerami w sieci.
Aplikacje używajace
˛ IPC podlegaja˛ hierarchii klient-serwer w przypadku pojedynczego
połaczenia.
˛
Aplikacja nadrz˛edna serwer udost˛epnia zasób/serwis, przetwarza żadania,
˛
a aplikacja podrz˛edna klient - korzystaja˛ z zasobu/serwisu, przekazuje własne żadania.
˛
Aplikacja może korzystać z wielu mechanizmów i wyst˛epować w każdej z ról.
Różnorodność mechanizmów IPC powoduje, iż cz˛esto trudno wybrać jest ta˛ właściwa.
˛ W
wielu przypadkach b˛edziemy zmuszeni do wykorzystania kilku mechanizmów celem uzyskania
jak najlepszego efektu. Przed wyborem mechanizmu warto odpowiedzieć sobie na nast˛epujace
˛
pytania:
• Czy aplikacja b˛edzie komunikowała si˛e tylko z lokalnymi aplikacjami, czy również b˛edzie
zachodziła konieczność wymiany danych przez sieć?
• Czy w przypadku wymiany danych przez sieć komputery sa˛ pod kontrola˛ tych samych czy
różnych systemów operacyjnych?
• Czy użytkownik b˛edzie miał możliwość wyboru z którymi aplikacjami ma zajść wymiana
danych, czy raczej aplikacja b˛edzie miała określona˛ z góry grup˛e kooperantów?
• Czy komunikacja ma odbywać si˛e mi˛edzy wieloma różnymi aplikacjami w ogólnej formie
(n.p. kopiowanie), czy raczej b˛edzie to wymiana konkretnych danych ograniczajaca
˛ si˛e do
określonego zbioru wzajemnych interakcji?
• Jak ważna jest wydajność?
• Czy używane aplikacje maja˛ GUI? - cześć mechanizmów pracuje tylko z takimi.
3
ROZDZIAŁ 1. WSTEP
˛
1.1. MECHANIZMY SYSTEMÓW WINDOWS
1.1 Mechanizmy systemów Windows
Systemy operacyjne firmy Microsoft kryjace
˛ si˛e pod nazwa˛ Windows oferuja˛ szeroka˛ gam˛e mechanizmów komunikacyjnych. Do dyspozycji mamy:
• Schowek (Clipboard)
• COM
• Data Copy
• DDE
• File Mapping
• Mailslots
• Potoki (Pipes)
• RPC
• Windows Sockets
W dalszej cz˛eści przybliżymy kolejno każdy z mechanizmów.
4
Rozdział 2
Mechanizmy proste
2.1 Schowek (Clipboard)
Na pierwszy rzut oka, możemy być zdziwieni, ale schowek jest właśnie mechanizmem komunikacji mi˛edzy aplikacjami. Obecnie bez jego funkcjonalności nie wyobrażamy sobie pracy z komputerem. Idea działania jest bardzo prosta. W systemie istnieje magazyn do, którego możemy
skopiować dane w wybranych przez siebie formatach, zarówno ogólnych jak i własnych. Aplikacja, która chce z nich skorzystać po prostu wybiera format, który zna i obsługuje. Poniższy
rysunek właśnie to obrazuje.
Rysunek 2.1: Wklejanie arkusza kalkulacyjnego do edytora tekstów
Jak już wspomnieliśmy dane moga˛ być w dowolnym formacie. Każdy format jest identyfikowany przez liczb˛e całkowita,
˛ a standardowe (predefiniowane) formaty sa˛ zdefiniowane w
pliku nagłówkowym Winuser.h. W przypadku formatów własnych, ich identyfikator zwracany
jest podczas rejestracji. Oprócz rejestracji typów danych schowka, wi˛ekszość operacji na schowku
wykonuja˛ pojedyncze okna. Przeważnie procedura okna pobiera lub umieszcza informacje jak
5
ROZDZIAŁ 2. MECHANIZMY PROSTE
2.1. SCHOWEK (CLIPBOARD)
wynik komunikatu WM_COMMAND. Schowek powinien być sterowany poprzez użytkownika,
tzn. wszelkie operacje na danych winny odbywać si˛e polecenie użytkownika.
Podgląd
schowka
Zmiana
zawartośći
Akceptowalny format
Schowek
Rejestracja formatów
Lista dostępnych
formatów
Aplikacja A
Format F1
Okno
aplikacji A
Format F2
Eksport
w formatach
Aplikacja B
Dane
w wybranym
formacie
Okno
aplikacji B
Format F3
Kopiuj
Wklej
Użytkownik
Rysunek 2.2: Użycie i działanie schowka
W aplikacjach systemu Windows schowek powiazany
˛
jest z nast˛epujacymi
˛
operacjami powiazanymi
˛
z aktywnym oknem:
• kopiowanie / wycinanie zaznaczonego obszaru do schowka
• wklejanie zawartości schowka w formacie wybieranym automatycznie
• wklejanie z możliwościa˛ wyboru formatu (jak na rysunku 2.1)
W przypadku schowka istnieje również możliwości dołaczenia
˛
specjalnej aplikacji do podgladu
˛
zawartości. W momencie zmiany zawartości schowka jest ona o tym zawiadamiana.
2.1.1
Formaty i ich rejestracja
Aplikacja kopiujac
˛ dane do schowka może umieścić je w kilku formatach. Schowek ma określone
standardowe formaty obsługujace
˛ tekst, grafik˛e i dźwi˛ek. Pełny ich wykaz można znaleźć na
6
ROZDZIAŁ 2. MECHANIZMY PROSTE
2.1. SCHOWEK (CLIPBOARD)
stronach MSDN i przytaczanie całego spisu tutaj jest zb˛edne. W Windows 2000/XP wprowadzono
jedynie obsług˛e UNICODE’u oraz jeden typ graficzny. Ciekawszym aspektem jest rejestracja
własnych formatów, gdyż wi˛ekszość aplikacji właśnie korzysta z tej możliwości, aby uniknać
˛
utraty informacji przy zmianie formatu. Nowe formaty rejestrowane sa˛ przy pomocy funkcji
RegisterClipboardFormat. Nowy format identyfikowany jest przez nazw˛e, po rejestracji przydzielany jest wolny numer identyfikacyjny. W przypadku gdy dwie aplikacje używaja˛ formatu
o tej samej nazwie, rejestrowany jest tylko jeden i o ile sa˛ zgodne aplikacje moga˛ wymieniać
mi˛edzy soba˛ dane.
Aplikacja może również umieścić dane w schowku oznaczajac
˛ je wartościa˛ formatu
od CF_PRIVATEFIRST do CF_PRIVATELAST. Identyfikatory z wyżej wymienionego
przedziału oznaczaja˛ dane prywatne aplikacji i ich typ nie musi być rejestrowany. Pami˛eć
zajmowana przez dane w formacie prywatnym nie jest zwalniania automatycznie.
Po
otrzymaniu komunikatu WM_DESTROYCLIPBOARD właściciel danych powinien uwolnić
zajmowana˛ pami˛eć.
Podobne zastosowanie ma również przedział identyfikatorów od CF_GDIOBJFIRST do
CF_GDIOBJLAST. Powyższy przedział zarezerwowany jest dla formatów obiektów Microsoft
Windows Graphics Device Interface (GDI). W tym przypadku nie mamy bezpośredniego
wskaźnika na obiekt ale uchwyt zwracany przez funkcje GlobalAlloc z ustawiona˛ flaga˛
GMEM_MOVEABLE. Pami˛eć zajmowana przez obiekt jest automatycznie uwalniania przy
opróżnianiu schowka.
Chcac
˛ wstawić dane w kilku formatach należy przeprowadzić ta˛ operacji w kolejności malejacej
˛ pod katem
˛
ilości posiadanej informacji. Formaty w schowku porzadkowane
˛
sa˛ według kolejności wstawiania i aplikacja chcaca
˛ wstawić obiekt ze schowka przeszukuje list˛e dost˛epnych
formatów dopóki nie napotka jej znanego.
W ostatnich wersjach systemu poszerzono również list˛e wewn˛etrznych konwersji mi˛edzy formatami. Dzi˛eki temu, o ile istnieje taka możliwość, odpytujac
˛ schowek o dost˛epne formaty
listowane sa˛ również te do których możliwa jest konwersja zaraz po formacie, który wstawiła
aplikacja.
Dodatkowa˛ cecha˛ schowka jest specjalna, rozszerzona obsługa danych w HTML’u, które sa˛
przechowywane w formacie CF_HTML. Służy on do przechowywania fragmentów dokumentów
w HTML, który oprócz żadanego
˛
przez użytkownika fragmentu zawiera jego otocznie. Aplikacja
wstawiajaca
˛ dane w tym formacie ma do dyspozycji wi˛eksza˛ ilość informacji, na przykład o formatowaniu i może sama zdecydować jak wstawić dane.
2.1.2
Operacje
Każda operacja na schowku rozpoczyna si˛e otwarciem go poprzez wywołanie OpenClipboard,
a kończy zamkni˛eciem CloseClipboard. Tylko jedna aplikacja może mieć otwarty schowek. Na
okno, które otwarło schowek wskazuje wartość zwracana przez GetOpenClipboardWindow.
7
ROZDZIAŁ 2. MECHANIZMY PROSTE
2.1. SCHOWEK (CLIPBOARD)
2.1.2.1 Kopiowanie
Po otwarciu schowka możemy zaczać
˛ z niego korzystać. Proces wstawiania rozpoczyna si˛e od
opróżnienia poprzedniej zawartości EmptyClipboard. Wywołanie funkcji powoduje wysłanie
komunikatu WM_DESTROYCLIPBOARD do poprzedniego właściciela, usuni˛ecie zawartości
schowka i przypisanie okna, które wywołało funkcj˛e jako nowego właściciela. O aktualnego
właściciela można zawsze zapytać funkcja˛ GetClipboardWindow. Nast˛epnie można już kolejno umieszczać dane w pożadanych
˛
formatach, pami˛etajac,
˛ że kolejność gra rol˛e. Dodawanie
zawartości przeprowadza si˛e funkcja˛ SetClipboardData podajac
˛ jako format identyfikator formatu i wskaźnik do danych. Można również nie podawać tego wskaźnika przy określeniu, iż
dane w tym formacie generowane sa˛ na żadanie.
˛
Wtedy dane sa˛ przygotowywane i wstawiane
do schowka dopiero gdy jakaś aplikacja chce wstawić te dane.
2.1.2.2 Wklejanie
Dost˛epność wielu formatów tych samych danych w schowku powoduje, że należy przed ich
wstawieniem wybrać najbardziej odpowiedni format. Dost˛epne formaty można uzyskać poprzez
kolejne wywołania funkcji EnumClipboardFormats, a stosowanymi metodami wyboru sa:
˛
• pierwszy rozpoznany format (dlatego kolejność wstawiania jest ważna) przy wykorzystaniu
wyżej wspomnianej funkcji
• wybranie najlepszego dost˛epnego formatu na podstawie listy priorytetowej GetPriorityClipboardFormat
• zapytanie o pojedynczy format IsClipboardFormatAvailable
Po określeniu w jakim formacie mamy zamiar uzyskać dane korzystamy z funkcji GetClipboardData podajac
˛ jako parametr identyfikator formatu. Jako rezultat otrzymujemy wskaźnik
do danych. W tym momencie należy wykonać kopie danych, tak aby w miar˛e jak najszybciej
odblokować obiekt. Okno nie b˛edace
˛ właścicielem danych nie powinno zwalniać pami˛eci zaalokowanej na obiekt.
2.1.2.3 Właściciel schowka
Jak wspominaliśmy okno po wywołaniu EmptyClipboard staje si˛e właścicielem okna i pozostaje nim dopóki innego okno nie opróżni schowka lub do zamkni˛ecia. Funkcja wysyła do
poprzedniego właściciela komunikat WM_DESTROYCLIPBOARD. O ile okno wstawiło dane
w formacie, w którym pami˛eć nie jest zwalniania automatycznie lub posiada dane generowane na
żadanie
˛
powinno obsłużyć komunikat i wykonać odpowiednie akcje - zwolnić pami˛eć zajmowana˛
przez dane powiazane
˛
ze schowkiem.
2.1.2.4 Podglad
˛ schowka
Schowek ma możliwość dołaczeniabonifikowana
˛
aplikacji podgladaj
˛ acej
˛
aktualna˛ zawartość,
która przy każdej zmianie b˛edzie o tym notyfikowana.
8
Aplikacje te tworza˛ łańcuch, wi˛ec
ROZDZIAŁ 2. MECHANIZMY PROSTE
2.2. DATA COPY
ważne jest, aby każda z nich przekazywała informacj˛e dalej. Informacj˛e o tym gdzie mamy
przekazać komunikat zwraca funkcja rejestrujaca
˛ SetClipboardViewer. Takie rozwiazanie
˛
obliguje jednocześnie aplikacje do naprawiania łańcucha podczas wyrejestrowania si˛e jednego
z elementów (funkcja˛ ChangeClipboardChain(okno_zamykane,
okno_nast˛epne)) okna
b˛edace
˛ w łańcuchu powinny przekazywać sobie komunikat WM_CHANGECBCHAIN dopóki
jedno z nich nie stwierdzi, że to jego nast˛epnik jest zamykany. W tym momencie dane okno
powinno zaktualizować informacje o własnym nast˛epniku (informacja o nast˛epniku zamykane
okna podawana jest w komunikacie).
Podobnie spraw ma si˛e w przypadku komunikatu
WM_DRAWCLIPBOARD notyfikujacym
˛
o zmian˛e zawartości.
W tym przypadku również
należy przekazać komunikat do swego nast˛epnika, wcześniej wykonujac
˛ pożadane
˛
operacje
odczytu na schowku.
2.1.2.5 Generowanie na żadanie
˛
W schowku może zostać umieszczona również informacja, że dane zostana˛ wygenerowane
na żadanie.
˛
Konieczność takiego rozwiazania
˛
może być różna:
przygotowania.
Stosujac
˛ takie rozwiazania,
˛
wielkość danych, czas
okno (dopóki nie dostanie komunikatu
WM_DESTROYCLIPBOARD) musi być gotowe przygotować i udost˛epnić dane o których
umieściło informacje w schowku. Po otrzymaniu komunikatu WM_RENDERFORMAT okno
powinno umieścić w schowku za pomoca˛ SetClipboardData dane w żadanym
˛
formacie. W
przypadku otrzymania takie komunikatu nie otwieramy schowka. W przypadku niszczenia
właściciela schowka otrzymuje on komunikat WM_RENDERALLFORMATS po którym
powinien umieścić w schowku dane w formatach, które miały być generowane na żadanie,
˛
tak
aby były dost˛epne po zamkni˛eciu okna. Jeżeli format nie został umieszczony w schowku, a
właściciel nie jest już dost˛epny to taki format nie b˛edzie widoczny dla oknien sprawdzajacych
˛
dost˛epne formaty.
2.1.2.6 Pamie˛ ć
Wszystkie dane przekazywane do schowka powinny być zapisane w pami˛eci alokowanej przy
użyciu GlobalAlloc z flaga˛ GMEM_MOVEABLE. Po umieszczeniu ich w schowku system
staje si˛e właścicielem tych obszarów pami˛eci i może je samodzielnie zwolnić przy użyciu funkcji
przewidzianej dla danego formatu. W samej dokumentacji Microsoftu pozostaja˛ jednak pewne
nieścisłości co do zarzadzania
˛
pami˛ecia.
˛ Tyczy si˛e to głównie formatów rejestrowanych: prywatnych i GDI.
2.2
Data Copy
Data Copy jest prostych mechanizmem pozwalajacym
˛
w komunikacie od okna do okna przesłać
dane. Okno umieszcza dane w strukturze COPYDATASTRUCT i wysyła je komunikatem
WM_COPYDATA. Okno odbierajace
˛ komunikat może rozpoznać typ po polu dwData. Okno
wysyłajace
˛ musi znać uchwyt do okna do którego chce wysłać komunikat.
9
ROZDZIAŁ 2. MECHANIZMY PROSTE 2.3. FILE MAPPING (PAMIE˛Ć WSPÓŁDZIELONA)
2.3 File Mapping (Pamie˛ ć współdzielona)
Windowsowy mechanizm o nazwie File Mapping jest odpowiednikiem Unixowej pami˛eci
współdzielonej. Zasada działania polega na udost˛epnieniu zawartości pliku jako bloku pami˛eci
procesu. Proces za pomoca˛ wskaźnika może czytać i zmieniać zawartość, tak jak w przypadku
zmiennych dynamicznych i tak też realizowane sa˛ te operacje. Mechanizm sam nie zwiera
synchronizacji, tak wi˛ec korzystajac
˛ w kilku procesach z tego mechanizmu należy zapewnić
synchronizacj˛e. Zależnie od nadania nazwy danemu przypisaniu dodaje si˛e określenie nazwany
/ nienazwany.
Sam mechanizm jest stosunkowo wydajny,
a ponadto zapewnia pewien poziom
bezpieczeństwa, zabezpieczajac
˛ przed uszkodzeniem danych do których proces nie powinien
mieć dost˛epu. Mechanizm działa wyłacznie
˛
lokalnie, także komunikacja poprzez sieć przy jego
użyciu nie jest możliwa.
Pamięć wirtualna
procesu A
File View 1
File View 2
Pamięć fizyczna
Pamięć wirtualna
procesu B
Obiekt
File Mapping
Plik
na dysku
File View 1
Rysunek 2.3: Zasada działania File Mapping
Powyższy rysunek przedstawia schematycznie sposób realizacji. System tworzy obiekt file
mapping, który odpowiada za połaczenie
˛
wirtualnej przestrzeni adresowej procesu z zawartościa˛
pliku, natomiast File View jest ta˛ cz˛eścia˛ pami˛eci współdzielonej procesu używanej do dost˛epu
do pliku (można nim manipulować przy użyciu funkcji VirtualProtect.
Głównymi zaletami mapowania pliku sa:
˛
• Szybszy i łatwiejszy dost˛ep do plików
• Działanie podobne do pami˛eci współdzielonej dla wielu aplikacji
10
ROZDZIAŁ 2. MECHANIZMY PROSTE 2.3. FILE MAPPING (PAMIE˛Ć WSPÓŁDZIELONA)
Te zalety kształtuja˛ zakres zastosowania mechanizmu. Szczególnie godny polecenia jest tam
gdzie konieczny jest szybki dost˛ep do plików, zarówno sekwencyjny jak i losowy - czyli n.p.
wszelkie aplikacje operujace
˛ na danych przechowywanych w plikach. Proces nie musi posiadać
widoku obejmujacego
˛
cały plik, ale także dowolnie wybrany ciagły
˛
fragment pliku. Chca˛ mieć
dost˛ep do innych danych niż aktualnie dost˛epne w File View może utworzyć nowy opcjonalnie
zwalniajac
˛ wcześniej bieżacy
˛ widok. Proces może posiadać wiele widoków. System zwolniony
obszar, do którego nie odwołuje si˛e żaden widok może zapisać do pliku i zwolnić pami˛eć, a ża˛
dany obszar pliku wczytać, o ile nie jest od dost˛epny. Przy pomocy File Mapping można uzyskać
dost˛ep do dowolnego pliku łacznie
˛
z systemowym plikiem wymiany. Obiekt systemowy zapewnia
spójność danych, także wszystkie procesy korzystajace
˛ z pliku poprzez widok wskazujacy
˛ na ten
sam obiekt posiadaja˛ te same dane.
Windows NT/2000/XP: Widoki każdego procesu należa˛ do jego przestrzeni adresowej
Windows 95/98/Me: Wszystkie widoki należa˛ do współdzielonej przestrzeni adresowej
(pomi˛edzy 2 a 3 GB wirtualnej przestrzeni adresowej, gdzie oprócz widoków jest 16-bitowy stos
jak i współdzielone systemowe biblioteki DLL).
2.3.1
Obiekt mapowania pliku
Mechanizm może udost˛epnić dowolny plik, jednym wymogiem jest, aby miał do niego wyłaczny
˛
i ciagły
˛
dost˛ep do momentu usuni˛ecia mapowania. Wybrany plik należy otworzyć przy użyciu funkcji CreateFile przy zachowaniu poprzednio wspomnianych wymagań. Otwierajac
˛ plik
należy otworzyć go z takimi samymi atrybutami dost˛epu z jakimi chce si˛e do niego mieć dost˛ep z
obiektu mapowania. W przeciwnym wypadku może wystapić
˛ bład.
˛ Otrzymany uchwyt w wyniku
działania funkcji b˛edzie parametrem przy wywołaniu CreateFileMapping.
Ważne do odnotowania jest, że tworzac
˛ obiekt mapowania nie ma konieczności ograniczania
rozmiarów dost˛epnego obszaru pliku, gdyż nie wypływa to na ilość dost˛epnych zasobów systemowych. Najlepiej wi˛ec jako parametry dwMaximumSizeHigh i dwMaximumSizeLow przy
tworzeniu obiektu podać wartość 0. Zasoby systemowe zajmowane sa˛ dopiero przy tworzeniu
widoków, ale tutaj dost˛epny obszar może być dowolnie wybrany z pliku (dowolnie wybrane bloki
danych na dysku). W przypadku gdy chcemy jednak udost˛epnić tylko fragment, należy pami˛etać,
iż specyfikujemy jedynie udost˛epniana˛ wielkość, bez offsetu, a wi˛ec musimy i tak udost˛epnić plik
od poczatku
˛
do końca żadanego
˛
fragmentu (uwzgl˛edniajac
˛ położenie na dysku i rozmieszczenie
w klastrach).
Jako parametr do funkcji CreateFileMapping podaje si˛e również nazwe˛ dla tworzonego
obiektu.
Gdy obiekt o takiej nazwie istnieje podejmowana jest próba uzyskania do niego
dost˛epu z żadan
˛
a˛ w wywołaniu ochrona˛ (Otwarcie obiektu możliwe jest również przy użyciu
OpenFileMapping, ale już na ochronie z jaka˛ został tworzony obiekt).
W przeciwnym
wypadku tworzony jest nowy obiekt. Pozostawiajac
˛ nazw˛e pusta˛ (null, a nie „“) tworzymy
nienazwany obiekt, do którego nie b˛edzie si˛e można odwołać przez nazw˛e. W przypadku
Windows XP nazwy musza˛ spełniać wytyczne dotyczace
˛ przestrzeni nazw Terminal Services.
Sama nazwa może być dowolnym ciagiem
˛
znaków poza „\“, a Windows 95/98/Me dopuszczalny
jest również ciag
˛ pusty „“. Maksymalny rozmiar pliku ograniczony jest jedynie miejscem na
11
ROZDZIAŁ 2. MECHANIZMY PROSTE
2.4. MAILSLOTS
dysku.
Zamkni˛ecie obiektu odbywa si˛e w odwrotnej kolejności do otwarcia, a wi˛ec najpierw należy
zamknać
˛ obiekt, a później plik.
2.3.2
Widoku pliku
Uzyskujac
˛ wskaźnik na obiekt mapowania po wywołaniu CreateFileMapping możemy
utworzyć widok na wybrany fragment przy wykorzystaniu funkcji MapViewOfFileEx (lub
MapViewOfFile gdy chcemy mieć widok na cały obszar dost˛epny w obiekcie) z tymi samymi
flagami co poprzedniczk˛e.
Jak już było wspomniane modyfikacja danych w widoku nie powoduje bezpośrednio zapisania
zamian na dysku, operacja ta jest obsługiwana przez system. Zapewnione jest tylko, że wszystkie
procesu maja˛ dost˛ep do tych samych danych, tak wi˛ec zmiany sa˛ widoczne od razu dla wszystkich współużytkujacych
˛
procesów. Można jednak wymusić zapis na dysk poprzez wywołanie
FlushViewOfFile.
Za pomoca˛ wskaźnika uzyskanego z wywołania funkcji MapViewOfFile* mamy dost˛ep do
wybranego obszaru pliku, identycznie jak w przypadku zmiennej dynamicznej.
Zamkni˛ecie widoku wykonuje si˛e poprzez wywołanie UnmapViewOfFile dla pojedynczego
widoku.
2.4 Mailslots
Mailslot jest mechanizmem jednokierunkowej komunikacji mi˛edzy procesami (IPC). Aplikacje
Win32 moga˛ składować dane w mailslotach.
Właściciel mailslotu może otrzymywać
wiadomość, która jest tam składowana. Wiadomości sa˛ przeważnie wysyłane poprzez sieć do
wyspecyfikowanego komputera lub wszystkich komputerów w wyspecyfikowanej domenie.
Domena jest grupa˛ stacji roboczych i serwerów, które dziela˛ nazw˛e grupowa.
˛
Zamiast
mailslotów, do komunikacji mi˛edzy procesami, można używać nazwanych potoków (named
pipes).
Nazwane potoki sa˛ prostym sposobem dla procesu dla rozgłoszenia wiadomości do
wielu procesów. Podstawowa˛ różnica˛ mi˛edzy nimi jest to, że mailsloty używaja˛ datagramów a
nazwane potoki nie. Datagram jest małym pakietem informacji, który jest przesyłany poprzez
sieć. Podobnie jak radio czy telewizja, dla datagramów nie sa˛ przesyłane potwierdzenia odbioru;
nie ma gwarancji, że datagram doszedł na swoje miejsce. Tak jak góry, duże budynki, lub
interferencja sygnału może spowodować strat˛e sygnału radiowego lub telewizyjnego, tak
istnieja˛ rzeczy, które moga˛ przeszkodzić w dotarciu datagramu do odbiorcy. Nazwane potoki sa˛
jak rozmowa telefoniczna. Rozmawiasz tylko w jedna˛ stron˛e jednak wiesz, że konwersacja jest
prowadzona.
Kiedy wiadomość jest wysyłana do mailslotu, aplikacja wysyłajaca
˛ specyfikuje czy wiadomość
ma być wysłana przy użyciu pierwszej klasy czy drugiej klasy.
• Pierwsza klasa jest zorientowana połaczeniowo
˛
i gwarantuje transfer danych dla
połaczenia
˛
jeden-do-jeden, lub jeden-do-wielu. Wiadomości tej klasy moga˛ być wysłane do
12
ROZDZIAŁ 2. MECHANIZMY PROSTE
2.5. POTOKI (PIPES)
mailslotu, który został stworzony na serwerze. (a tak nawiasem piszac
˛ Windows 95 nie
używa wiadomości pierwszej klasy).
• Druga klasa jest oparta na datagramach i niegwarantowanym transferze danych dla
połaczenia
˛
jeden-do-jeden, lub jeden-do-wielu. Wiadomości tej klasy moga˛ być przesyłane
do mailslotów, które zostały utworzone na dowolnej stacji roboczej lub na kilku stacjach
roboczych jeżeli rozmiar wiadomości nie przekracza 400 bajtów.
Windows 95/NT implementuje tylko mailsloty drugiej klasy, które sa˛ najbardziej użyteczne do
identyfikowania innych komputerów lub serwisów w sieci i do szerokiej identyfikacji serwisów.
Windows 95 używa mailslotów dla wiadomości WinPopup.
Implementacja mailslotów w Windows NT jest podzbiorem implementacji OS/2 LAN
Manager. Mailsloty drugiej klasy dostarczaja˛ bezpołaczeniowego
˛
przesyłania wiadomości
dla rozgłoszeniowych wiadomości. Dostarczenie wiadomości nie jest zagwarantowane, jednak
współczynnik dostarczonych wiadomości w wi˛ekszości sieci jest duży. Jest to bardzo użyteczne
dla identyfikacji innych komputerów lub serwisów w sieci. Serwis Computer Browser w Windowsach NT używa mailslotów.
Nazwy mailslotów musza˛ posiadać nast˛epujace
˛ elementy: dwa backslashe na poczatku
nazwy, kropk˛e, backslash po kropce, nazw˛e mailslot, nast˛epnie wystepuje nazwa mailslotu.
Przykad:
\\.\mailslot\[path]name
Aby umieścić wiadomość w mailslocie prces otwiera mailslota porzez jego nazw˛e. Zapisywanie wiadomości na lokalnym komputerze zdarza si˛e rzadko. Cz˛eściej używamy mailslotów na
innych kompuaterach, do których adres jest w postaci:
\\ComputerName\mailslot\[path]name
Aby umieścić wiadomość w każdym mailslocie w domenie z podana˛ nazwa,
˛ stosujemy
nast˛epujac
˛ a˛ form˛e:
\\DomainName\mailslot\[path]name
2.5
Potoki (Pipes)
Nazwane potoki i mailsloty sa˛ aktualnie zaimplementowane jako systemy plików. W ten sposób,
w Rejestrze sa˛ wejścia dla NPFS (Named Pipe File System) i MSFS (Mailslot File System).
Jako systemy plików, dziela˛ one podstawowa˛ funkcjonalność, taka˛ jak bezpieczeństwo, z innymi
systemami plików. Dodatkowo lokalne procesy moga˛ używać nazwanych potoków i mailslotów
z innymi procesami na lokalnym komputerze bez używania komponentów sieciowych. Zdalny
dost˛ep do nazwanych potoków i mailslotów jest osiagalny
˛
przez przekierowanie.
Nazwane
potoki
dostarczaja˛ połaczeniowo-zorientowane
˛
przekazywanie
wiadomości,
które pozwalaja˛ na dzielenie pami˛eci poprzez sieć. Windows NT posiada specjalny interfejs
programowania (API), który zwi˛eksza bezpieczeństwo przy używaniu nazwanych potoków.
13
ROZDZIAŁ 2. MECHANIZMY PROSTE
2.5. POTOKI (PIPES)
Jedna˛ cecha˛ dodana˛ do potoków jest impersonation (personifikacja). Kiedy używamy personifikacji, serwer może zmienić swój identyfikator bezpieczeństwa na taki jaki posiada klient na
drugim końcu połaczenia.
˛
Dla przykładu przypuśćmy, że serwer bazodanowy używa nazwanych
potoków do otrzymywania, czytania i zapisywania żada
˛ ń od klienta. Kiedy żadanie
˛
przychodzi,
serwer może personifikować klienta zanim podj˛eta zostanie próba spełnienia żadania.
˛
Dlatego
też, jeżeli klient nie ma autoryzacji do wykonania zadania, żadanie
˛
zostanie odrzucone.
2.5.1 Named Pipes
Pipe jest sekcja˛ dzielonej pami˛eci, której proces używa do komunikacji.
Nazwane potoki dostarczaja˛ łatwe w dost˛epie połaczenie
˛
jeden-do-jeden, wydajność i zorientowany połaczeniowo
˛
transfer danych mi˛edzy dwoma procesami.
Potok nazwany może być tworzony mi˛edzy procesami niezwiazanymi
˛
z soba,
˛ a także może
przekazywać informacj˛e poprzez sieć.
Proces, który tworzy potok nazywany jest pipe server. Proces, który łaczy
˛
si˛e z potokiem jest
nazywany pipe client. Gdy jeden proces wpisuje informacje do potoku, drugi proces odczytuje
stamtad
˛ informacj˛e.
Proces serwera tworzy potok i zarzadza
˛
dost˛epem do niego. Zasoby, które tworza˛ potok sa˛
własnościa˛ procesu serwera i istnieja˛ fizycznie na stacji roboczej, na której uruchomiony został
proces.
Proces klienta używa protokołów sieciowych aby uzyskać dost˛ep do zdalnego zasobu potoku.
Mimo że, potoki sa˛ zazwyczaj używane dwukierunkowo, potok może być skonfigurowany tak
aby pozwalał na komunikacj˛e w jednym kierunku, na przykład od serwera do klienta.
Powszechnym zastosowaniem nazwanych potoków jest aplikacja klient-serwer bazujaca
˛ na
SQL. Klient aplikacji SQL może być uruchomiony na komputerze i połaczony
˛
z aplikacja˛ serwera
poprzez sieć Microsoft. Microsoft SQL Server musi być jednakże postawiony na LAN Manager,
Windows NT, lub innym serwerze nazwanych potoków.
2.5.1.1
Nazwa potoku
Każdy nazwany potok musi posiadać swoja˛ unikalna˛ nazw˛e, która rozróżnia go od innych potoków. Nazwa potoku ustalana jest podczas tworzenia potoku przy pomocy funkcji CreateNamedPipe. Nazwa potoku otwieranego przez klienta ma nast˛epujac
˛ a˛ form˛e:
\\ServerName\pipe\PipeName
gdzie ServerName jest nazwa˛ zdalnego lub lokalnego komputera. String wyspecyfikowany
przez PipeName może zawierać dowolny znak, włacznie
˛
z cyframi i znakami specjalnymi.
Serwer potoku nie może tworzyć potoku na innym komputerze wi˛ec nazwa tworzonego potoku
zawiera kropk˛e zamiast nazwy serwera.
\\.\pipe\PipeName
14
ROZDZIAŁ 2. MECHANIZMY PROSTE
2.6. NETBIOS
2.5.1.2 Synchronizacja
Funkcje ReadFile, WriteFile, TransactNamedPipe i ConnectNamedPipe moga˛ być
wywoływane synchronicznie lub asynchronicznie.
Kiedy jest uruchamiana synchronicznie
sterowanie jest zwracane gdy operacja przez nia˛ wykonywana jest skończona. Oznacza to, że
watek
˛
wywołujacy
˛ funkcj˛e zostanie wstrzymany na czas jej wykonania. Może być to kłopotliwe
gdy operacja zajmuje dużo czasu. Kiedy funkacja wywoływana jest asynchronicznie, sterowanie
zwracane jest natychmiast, nawet wtedy gdy operacja nie została wykonana do końca.
Serwera potoku, który obsługuje synchroniczne operacje do komunikowania si˛e z kilkoma
klientami, musi stworzyć osobny watek dla każdego klienta, tak aby jeden lub wi˛ecej watków
˛
mogły działać gdy inne czekaja.
˛
2.5.2
Anonymous Pipes
Potoki anonimowe, zwane również potokami nienazwanymi, umożliwiaja˛ zwiazanym
˛
procesom
na wymian˛e informacji przez wpisywanie i odczytywanie z pliku. Typowo anonimowe potoki sa˛
używane do przekierowania standardowego wejścia i wyjścia procesu potomka, dlatego też może
wymienić dane z procesem rodzica.
Do używania anonimowych potoków, proces rodzica typowo tworzy potok, a później pozwala
na dziedziczenie uchwytów do niego przez potomka. Proces rodzica wpisuje dane do potoku, a
proces potomny może je odczytać z drugiej strony potoku. Proces rodzica może stworzyć dwóch
lub wi˛eksza˛ ilość potomków, które dziedzicza˛ uchwyty zapisu i odczytu do anonimowego potoku.
Procesy te moga˛ używać potoków do komunikowania si˛e mi˛edzy soba,
˛ bez przechodzenia przez
proces rodzica.
Anonimowe potoki nie moga˛ być używane poprzez sieć, ani nie moga˛ być używane mi˛edzy
niezwiazanymi
˛
procesami.
2.6 NetBIOS
NetBIOS (Network Basic Input/Output System) jest standardowym interfejsem programowania
w środowisku PC dla tworzenia aplikacji klient-serwer. NetBIOS jest używany jako mechanizm IPC od wprowadzenia tego interfejsu we wczesnych latach 80’tych. Z programistycznego
punktu widzenia, interfejsy wyższego poziomu, takie jak potoki nazwane i RPC, sa˛ lepsze w swojej elastyczności i przenośności. Aplikacja klient-serwer używajaca
˛ NetBIOS może komunikować
si˛e poprzez różne protokoły: NetBEUI (NBF), NWLink NetBIOS (NWNBLink) i NetBIOS over
TCP/IP (NetBT).
Interfejs NetBIOS dostarcza komendy i wsparcie dla nast˛epujacych
˛
serwisów:
• Rejestracja i weryfikacja nazwy sieciowej
• Ustanawianie i zrywanie sesji
• Niezawodność przesyłania danych
15
ROZDZIAŁ 2. MECHANIZMY PROSTE
2.6. NETBIOS
• Monitorowanie i zarzadzanie
˛
protokołem i adapterem
Interfejs NetBIOS wystawia wyraźny zbiór komend, które sa˛ przesyłane przez struktur˛e znana˛
jako network control block (NCB). Aplikacja może wysyłać komendy NetBIOS ponad dowolnym protokołem, który dostarcza odpowiedni interfejs.
16
Rozdział 3
Mechanizmy rozbudowane
3.1 COM (COM+)
Component Object Model jest szkieletem dla integrowalnych ze soba˛ komponentów.
Komponenty moga˛ być łaczone
˛
w wi˛eksze systemy, komunikujac
˛ si˛e wzajemnie poprzez COM.
Wzajemne wykorzystanie komponentów napisanych w różnych j˛ezykach możliwe jest dzi˛eki
standardowemu API oraz zgodności binarnej. Kolejnym etapem rozwoju technologii było
rozszerzenie go o możliwość używania komponentów, wzajemnej ich komunikacji, w środowisku
rozproszonym - Distributed Component Object Model (w skrócie DCOM). DCOM i
COM najlepiej traktować wspólnie, gdyż i tak dostarczane sa˛ w jednym wspólnym pakiecie
umożliwiajacym
˛
prac˛e w środowisku lokalnym jak i sieciowym.
Ponad *COM, które znajduja˛ si˛e w niskich warstwach i wspieraja˛ wzajemna˛ interakcj˛e
mi˛edzy komponentami, stworzone zostały technologie służace
˛ do osadzania obiektu w obiekcie
(ActiveX, OLE) i tworzenia połacze
˛ ń (OLE). Dzi˛eki MTS rozszerzono możliwości COM
o serwisy enterprise’owe, czyli przykładowo transakcyjność i bezpieczeństwo.
Późniejsze
zintegrowanie MTS z COM’em w COM+ oraz uproszczenie wykorzystania mechanizmów
dla programisty pozwoliło na lepsza˛ integracj˛e mechanizmu w wizualnych środowiskach
programistycznych Microsoftu.
3.1.1
COM od podszewki
Jak wspominaliśmy na komponentach COM wymuszona jest binarna zgodność, niezależnie
od wykorzystywanego j˛ezyka programowania.
Dzi˛eki takiemu rozwiazaniu
˛
uzyskujemy
niezależność od j˛ezyka programowania i uniwersalność komponentu. Komponent jest widoczny
jako zbiór interfejsów, posiadajacych
˛
własne zestawy dost˛epnych metod, reprezentujacych
˛
punkty kontaktu pomi˛edzy klientem a obiektem. Interfejsy, w celu zachowania zgodności, nie
powinny si˛e zmieniać. Tzn. chcac
˛ rozszerzyć możliwości obiektu należy nowe metody udost˛epnić
za pomoca˛ nowego interfejsu (można utworzyć interfejs dziedziczy po poprzedniej wersji).
Dzi˛eki temu możemy swobodnie zmieniać i korzystać z komponentów oferujacych
˛
interesujace
˛
nas w konkretnym przypadku interfejsy, oferujacych
˛
czasami różne inne możliwości, akurat
przez nas nie wykorzystywane.
17
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
Aplikacja
kliencka
3.1. COM (COM+)
Obiekt
Wskaźnik
na interfejs
Rysunek 3.1: Użycie obiektu COM przez wskaźnik na interfejs
Obiekty COM jak i interfejsy opisywane sa˛ przy użyciu Microsoft Interface Definition
Language (IDL), b˛edacego
˛
rozszerzeniem DCE IDL (Distributed Computing Environment), a
identyfikator każdego z nich musi być unikalny.
Każdy obiekt COM działa wewnatrz
˛
serwera.
Pojedynczy serwer może obsługiwać
jednocześnie wiele obiektów. Dost˛ep do każdego z obiektów zapewniony jest na trzy sposoby:
1. Serwer wewnatrz
˛
procesu: Klient łaczy
˛
si˛e bezpośrednio z biblioteka˛ zawierajac
˛ a˛ serwer.
Klient i serwer znajduja˛ si˛e w tym samym procesie.
Komunikacja zachodzi poprzez
wywołanie funkcji.
2. Proxy lokalnego obiektu: Klient łaczy
˛
si˛e z serwerem działajacym
˛
w innym procesie, ale na
tym samym komputerze poprzez mechanizmy IPC (obecnie LRPC).
3. Proxy zdalnego obiektu: Klient łaczy
˛
si˛e z serwerem działajacym
˛
na zdalnym komputerze.
Taki sposób połaczenia
˛
został wprowadzony przez DCOM, a do komunikacji wykorzystywany jest DCE RPC.
Proces Lokalnego Serwera
Proces klienta
Obiekt
procesu
stub
Serwer
lokalny
Aplikacja
kliencka
Proxy
obiektu
lokalnego
COM
Serwer
lokalny
LRPC
Proces Zdalnego Serwera
COM
Proxy
obiektu
zdalnego
Obiekt
loklany
stub
RPC
COM
Zdalny host
Rysunek 3.2: Metody dost˛epu do obiektu COM
18
Obiekt
zdalny
Serwer
zdalny
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
3.1. COM (COM+)
O ile pierwszy sposób jest stosunkowo łatwy do realizacji, to dwa nast˛epne wymagaja˛ już
wi˛ekszego nakładu. Dane musza˛ zostać dodatkowo sformatowane i połaczone
˛
w odpowiednim
porzadku
˛
aby można było je współdzielić (proces ten nazywany jest z angielska mashaling’iem).
Cały proces realizowany jest poprzez proxy po stronie klienta i stub po stronie serwera dla
każdego pojedynczego interfejsu danego komponentu. Podczas nawiazywanie
˛
połaczenia
˛
najpierw tworzony jest stub, który b˛edzie udost˛epniał i zarzadzał
˛
prawdziwym wskaźnikiem na
interfejs. Nast˛epnie tworzone jest proxy po stronie klienta, które łaczy
˛
si˛e ze stub i udost˛epnia
klientowi wskaźnik do interfejsu. Podczas połaczenia
˛
klient wysyła dane do proxy, tutaj sa˛ one
poddawane marshalingowi, dalej przesyłane sa˛ do stub, który dokonuje procesu odwrotnego i
wykonuje operacje na interfejsie obiektu. Wynik zwracany jest w identyczny sposób, przy czym
stub teraz porzadkuje
˛
i łaczy
˛
dane, a proxy je konwertuje do postaci wymaganej przez klienta.
Ważna˛ cecha˛ COM jest nierozróżnialność obiektów. Możemy wi˛ec prosić o dost˛ep do
obiektu konkretnego typu bez możliwości wskazania konkretnej jego instancji. W przypadku,
gdy istnieje jednak konieczność zachowania stanu i odwołania do tego samego obiektu możemy
użyć monikerów (monikers). Istnieje także możliwość powiadamiania klienta o zmianach w
używanym przez niego komponencie lub zdarzeniach. Obiekty COM maja˛ również możliwość
przechowywania swojego stanu.
3.1.1.1
Kompatybilność binarna
Wspominaliśmy, że dla komponentów COM wymagana jest kompatybilność binarna, która jest
warunkiem koniecznym dla niezależności od j˛ezyka programowania. Pod poj˛eciem kompatybilność binarna rozumie si˛e ustandaryzowana˛ postać wirtualnych tablic funkcji (vtables) w
pami˛eci. Klient chcac
˛ wykonać metod˛e obiektu COM wykorzystuje wskaźnik do wpisu w wirtualnej tablicy funkcji. Dodatkowo daje to możliwość zredukowania liczby instancji obiektu COM,
gdyż dzi˛eki takiemu rozwiazaniu
˛
może być współdzielony.
3.1.2
Dostepnoś
˛
ć
Wraz z rozwojem technologii COM Microsoft udost˛epniał nowe wersje bibliotek na swoje systemy
operacyjne. Implementacje COM sa˛ również dost˛epne na cz˛eść Unix’ów. Same biblioteki można
było wi˛ec dołaczyć
˛
do swojego systemu i uzbroić go w możliwość wykorzystania komponentów
COM. Stopniowo jednak coraz to nowsze wersje przestały być dost˛epne na starszych wersjach
Windowsów. Na dzień dzisiejszy najnowsza wersja COM+ 1.5 dost˛epna jest jedynie z Windows
XP i Windows .NET Serwer i nie b˛edzie dost˛epna nawet dla Windows 2000.
COM w obecnej formie jest tak bardzo rozbudowany i posiada wiele różnorakich aspektów
wykorzystania, iż samo ich poznanie zajmuje dużo czasu, a o każdym z nich można
swobodnie napisać ksiażk˛
˛ e. Sama technologia zwiazana
˛
jest raczej z komponentowa˛ technika˛
programowania aniżeli IPC, aczkolwiek jest swoistym przejawem komunikacji mi˛edzy
procesami. Jak wspominaliśmy do komunikacji na niskim poziomie wykorzystywane jest RPC,
które opiszemy w dalszej cz˛eści.
19
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
3.1.3
3.1. COM (COM+)
Object Linking and Embedding (OLE)
Korzystanie ze schowka posiada jeden podstawowy mankament. Jeżeli wklejane dane nie sa˛
w standardowym formacie, nie można edytować danych, które zostały wklejone do programu
odbierajacego.
˛
Aby przezwyci˛eżyć te trudności zwiazane
˛
z przekazywaniem danych mi˛edzy programami stworzona została metoda osadzania i łaczenia
˛
obiektów OLE.
Program odbierajacy
˛ nie musi rozumieć danych, ponieważ za wyświetlanie i edytowanie
danych odpowiedzialny jest program źródłowy i mechanizm OLE. Kiedy użytkownik edytuje
dane, automatycznie uruchamia si˛e program źródłowy, który udost˛epnia swoje polecenia
edycji. Dzi˛eki metodzie OLE program może przesyłać dane w dowolnym formacie do każdego
programu, który jest zdolny odbierać dane OLE. Aby edytować dane w programie odbierajacym,
˛
użytkownik nie musi uruchamiać r˛ecznie programu źródłowego.
Technologia OLE jest w rzeczywistości kolekcja˛ wyższego poziomu technologii, które bazuja˛
na infrastrukturze COM. Poniższy rysunek przedstawia zależność mi˛edzy COM i OLE.
Rysunek 3.3: COM i OLE
• In-Place Activation (Visual Editing): Możliwość edytowania danych pochodzacych
˛
z in20
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
3.2. DDE (DDEML)
nej aplikacji. Interfejs aplikacji kontenera zmienia si˛e tak aby można było zmieniać własności dołaczonych
˛
danych.
• Linking and Embedding: Sa˛ to dwie metody dla składowania elementów, które zostały
stworzony w innej aplikacji, wewnatrz
˛
dokumentu OLE. Linkowanie polega na tym, że
wstawiane dane pochodza˛ z pliku, do którego posiadamy ścieżk˛e. Zmiany w pliku oryginalnym zostana˛ uwidocznione w aplikacji kontenera. Osadzanie polega na dołaczeniu
˛
danych
z aplikacji źródłowej do pliku aplikacji docelowej. Zmiany nie sa˛ odzwierciedlane.
• Drag & Drop: Możliwość wymiany danych przez chwycenie zaznaczonych danych I
puszczenie ich do innego okna.
• Automation: Zdolność tworzenia programowalnych aplikacji, które moga˛ być sterowane
zewn˛etrznie ze skryptu uruchomionego w innej aplikacji do zautomatyzowania
zadań końcowego użytkownika.
Automatyzacja umożliwia programowanie makr
mi˛edzy-programowych.
• Compound Documents: Zdolność do osadzenia lub linkowania informacji w centralnym
dokumencie. Umożliwia to posiadanie w dokumencie danych pochodzacych
˛
z innych aplikacji.
• Component Object Model and Component Objects: Zorientowany obiektowo model
programowania odpowiedni dla tworzenia oproramowania możliwego do powtórnego użycia.
• Monikers:
Abstrakcyjne odwołanie do obiektu.
Wyst˛epuje jako nazwa, która
jednoznacznie identyfikuje obiekt COM. W taki sam sposób jak ścieżka identyfikuje plik w
systemie plików, moniker identyfikuje obiekt COM w katalogu przestrzeni nazw.
• Uniform Data Transfer: pot˛eżny mechanizm transportu danych poprzez schowek,
drag&drop, lub automatyzacj˛e. Obiekty dostosowujace
˛ si˛e do tego modelu implemetuja˛
interfejs IdataObject.
• Compound Files:
standardowa implementacja structured storage (przechowywanie
różnych typów obiektów w jednym dokumencie).
3.2 DDE (DDEML)
Dynamic Data Exchange jest jednym z mechanizmów przekazywania danych mi˛edzy aplikacjami. Cały protokół składa si˛e z zestawu komunikatów i wytycznych, a jego realizacja sprowadza
si˛e do użycia pami˛eci współdzielonej i wymiany komunikatów mi˛edzy aplikacjami współdziela˛
cymi dane. Sam mechanizm może być wykorzystany do jednokrotnej wymiany danych, jak i
bieżacej
˛ ich aktualizacji, a użytkownik jedynie inicjalizuje sama˛ wymian˛e, nie biorac
˛ udziału w
późniejszych aktualizacjach. W systemach Windows dost˛epna jest również biblioteka Dynamic
Data Exchange Management Library (DDEML) wspomagajaca
˛ i ułatwiajaca
˛ wykorzystanie
21
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
3.2. DDE (DDEML)
DDE we własnych aplikacjach. Obecnie zaleca si˛e korzystanie z DDEML, aniżeli DDE. Zachowana jest pełna kompatybilność wstecz, tzn. b˛edzie mogli komunikować si˛e ze wszystkimi
aplikacjami używajacymi
˛
DDE, a ponadto mamy pewność, że nasza implementacja DDE jest w
pełni poprawna.
3.2.1
Ogólnie o DDE
Jak wspomnieliśmy DDE jest zestawem komunikatów i wytycznych dotyczacych
˛
ich użycia. Systemy operacyjne rodziny Windows posiadaja˛ architektur˛e oparta˛ na komunikatach przesyłanych
pomi˛edzy oknami. Każdy komunikat składa si˛e z dwóch parametrów, w których należy zmieścić wszystkie potrzebne informacje. DDE specyfikuje właśnie sposób przekazywania informacji
przez te parametry. Cała wymiana informacji sprowadza si˛e konwersacji mi˛edzy klientem a serwerem. Każda aplikacja może być zarówno klientem jak i serwerem, jedynie należy wziaść
˛ pod
uwag˛e, że dane okno powinno uczestniczyć tylko w jednej konwersacji. Czyli chcac
˛ aby aplikacja
uczestniczyła w kilku należy dla każdej z nich stworzyć osobne okno, n.p. poprzez stworzenie
dodatkowego, ukrytego okna, które b˛edzie obsługiwać DDE. Dane przekazywane pomi˛edzy oknami identyfikowane sa˛ za pomoca˛ nazwy aplikacji, tematu i pozycji. Pierwsza z nich oznacza
nazw˛e aplikacji, która udost˛epnia dane, temat zaś może być nazwa˛ pliku z którego b˛eda˛ udost˛epniane dane lub inna˛ dowolna˛ nazwa.
˛ Nazwa aplikacji i tematu nie może być zmieniona podczas
konwersacji mi˛edzy klientem a serwerem. Dane przekazywane sa˛ przy użyciu dowolnego formatu, podobnie jak w przypadku schowka. Dodatkowo rejestrowany jest format Link identyfikujacy
˛ pozycj˛e w konwersacji. Każda aplikacja powinna również udost˛epniać temat System, w
którym moga˛ znaleźć si˛e ogólne informacje przydatne innym aplikacjom takie jak lista dost˛epnych formatów, pomoc, lista pozycji tematu, lista tematów aktualnie dost˛epnych. Kiedy już nawiażemy
˛
konwersacj˛e z serwerem, klient może utworzyć stałe połaczenie
˛
do danych. Tworzac
˛ takie
połaczenie
˛
może wybrać pomi˛edzy samym notyfikowaniem o zmianach ciepłe lub notyfikowaniu
i przesyłaniu zmienionych danych - gorace.
˛
3.2.2
DDEML
Korzystanie z DDE wymaga od programisty implementacji protokołu polegajacej
˛ na odpowiedniej obsłudze komunikatów i reakcji na nie. Łatwo wi˛ec popełnić bład
˛ powodujacy
˛ nie możność
współpracy z innymi aplikacjami. Stosujac
˛ DDEML uzyskujemy dost˛ep do stringów i danych
współdzielonych, a nie uchwytów stringów i uchwytów danych. Możemy również za pomoca˛
DdeNameService zarejestrować nazwy serwisów, które udost˛epnia dana aplikacja (Informacja
to zostanie przekazana wszystkim klientom, którzy odbieraja˛ tego typu komunikaty). DDEML
stanowi wi˛ec pośrednia˛ warstw˛e pomi˛edzy DDE , a aplikacja.
˛
3.2.2.1
Inicjalizacja
Aby móc skorzystać z DDEML konieczne jest dołaczenie
˛
do plików źródłowych nagłówka
DDEML.H oraz zalinkowania przy kompilacji biblioteki USER32.LIB.Dodatkowo w systemie
powinna być dost˛epna bibliotek dynamiczna DDEML.DLL. Przed rozpocz˛eciem korzystanie
22
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
3.2. DDE (DDEML)
z DDE należy wywołać funkcj˛e DdeInitialize podajac
˛ jako parametry wskaźnik do funkcji
zwrotnej i filtry komunikatów. W rezultacie funkcja zwróci identyfikator instancji, który b˛edzie
przekazywany do innych funkcji. Filtry komunikatów moga˛ zostać zmienione później, należy
jedynie przekazać podczas wywołania uzyskany wcześniej identyfikator instancji.
Użycie
DDEML jest ściśle zwiazane
˛
z watkiem
˛
z którego wywoływana jest funkcja inicjalizujaca.
˛
Zwrócony identyfikator może być używany tylko w tym samym watku,
˛
w innych operacja
zakończy si˛e niepowodzeniem - każdy watek
˛
musi sam zainicjalizować wykorzystanie DDEML.
Zakończenie wszystkich konwersacji i zwolnienie zasobów nast˛epuje przy użyciu DdeUninitialize.
Elementem połaczonym
˛
z inicjalizacja˛ jest również rejestracja / odrejestrowanie serwisu
przy użyciu DdeNameService. Operacje te powinny mieć miejsce zaraz po inicjalizacji lub
bezpośrednio przed zwolnieniem zasobów.
3.2.2.2 Funkcja zwrotna DdeCallback
Inicjalizujac
˛ DDEML przekazujemy wskaźnik na funkcj˛e, która b˛edzie obsługiwać wszystkie
zgłoszenia. Musi być ona zgodna z definicja˛ funkcji DdeCallback. Funkcja ta jest wywoływana
dla każdego komunikatu, który nie został zablokowany w DdeInitialize i zależnie od typu komunikatu przekazywane sa˛ w odpowiednich parametrach informacje niesione z komunikatem.
W funkcji tej powinny pojawić si˛e bloki obsługujace
˛ wszystkie typy komunikatów jakie może
odebrać aplikacja. DDEML zwalnia użytkownika od obierania i nadawania komunikatów, musi
jednak zaimplementować całe przetwarzanie danych nadchodzacych
˛
z komunikatami.
3.2.2.3
Wykorzystanie stringów
Korzystajac
˛ z funkcji DDEML nie korzystamy bezpośrednio ze stringów, ale ze uchwytów do
stringów. W systemach Windows sa˛ to tzw. atomy. Do zarzadzania
˛
nimi służa˛ funkcje:
• DddCreateStringHandle - tworzaca
˛ uchwyt do wskazanego stringu dla danej instancji
poprzez wstawienie wpisu do tablicy, o ile nie istnieje i zwi˛ekszenie liczby użyć,
• DdeCmpStringHandles
-
porównuje
stringi
wskazywane
przez
uchwyty
(raczej
sprawdzanie równości),
• DdeFreeStringHandle - zmniejsza liczb˛e użyć, jeżeli wyniesie zero zwalnia,
• DdeKeepStringHandle - zwi˛eksza liczb˛e użyć string’a.
3.2.2.4 Nawiazywanie
˛
połaczenia
˛
- konwersacje
DDEML dopuszcza pojedyncze i wielekrotne konwersacje. Pierwsza nawiazuje
˛
połaczenie
˛
z jednym serwerem wyspecyfikowanym poprzez nazw˛e serwisu i tematu przekazana˛ do funkcji DdeConnect. Po stronie serwera odbierany jest komunikat i zależnie od ustawionych flag przekazywany jest do do funkcji zwrotnej. O ile dany temat istnieje zwracamy wartość true. Możliwie
23
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
3.3. RPC
jest również wykonanie zapytania specyfikujac
˛ jedynie serwis lub usług˛e lub podajac
˛ za obydwa parametry null. W takim przypadku DDEML rozsyła do wszystkich zarejestrowanych i
spełniajacych
˛
warunek serwisów komunikat o wylistowanie wszystkich tematów spełniajacych
˛
warunek. Po zebraniu odpowiedzi od serwisów, wybiera jednego i z nim nawiazuje
˛
połaczenie
˛
przekazujac
˛ go klientowi inicjujacemu
˛
połaczenie.
˛
Podobnie jest w przypadku wielokrotnych konwersacji. Zasady sa˛ podobne przy czym korzystamy w tym wypadku z funkcji DdeConnectList, a lista serwisów przekazywana jest bezpośrednio do klienta. Aby sfinalizować połaczenia
˛
z serwerami należy użyć połaczenia
˛
funkcji DdeQueryNextServer i DdeQueryConvInf pozyskujac
˛ w ten sposób identyfikatory serwisów i
tematów, a później zapisujac
˛ je jako uchwyty stringów DdeKeepStringHandle.
Zamykanie połacze
˛ ń odbywa si˛e poprzez wywołania odpowiednich funkcji podajac
˛ jako
parametr uchwyty otrzymane przy połaczeniu.
˛
3.2.2.5 Zarzadzanie
˛
danymi
Podczas komunikacji mi˛edzy klientem a serwerem nie sa˛ przekazywane dane, a jedynie
uchwyty do nich.
Strona udost˛epniajaca
˛ dane tworzy lokalny bufor z nimi, a nast˛epnie
przekazuje go do funkcji DdeCreateDataHandle, która to kopiuje dane do obiektu DDE i
zwraca do niego uchwyt. Klient po otrzymaniu uchwytu (w funkcji DdeCallback) może dane
odczytać poprzez przekazanie otrzymanego uchwytu do DdeAccessData. Zwrócony wskaźnik
pozwala tylko na odczyt danych z obiektu DDE. Po dokonaniu odczytu konieczne jest zwolnienie
wskaźnika poprzez wywołanie DdeUnaccessData. Innym sposobem na dost˛ep jest stworzenie
lokalnej kopii obiektu funkcja˛ DdeGetData.
Aplikacja
tworzaca
˛
uchwyty,
które
stworzone
zostały
jako
własne
(flaga
HDATA_APPOWNED) lub nie przekazane do DDEML musi zwolnić je przed swoim
zakończeniem poprzez wywołanie na nich DdeFreeDataHandle.
Pozostałe uchwyty sa˛
automatycznie zwalniane.
Aplikacja może również zmieniać zawartość obiektu DDE stworzonego przez siebie dopóki
nie przekaże go dalej. Funkcja DdeAddData pozwala na wypełnienie obiektu danymi lub tylko
dodanie. Obiekt, który został przekazany do DDEML nie może być modyfikowany, można go
jedynie zwolnić.
3.2.2.6 Transakcje
Transakcje w DDEML sa˛ odzwierciedleniem komunikatów DDE, jednakże wiele aspektów protokołu jest już poza zakresem implementacji. Programista musi zaimplementować jedynie w
funkcji zwrotnej obsług˛e odpowiednich trybów transakcji do których zobowiazał
˛
si˛e podczas inicjalizacji DDEML. Pełen wykaz transakcji zamieszczony jest w tabeli 3.1.
3.3 RPC
Zdalne wywoływanie procedur (RPC) zostało zapoczatkowane
˛
przez firm˛e Sun Microsystems.
Prac˛e nad ta˛ technologia˛ były kontynuowane przez Open Software Foundation (OSF) jako cz˛eść
24
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
Typ transakcji
XTYP_ADVDATA
XTYP_ADVREQ
XTYP_ADVSTART
XTYP_ADVSTOP
XTYP_CONNECT
XTYP_CONNECT_CONFIRM
XTYP_DISCONNECT
XTYP_ERROR
XTYP_EXECUTE
XTYP_MONITOR
XTYP_POKE
XTYP_REGISTER
XTYP_REQUEST
XTYP_UNREGISTER
XTYP_WILDCONNECT
XTYP_XACT_COMPLETE
3.3. RPC
Odbiorca Opis
klient
Odpowiedź serwera na XTYP_ADVREQ z
uchwytem do danych
serwer
Serwer wywowłał DdePostAdvise - dane
pozycji zostały zmienione, klient prosi o
zmienione dane
serwer
Wywołanie DdeClientTransaction typu
XTYP_ADVSTART, klient przesyła żadanie
informowania o zmianach wraz ze specyfikacja˛ pozycji, formatu danych i sposobu
informowania
serwer
Wywołanie DdeClientTransaction typu
XTYP_ADVSTOP - anulowanie powiadamiania
serwer
Klient wywołał DdeConnect z wyspecyfikowanym serwisem i tematem obsługiwanym przez serwer
klient
Serwer odpowiedział true na połaczenie
˛
klient / Jedna ze stron wywołała DdeDisconnect
serwer
klient / Bład
˛ DDEML, operacja nie może być kontynserwer
uowana
serwer
Wywołanie DdeClientTransaction typu
XTYP_EXECUTE, umożliwia przesłanie
serwerowi ciagu
˛ poleceń do wykonania
aplikacja Wystapiło
˛
nowe zdarzenie DDE
monitroujaca
˛
DDE
serwer
Wywołanie DdeClientTransaction typu
XTYP_POKE wraz z danymi przekazanymi
do serwera od klienta
klient / Aplikacja zarejestrowała nowy serwis
serwer
serwer
Wywołanie DdeClientTransaction typu
XTYP_REQUEST. Klient przesyła żadanie
o dane specyfikujac
˛ serwis, temat i pozycj˛e.
klient / Aplikacja odrejestrowała serwis
serwer
serwer
Nawiazanie
˛
połaczenie
˛
bez
wyspecyfikowanego serwisu / tematu - listning
spełaniajacych
˛
kryterium
klient
Koniec tranzakcji asynchronicznej, serwer
zwraca wynik
Tablica 3.1: Zestawienie transakcji DDEML
ogólniejszego standardu DCE (Data Communications Exchange).
25
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
3.3. RPC
RPC dostarczane przez Microsoft jest kompatybilny ze standardem OSF/DCE. Ważna˛ uwaga˛
jest to, że jest on kompatybilny ale nie można budować aplikacji na podstawie szkieletu dostarczonego przez OSF. RPC Microsoftu jednak w pełni współpracuje z innymi, bazujacymi
˛
na DCE,
systemami takimi jak HP i IBM AIX.
Mechanizm RPC jest unikalny, ponieważ używa on innych mechanizmów komunikacji
mi˛edzyprocesowej do ustalenia komunikacji mi˛edzy klientem i serwerem. RPC może używać
nazwanych potoków, NetBIOS lub Windows Sockets do komunikacji ze zdalnymi systemami.
Jeżeli klient i serwer sa˛ na tym samym komputerze, moga˛ używać mechanizmu Local Procedure
Call (LPC), do przekazywania informacji mi˛edzy procesami lub podsystemami. Czyni to RPC
najbardziej elastycznym i przenośnym mechanizmem IPC w Windows NT.
Dzi˛eki własnościom RPC logika programu i zwiazane
˛
z nia˛ procedury moga˛ istnieć na innych
maszynach, co jest ważne dla aplikacji rozproszonych.
Jak jest pokazane na poniższym diagramie Windows dostarcza wsparcie dla klienta RPC
poprzez interfejsy NetBIOS, nazwane potoki i Windows Sockets:
Rysunek 3.4: Klient RPC w Windows 95
Nast˛epny diagram pokazuje jak Windows 95 dostarcza wsparcie dla klienta RPC poprzez
NetBIOS i Windows Sockets. Nie ma natomiast wsparcia dla RPC poprzez nazwane potoki.
Aplikacja RPC klienta wykorzystujaca
˛ nazwane potoki może być uruchamiana na komputerze
z Windows 95 lecz aplikacja serwera musi być uruchamiana na LAN Manager Serwerze lub
Windows NT.
RPC bazuje na koncepcji używanej przy budowie programów strukturalnych, które moga˛ być
26
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
3.3. RPC
widziane jako szkielet, do którego można przyczepić różne ciała. Szkielet zawiera główna˛ logik˛e
programu, która powinna być zmieniana tylko w rzadkich przypadkach. Ciałem natomiast sa˛
procedury, które sa˛ wywoływane przez szkielet do wykonywania odpowiednich zadań.
W tradycyjnych programach, ciało jest statycznie dołaczone.
˛
Przy pomocy DLL, strukturalne
programy moga˛ dynamicznie dołaczać
˛
ciało. Z DLL kod procedury sa˛ w innych modułach. Dlatego DLL może być modyfikowany lub modyfikowany bez zmian w szkielecie. RPC znaczy tyle, że
szkielet i ciało może istnieć na innych komputerach, tak jak jest to pokazane na rysunku.
Na rysunku tym, aplikacja klienta została stworzona przy pomocy specjalnie skompilowanej
biblioteki stub. Aplikacja klienta myśli, że wywołuje własne podprogramy. W rzeczywistości
biblioteka ta przesyła dane i funkcje na dół do modułu zwanego RPC Runtime. Moduł ten jest
odpowiedzialny za znalezienie serwera, który może spełnić komend˛e RPC. Kiedy już znajdzie,
funkcja i dane sa˛ przesyłane do serwera, gdzie sa˛ przejmowane przez moduł RPC Runtime. Wtedy serwer ładuje odpowiednie biblioteki dla funkcji, buduje odpowiednie struktury danych i
wywołuje funkcj˛e. Funkcja myśli że jest wywoływana przez aplikacj˛e klienta. Kiedy funkcja jest
gotowa, wszystkie zwracane wartości sa˛ zbierane razem, formatowane i wysyłane z powrotem
do klienta przez moduł RPC Runtime. Kiedy funkcja wraca do aplikacji klienta zawiera w sobie
odpowiednie dane lub dostaje informacje, że wywołanie funkcji nie powiodło si˛e.
27
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
3.4. WINDOWS SOCKETS
3.4 Windows Sockets
Windows Sockets API dostarcza standardowego interfejsu Windows dla wielu transportów z
różnymi schematami adresowania, takimi jak TCP/IP lub IPX. API Windows Socket powstały dla
osiagni˛
˛ ecia dwóch celów. Pierwszym z nich było przeniesienie interfejsu socketów, opracowanego
na University of California, Berkeley we wczesnych latach 80’tych, do środowiska Windows i
Windows NT. Drugim celem była standaryzacja API dla wszystkich platform.
Jest to de facto standard dla dost˛epu datagramów i serwisów sesji poprzez TCP/IP. Aplikacje
nie wykorzystujace
˛ NetBIOS’u musza˛ być napisane dla interfejs Socketów aby mieć dost˛ep do
protokołów TCP/IP Microsoftu. Aplikacje napisane dla tego interfejsu zawieraja˛ FTP i SNMP. W
Windows 95 sockety oferuja˛ rozszerzenie do IPX/SPX.
Windows Socket w systemach Windows jest niezależnym od protokołu sieciowym API stworzonym dla programistów. Windows Socket jest publiczna˛ specyfikacja,
˛ która stara si˛e osiagn
˛ ać
˛
nast˛epujace
˛ cele:
• Dostarcza dobrze znanego sieciowego API dla uzytkowników Windows lub UNIX
• Oferuje binarna˛ kompatybilność mi˛edzy różnymi bazujacymi
˛
na stosie protokołów TCP/IP
narz˛edziami
• Dostarcza zarówno połaczeniowego
˛
jak i bezpołaczeniowego
˛
protokołu.
Dost˛epne sa˛ dwa typy socketów:
• Stream sockets - odpowiada za przesyłanie danych bez tworzenia z niech rekordów - jest to
strumień bajtów. Strumienie gwarantuja˛ dostarczenie danych oraz poprawność sekwencji
i niepowtarzalności.
• Datagram sockets - odpowiada za przesyłanie danych przy pomocy rekordów. W tym przypadku nie jest gwarantowane dostarczenie danych, ich poprawna kolejność i niepowtarzalność.
Poprawna kolejność oznacza, że pakiety zostały dor˛eczone w kolejności, w której zostały wysłane.
Niepowtarzalność oznacza, że dostajemy dany pakiet tylko raz.
Sockety, w porównaniu do protokołu NetBIOS, dostarczaja˛ mniejsze obciażenie.
˛
Protokoły
nie pochodzace
˛ z NetBIOS takie jak TCP/IP i IPX/SPX wymagaja˛ interfejsu NetBIOS i warstwy
mapowania. Ten dodatkowy software zwi˛eksza czas działania i dodaje nagłówek do ramki
danych przesyłanych przez sieć. Dla przykładu, kiedy interfejs NetBIOS jest używany nad
protokołem TCP/IP, nagłówek NetBIOS jest dodawany do ramki przed nagłówkami TCP i
IP. Stacje robocze, które nasłuchuja˛ tylko ramek TCP/IP nie sa˛ wstanie zobaczyć tej ramki.
Jednakże, gdy sockety sa˛ używane, ramka jest wysyłana przez TCP/IP bez dodatkowego
nagłówka NetBIOS’u.
W TCP/IP adresem sieciowym stacji roboczej jest adres IP a adresem procesu jest numer
portu. Źródłowy i docelowy adres IP i numery portów sa˛ polami w strukturze pakietu TCP/IP.
W IPX/SPX, adres sieciowy jest kombinacja˛ sieciowego identyfikatora IPX i adresu MAC (media
28
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
3.4. WINDOWS SOCKETS
access control) urzadzenia,
˛
a adresem procesu jest numer sucketu IPX. Sieć źródłowa, docelowa,
w˛ezeł i numery socketów sa˛ polami w strukturze pakietu IPX/SPX.
Uwaga: Sockety IPX nie sa˛ takie same jak Sockety Windows.
Przy dwukierunkowej ścieżce, aplikacje Windows specyfikuja˛ zast˛epujace,
˛
zależne od protokołu identyfikatory.
Protokół
TCP/IP
IPX/SPX
dwukierunkowa ścieżka
dwukierunkowa ścieżka
Identyfikatory źródłowe i docelowe
adres IP i numer portu żródła
Network ID, adres MAC urzadzenia,
˛
numer socketu IPX
Tablica 3.2: Protokoły i identyfikatory
Nast˛epujaca
˛ tabela opisuje obsługujace
˛ pliki dla 16-bitowych i 32-bitowych socketów dla protokołu TCP/IP i 32-bitowe sockety dla protokołu IPX/SPX.
Plik
WINSOCK.DLL
Opis
16-bit Windows Sockets
WSOCK.VXD
Virtualized Windows Sockets
WSTCP.VXD
Windows Sockets over TCP/IP1
WSOCK32.DLL
32-bit Windows Socket
WSIPX.VXD
Windows Sockets over IPX/SPX2
Komentarz
Dostarcza wsteczna˛ kompatybilność z
istniejacymi
˛
16-bitowymi Socketami
TCP/IP w Windows, aplikacje takie jak
ping
Dostarcza 16-bitowe Sockety Windows i
32-bitowe Sockety TCP/IP i IPX/SPX w
Windows
Dostarcza 16-bitowe Sockety Windows i
32-bitowe sockety TCP/IP w Windows
Dostarcza 32-bitowe sockety TCP/IP w
Windows, aplikacje takie jak telnet i
32-bitowe aplikacje IPX/SPX Windows
Socket
Dostarcza 32-bitowe sockety IPX/SPX
w Windows
Tablica 3.3: Pliki systemowe Windows Sockets
1. Sockety Windows dla protokołu TCP/IP sa˛ oparte na datagramach przy UDP
2. Sockety Windows dla protokołu IPX/SPX sa˛ oparte na datagramach przy IPX
Popularne programy takie jak ftp lub telnet używaja˛ socketów Windows.
3.4.1
Windows Sockets 2
Wersja 2 Windows Sockets rozszerza funkcjonalność w wilu dziedzinach:
29
ROZDZIAŁ 3. MECHANIZMY ROZBUDOWANE
Dost˛ep do protokołów innych niż
TCP/IP
Niezależna od protokołu rezolucja
nazw
Niezależny od protokołu multicast i multipoint
Quality of service
Inne rozszerzenia
3.4. WINDOWS SOCKETS
Windows Sockets 2 pozwala aplikacji na używanie
podobnych interfejsów socketów aby osiagn
˛ ać
˛ jednoczesny dost˛ep do wielu zainstalowanych protokołów
transportowych.
Windows Sockets 2 zawiera zestandaryzowany zbiór
funkcji dla odwołań i pracy z wieloma domenami rezolucji nazw (np. DNS, SAP, X.500)
Windows Sockets 2 odkrywa możliwości dostarczane
przez warstw˛e transportowa˛ i używa ich.
Window Sockets 2 ustala konwencj˛e negocjowania
wymaganego poziomu serwisu (pasmo i opóźnienie)
Windows Sockets 2 zawiera dzielone sockety i warunkowa˛ akceptacj˛e; wymian˛e danych użytkownika w czasie nawiazywania
˛
i zrywania połaczenia;
˛
rozszerzenia
specyficzne dla protokołów.
Tablica 3.4: Rozszerzenia Windows Socket 2
30
Rozdział 4
Podsumowanie
Może si˛e wydawać, że w systemach serii Windows brakuje klasycznych mechanizmów znanych
z Unix’ów. Systemami Microsoftu rzadziły
˛
jednak troch˛e inne prawa aniżeli Unixami - i tutaj można by szukać takiego a nie innego podejścia. W obu rodzinach mamy potoki i pami˛eć
współdzielona,
˛ a jedynie dalszy rozwój na pewnym etapie podażał
˛
innymi drogami.
Obecnie wi˛ekoszść mechanizmów zaliczanych do klasy IPC może swobodnie operować w
środowisku rozproszonym i oferuje rozbudowana˛ funkcjonalność - taki jest wymóg czasu.
Możemy je jednak bez obaw wykorzystywać również lokalnie, a przy obecnych cenach mocy
komputerów możemy swobodnie pozwolić sobie na taka˛ nadmiarowość uzyskujac
˛ jeden
machanizm do wielu zastosowań, a przez to zmniejszenie kosztów implementacji systemów.
Ewolucja podstawowych mechanizów IPC poprzez kolejne wersje systemu Windows jest
bardzo niewielka.
Wi˛ekszość aplikacji powinna ze soba˛ współpracować, co najmniej na
poziomie oferowanym przez aplikacj˛e pisana˛ dla wcześniejszej wersji mechanizmu. Ponadto
tylko podstawowe mechaznizmy sa˛ nierozłaczne
˛
z systemem, a i tak wi˛ekszość z nich można
zaktualizować - oczywiście, o ile istnieje jeszcze wsparcie dla naszej wersji systemu.
31
ROZDZIAŁ 4. PODSUMOWANIE
Sieć
GUI
Synchronizacja
Mailslot
tak
Anonymous nie, tylko
Pipes
lokalne
nie
nie
nie
zewn˛etrzna
Named
Pipes
tak
nie
Windows
Sockets
tak
nie
zewn˛etrzna.
tryb synchroniczy (z blokada˛
funkcji) i asynchroniczny (bez
blokady)
wymagane
stosowanie
zewn˛etrznej
Schowek
nie
tak
nie konieczna
DDE
tak, NetDDE
tak
nie konieczna,
zapytanie
odpowiedź
COM
tak
nie
OLE
nie
tak
nie potrzebna
RPC
tak
nie
File Mapping
nie
nie
interfejs
przykrywa cała˛
struktur˛e RPC
i nie wiadomo
czy dana funkcja
wykonywane
jest zdalnie czy
lokalnie
brak, zalecane
stosowanie
zewn˛etrznej
Kompatybilność
W
Windows
NT/2000/XP
zaimplementiowane
jako
nazwane
o
unikalnej
nazwie
W
Windows
95/98/Me
nie
moga˛ być tworzone
Wymiana
danych
jednokierunkowa
jednokierunkowa
jednolub
dwukierunkowa
Wersja 2 jest
binarnie
i
źródłowo kompatybilna
z
1.1.
brak
niezgodności
pełna wsteczna
dwukierunkowa
Dodatkowa biblioteka.
klient - serwer
Kompatybliny z
OSP RPC
Tablica 4.1: Zestawienie mechanizmów - cechy
32
jednokierunkowa
klient - serwer,
dwukierunkowa
Dane
przechowywane sa˛ u
klienta, na czas
edycji przekazywane
sa˛
do
serwera, a po
jej zakończeniu
zpowrotem
do
klienta.
klient - serwer
jednokierunkowa
ROZDZIAŁ 4. PODSUMOWANIE
Bezpieczeństwo
Tylko
serwer
ma
możliwość odczytu z
mailslota. Klient tylko
może zapisywać.
Można ustalić security
descriptor
odpowiedzialny
za
kontrol˛e dost˛epu do
obu końców potoku
poprzez ACL
stosowanie
impersonacji do przyznawania uprawnień dla
klienta
możliwość kodowania
połaczenia
˛
przy pomocy SSL, używanie
certyfikatów
Jeden
właściel
schowka, inna aplikacja może dopiero
zapisywać po staniu
si˛e właścielem
brak,
NetDDE
mechanizmy
bezpieczeństwa NT / 2000
/ XP
Zalety
elegancja, możliwość
broadcastu <426 bajtów
Wady
Ograniczenie
wielkości wiadomości
< 64K
prostota
komunikacja
tylko
pomi˛edzy
powiazanymi
˛
procesami
prostota
niezależność od protokołu
konieczność
znajmości nazwy potoku
przed
nawiazaniem
˛
komunikacji
niezgodności z socketami z Berkeley
idealny
mechanizm
dla
aplikacji
biurowych
małe możliwości, obecnie nie wystarczajace
˛ pojedyńcza zwartość
prostota, łatwość użycia
w chwili obecnej lepiej
skorzystać z
OLE,
oferujacego
˛
znacznie
wi˛eksze
możliwości.
COM
pełne, identyfikacja,
autoryzacja...
OLE
opiera si˛e na mechanizmach
bezpieczeństwa w NT
i RPC
Duże
możliwości.
Kodowanie, autoryzacja, porównywanie z
ACL
ustawianie
zasad
współdzielenia stron,
możliwość zastosowania ACL
technologia
komponetowa,
łatwość
współpracy aplikacji
Możliwość
wstawania
dokumentów
zewn˛etrznych
aplikacji.
Niezależność platformowa
Mailslot
Anonymous Pipes
Named Pipes
Windows Sockets
Schowek
DDE
RPC
File Mapping
Duże zużycie zasobów.
Skomplikowany.
szybki dost˛ep do pliku,
odpowiednik pami˛eci
współdzielonej
Tablica 4.2: Zestawienie mechanizmów - wady, zalety, bezpieczeństwo
33
Rozdział 5
Bibliografia
1. MSDN
Library,
Platform
SDK:
Interprocess
Communications,
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipc/
base/interprocess_communications.asp
2. Component Object Model (COM), DCOM, and Related Capabilities, Software Technology
Review, Software Engineering Institute, 13.III.2002r., http://www.sei.cmu.edu/str/
descriptions/com.html
3. MSDN
Library,
Platform
SDK:
COM+
(Component
Services),
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/
cossdk/htm/complusportal_9o9x.asp
34