Windows System Programming, Wytanie czwarte, Johnson (John) Hart

	Wersja 1.06, 21 maja 2010.      Naprawiony bd w programie cciMTMM (wersja wielowtkowa z odwzorowaniem w pamici, szybsza od innych rozwiza).
	                                Dodatkowo kilka drobnych poprawek i zmian. 

    Wersja 1.05, 13 kwietnia 2010.  Naprawione bdy w programach tail, RecordAccessMM, RecordAccess, and randfile.
                                    Przeksztacono kilka projektw przez wykorzystanie bezpiecznych funkcji biblioteki uruchomieniowej jzyka C.
                                    Zobacz http://msdn.microsoft.com/en-us/library/8ef0s5kh%28VS.80%29.aspx i punkt 3. poniej.

    Wersja 1.04, 30 marca 2010.     Dodatkowe drobne poprawki (na przykad zmiana z "atoi" na "_ttoi"). Oglnie staraem si 
                                    spjnie stosowa znaku uniwersalne. Wczeniej wystpowao wiele rozbienoci, na przykad 
                                    pominicie funkcji uniwersalnych lub makra _T w odpowiednim miejscu. Sdz, e wikszo
                                    takich problemw jest rozwizana, jednak zamierzam nadal ich szuka i czekam 
                                    na informacje o tego typu usterkach.
                                    Zobacz punkt 5. poniej ("Uwagi na temat oglnych znakw i acuchw").
    Wersja 1.03, 28 marca 2010.     Dopracowany rozmiar bufora i liczba wtkw w programach cci* (dla systemu czteroprocesorowego).
									Naprawiono program lsW, aby wyeliminowa zagroenie przepenieniem bufora (stosu). Zobacz te komentarze w programach lsReg i lsFP.
									Naprawione inne drobne usterki.
    Wersja 1.02, 10 marca 2010.     Naprawiony bd w programie cciMT. Rozbudowane zarzdzanie zasobami i zgaszanie bdw w kilku programach.
    Wersja 1.01, 28 lutego 2010.    Rozbudowany program version (rozdzia 6.). Rozbudowano programy kopiujce z rozdziau 2.
    Wersja 1.0,  25 lutego 2010.    Naprawiony bd w programie cciMT_VTP.
    Beta 1.3,  21 lutego 2010       Gwne zmiany: naprawione projekty w trybie diagnostycznym, naprawiony program wcMTMM.
    Beta 1.2, 20 stycznia 2010  
    
Plik ReadMe.txt dla "pliku Przykady" (Przyklady.zip).

Wersja beta jest dostpna do wgldu przed planowan na luty 2010 roku publikacj ksiki
Windows System Programming, Edition 4.
http://www.amazon.com/Windows-Programming-Addison-Wesley-Microsoft-Technology/dp/0321657748/ref=sr_1_1?ie=UTF8&s=books&qid=1264025370&sr=1-1

SPIS TRECI
    1.  PRZEGLD
    2.  UKAD ZAWARTOCI PLIKU PRZYKADY
    3.  O BIBLIOTECE URUCHOMIENIOWEJ JZYKA C RUN-TIME I BEZPIECZESTWIE
    4.  ZNANE ISTOTNE PROBLEMY Z WERSJ BETA
    5.  UWAGI NA TEMAT UNIWERSALNYCH ZNAKW I ACUCHW
    6.  DANE KONTAKTOWE
    
1.  PRZEGLD

Ten katalog (Przyklady) zawiera kod rdowy wszystkich przykadowych programw, a take
pliki doczane, funkcje narzdziowe, projekty i pliki wykonywalne.

WANE: jeli chcesz wykorzysta przykadowy kod w swoich aplikacjach, skopiuj go z katalogu
Przyklady, a nie bezporednio z ksiki. Kod w ksice jest skrcony, a take nie jest starannie
przetestowany oraz moe by nieaktualny pod innymi wzgldami.

Wiele programw ilustruje dodatkowe funkcje i rozwizania wicze, jednak plik Przykady
nie obejmuje rozwiza wszystkich wicze ani kadej moliwej implementacji.

Wszystkie programy przetestowano w systemach Windows 7, Vista, XP, Server 2008 i Server 2003 na rnych
komputerach - od laptopw po serwery. Tam, gdzie to waciwe, przetestowano je 
te w systemie Windows 9x i wczeniejszych systemach NT, cho wiele programw (zwaszcza
te z dalszych rozdziaw) nie dziaa w systemie Windows 9x, a nawet w systemach NT 4.0 (take one 
s przestarzae).

Oprcz nielicznych wyjtkw prawie wszystkie programy kompiluj si bez ostrzee w rodowiskach Microsoft
Visual Studio 2005 i 2008 przy poziomie ostrzee 3. rodowisko Visual Studio 2010 (Beta 2 i RC) bez problemw
przeksztacio kilka programw. Kiedy pojawi si to rodowisko, zamierzam przeksztaci wszystkie programy.

Dostpne s odrbne katalogi z projektami dla rodowisk Microsoft Visual Studio 2005 i 2008 (32- i 64-bitowe).
S to trzy katalogi:
 - Projekty2005 (nie obejmuje projektw, ktre wymagaj systemw NT 6 [Vista, Windows 7, Server 2008])
 - Projekty2008
 - Projekty2008_64.
 
Te projekty buduj programy wykonywalne w katalogach:
 - run2005
 - run2008
 - run2008_64.
 
UWAGA: cho oglnie staram si, aby pliki wykonywalne byy aktualne i spjne z plikami rdowymi,
warto ponownie zbudowa projekty przed uyciem plikw. Gwarantuje to, e uyta zostanie najnowsza 
wersja. 

Katalogi dla projektw i programw dla rodowiska VS 2010 pojawi si w zaktualizowanym pliku 
Przykady po pojawieniu si tej wersji.

Istnieje te plik zip z projektami dla rodowisk Visual Studio C++ 6.0 i 7.0 projects. Te projekty mog 
by przydatne dla niektrych czytelnikw, s jednak nieaktualne.

Uniwersalne funkcje biblioteki jzyka C s czsto stosowane, podobnie jak sowa kluczowe specyficzne dla kompilatora,
takie jak __try, __except i __leave. Od rozdziau 7. bardzo przydatne s wielowtkowa biblioteka jzyka C 
oraz funkcje _beginthreadex i _endthreadex.

Projekty dostpne s w wersjach produkcyjnej i diagnostycznej. Aktywna jest wersja produkcyjna.
Wszystkie projekty s bardzo proste i wystpuj w nich minimalne zalenoci. Mona je bardzo
szybko utworzy w podanej konfiguracji jako wersj diagnostyczn lub produkcyjn. Pliki .exe i .dll 
s budowane w odpowiednich katalogach run.

Projekty buduj wszystkie programy (oprcz bibliotek statycznych i dynamicznych)
jako aplikacje konsolowe.

Programy mona te zbudowa za pomoc narzdzi programistycznych o otwartym dostpie do kodu 
rdowego, takich jak gcc i g++ z pakietu Gnu Compiler Collection (http://gcc.gnu.org/). 
Czytelnicy zainteresowani takimi narzdziami powinni zapozna si z projektem o otwartym 
dostpie do kodu rdowego MinGW (www.mingw.org). MinGW jest tam opisany jako przeniesiona 
na system Windows wersja pakietu GNU Compiler Collection (GCC) i GNU Binutils przeznaczona 
do uytku przy rozwijaniu aplikacji dla systemu Microsoft Windows. Przetestowaem za 
pomoc tych narzdzi tylko kilka programw, a prby z MinGW zakoczyy si powodzeniem. Udao 
mi si nawet zbudowa kod midzyplatformowy przez utworzenie programw wykonywalnych i bibliotek 
DLL z systemu Windows w systemie Linux. Ponadto okazao si, e kompilatory gcc i g++ 
udostpniaj bardzo uyteczne ostrzeenia i komunikaty o bdach dotyczce programw 64-bitowych.

2.  UKAD ZAWARTOCI PLIKU PRZYKADY

Gwny katalog nosi nazw Przyklady. Mona go skopiowa bezporednio na dysk twardy 
do wygodnej lokalizacji.

 - Dla kadego rozdziau istnieje katalog na pliki rdowe (R01, ..., R15).
 - Wszystkie pliki doczane znajduj si w katalogu INCLUDE.
 - Katalog UTILITY zawiera czsto stosowane funkcje, takie jak ReportError.
 - Kompletne projekty znajduj si w katalogach "Projekty".
 - Pliki wykonywalne i biblioteki DLL oparte na projektach znajduj si w katalogach "run".

Osoby korzystajce ze rodowiska Visual Studio 6 lub Visual Studio 7 mog pobra 
plik WindowsSmpEd3 z witryny powiconej oryginalnemu wydaniu ksiki.

3.  O BIBLIOTECE URUCHOMIENIOWEJ JZYKA C RUN-TIME I BEZPIECZESTWIE

Microsoft wykona dobr prac, zwikszajc bezpieczestwo biblioteki uruchomieniowej jzyka C.
Zobacz stron: http://msdn.microsoft.com/en-us/library/8ef0s5kh%28VS.80%29.aspx.
	
Generalnie nie stosowaem funkcji wzbogaconych. Staraem si unika zwykych
zagroe, jednak z pewnoci pojawi si pewne przeoczenia (prosz o informacje
przypadku ich znalezienia). Tam, gdzie to odpowiednie, zastosowaem proste rozwizanie
i zdefiniowaem nazw _CRT_SECURE_NO_WARNINGS w projektach, aby zablokowa ostrzeenia.
**** Wersja 1.05, 12 kwietnia 2010. Naprawiem liczne projekty i pliki rdowe, a to jeszcze nie 
     koniec. Zobacz na przykad projekty ServerNP i ClientNP pod ktem zmian i ich
     wpywu na logik kodu. Zwr uwag na wykorzystanie funkcji _tfopen_s w programie ServerNP.c 
	 i funkcji _tcsncpy_s w programie LocSrver.c (oba z rozdziau 11.).

Im wicej o tym myl, tym bardziej czuj, e powinienem zaktualizowa przykadowe
programy przez wykorzystanie wzbogaconej biblioteki. Nawet jeli masz powody do tego, aby z niej
nie korzysta, jej zastosowanie w przykadach bdzie dobrym przypomnieniem o niej.

Zamierzam niedugo zabra si za to. Kiedy skocz, zamieszcz w witrynie odpowiedni plik .zip.

4.  ZNANE ISTOTNE PROBLEMY Z WERSJ BETA

 - biblioteka uruchomieniowa jzyka C - wystpuje zagroenie przepenieniem bufora (zobacz poprzedni punkt).
 W wikszoci przykadw problem ten zosta rozwizany.

5.  UWAGI NA TEMAT UNIWERSALNYCH ZNAKW I ACUCHW

W przykadach i w ksice zwykle stosowaem uniwersalne znaki (TCHAR) i acuchy
(LPTSTR i LPTCSTR), a take odpowiednie funkcje uniwersalne, takie jak 
_tcscpy, _tcslen itd.

Jednak nie zachowaem wystarczajcej spjnoci lub starannoci. W wersji 1.04 (30 marca 2010) naprawiem
wiele niespjnoci.

Ponadto warto zwrci uwag na nastpujce kwestie:

    a.  Pozostawiem implementacje programw grep (wyszukiwanie wzorca) i wc (zliczanie sw) (grepMP, wcMT itd.)
        w trybie 8-bitowym, aby zademonstrowa logik zwizan z wtkami i plikami odwzorowanymi w pamici.
        Zaktualizowanie kodu przez zastosowanie uniwersalnych znakw i acuchw to atwe zadanie dla 
		zainteresowanych tym osb.
    b.  Komunikaty w programach klient-serwer zawieraj znaki 8-bitowe. Jest to wane, cho same programy
        korzystaj ze znakw uniwersalnych. To samo dotyczy biblioteki DLL "commandIP".
    c.  Niektre programy "X" (z celowymi bdami) s niespjne.
    d.  W niektrych eksperymentalnych programach uniwersalne znaki i acuch nie s stosowane w 
	    peni prawidowo.
        
**  CZY UNIWERSALNE ACUCHY I ZNAKI NAPRAWD S POTRZEBNE?
	To zaleny. Cz osb zasugerowaa, e powinienem uywa znakw UNICODE, jak to zwykle ma miejsce
	w nowych programach. W zasadzie si z tym zgadzam. Trudno mi byo podj decyzj o tym, ktre rozwizanie
	zastosowa w wydaniu 4. Ostatecznie zdecydowaem si pozosta przy obecnym podejciu, cho zamieca
	ono kod (uwaam, e makra _T i funkcje _t s irytujce). Mimo to nadal spotykam si z du iloci
	starszego kodu w tej postaci, a take kodu przenoszonego z systemw UNIX/Linux i programami,
	ktre musz dziaa na rnych platformach i mie zgodny kod rdowy (jak w dodatku B).
	       

6.  DANE KONTAKTOWE

Informacje zwrotne od Czytelnikw s mile widziane. Mona skontaktowa si ze mn pod adresami:

 - jmhart62@gmail.com lub jmh_assoc@hotmail.com

Staram si odpowiada na wszystkie wiadomoci tak szybko, jak to moliwe. Nawet jeli bd zajty, wyl
krtk informacj z potwierdzeniem odbioru wiadomoci.

Informacje o istotnych poprawkach, wkadzie w ksik itd. znajd si w powiconej jej witrynie:
	www.jmhartsoftware.com 
	
ycz powodzenia. Praca nad wydaniem 4 bya dla mnie przyjemnoci, a przez lata chtnie czytaem
informacje od czytelnikw poprzednich wyda. W przyszoci oczekuj na wiadomoci od Was.

John
jmhart62@gmail.com lub jmh_assoc@hotmail.com