Windows via C/C++, wydanie V
| | Nr katalogowy: | 248602 | | Liczba stron: | 872 | | Wydawnictwo: | Microsoft Press | | Oprawa: | miękka | Czas dostawy: | 4 - 7 dni |
| 
 Cena detaliczna: 135,45 zł Twoja cena: 120,60 zł (rabat: 11%)
|
Wybitny przewodnik po programowaniu Windows w Microsoft Visual C++.
Opanuj zawiłości programowania aplikacji przy użyciu nie zarządzanego kodu C++ - dzięki poradom prosto od ekspertów. Klasyczna książka Jeffreya Richtera została teraz uaktualniona o informacje dotyczące systemów Windows XP, Windows Vista i Windows Server 2008. Zapewnia dogłębne, wyczerpujące wskazówki, zaawansowane techniki i rozbudowane przykłady kodu pomagające programować aplikacje oparte na systemach Windows.
Odkryj, jak:
>Projektować i implementować swoje aplikacje zarówno dla 32-bitowych jak i 64-bitowych wersji Windows
>Tworzyć procesy i zadania oraz nimi manipulować
>Planować, zarządzać, synchronizować i niszczyć wątki
>Wykonywać asynchroniczne i synchroniczne operacje sprzętowego wejścia/wyjścia przy użyciu portu zakończenia wejścia/wyjścia
>Alokować pamięć, korzystając z różnych technik obejmujących pamięć wirtualną, pliki mapowane w pamięci i sterty
>Manipulować domyślnie przydzielaną pamięcią fizyczną dla stosów wątków
>Budować biblioteki DLL do opóźnionego ładowania, podczepiania API i wszczepiania do procesów
>Używać strukturalnej obsługi wyjątków, automatycznego wznawiania aplikacji i odzyskiwania danych









Zobacz inne produkty z kategorii - C / C++ / Visual C++
Spis treści - Windows via C/C++, wydanie V:Część I: Lektura obowiązkowa
1 Obsługa błędów
Definiowanie własnych kodów błędów
Aplikacja przykładowa ErrorShow
2 Praca ze znakami i łańcuchami znaków
Kodowanie znaków
Znakowe i łańcuchowe typy danych ANSI i Unicode
Funkcje Unicode i ANSI w Windows
Funkcje Unicode i ANSI w bibliotece uruchomieniowej C
Bezpieczne funkcje łańcuchowe w bibliotece uruchomieniowej C
Wprowadzenie do nowych, bezpiecznych funkcji łańcuchowych
Jak uzyskać więcej kontroli przy wykonywaniu operacji na łańcuchach?
Funkcje łańcuchowe Windows
Dlaczego należy korzystać z Unicode?
Jak zalecamy pracować ze znakami i łańcuchami?
Tłumaczenie łańcuchów pomiędzy Unicode a ANSI
Eksportowanie funkcji ANSI i Unicode z bibliotek DLL
Określanie, czy dany tekst jest w standardzie ANSI, czy Unicode
3 Obiekty jądra
Czym jest obiekt jądra?
Zliczanie użyć
Bezpieczeństwo
Tabela uchwytów obiektów jądra dla danego procesu
Tworzenie obiektu jądra
Zamykanie obiektu jądra
Współdzielenie obiektów jądra pomiędzy granicami procesów
Korzystanie z dziedziczenia uchwytów do obiektów
Nadawanie nazw obiektom
Duplikowanie uchwytów do obiektów
Część II: Realizacja zadań
4 Procesy
Pisanie pierwszej aplikacji dla Windows
Uchwyt do instancji procesu
Funkcja CreateProcess
pszApplicationName i pszCommandLine
Kończenie procesu
Koniec działania funkcji początkowej głównego wątku
Funkcja ExitProcess
Funkcja TerminateProcess
Gdy przestaną istnieć wszystkie wątki procesu
Gdy proces zakończy swoje działanie
Procesy potomne
Uruchamianie osobnych procesów potomnych
Gdy administrator działa z uprawnieniami zwykłego uŜytkownika
Automatyczne podnoszenie uprawnień procesu
Ręczne podnoszenie uprawnień procesu
Jaki jest bieŜący kontekst uprawnień?
Wyliczanie procesów działających w systemie
5 Zadania
Nakładanie ograniczeń na procesy należące do zadania
Umieszczanie procesu wewnątrz zadania
Kończenie wszystkich procesów należących do zadania
Pozyskiwanie statystyk dotyczących zadania
Powiadomienia o zadaniach
Aplikacja przykładowa Job Lab
6 Podstawy wątków
Kiedy tworzyć wątek?
Kiedy nie tworzyć wątku
Pisanie funkcji początkowej nowego wątku
Funkcja CreateThread
psa
cbStackSize
pfnStartAddr i pvParam
dwCreateFlags
pdwThreadID
Kończenie wątku
Funkcja wątkowa zwraca wartość
Funkcja ExitThread
Funkcja TerminateThread
Gdy proces kończy działanie
Gdy wątek kończy działanie
Wątki od środka
Uwarunkowania biblioteki uruchomieniowej C/C++
Ojej! przez pomyłkę wywołałem CreateThread zamiast _beginthreadex
Funkcje biblioteki uruchomieniowej C/C++, których nie powinno się
nigdy wywoływać
Zyskiwanie poczucia własnej toŜsamości
Konwertowanie pseudo-uchwytu na prawdziwy uchwyt
7 Planowanie wątków, priorytety i koligacje
Wstrzymywanie i wznawianie wątku
Wstrzymywanie i wznawianie procesu
Usypianie
Przełączanie na inny wątek
Przełączanie na inny wątek na procesorze z hiperwątkowością
Czasy wykonywania wątku
CONTEXT we właściwym kontekście
Priorytety wątków
Abstrakcyjne spojrzenie na priorytety
Programowanie priorytetów
Dynamiczne zwiększanie poziomów priorytetów wątków
Dostrajanie planowania wątków dla procesu pierwszoplanowego
Planowanie priorytetów dla żądań wejścia/wyjścia
Aplikacja przykładowa Scheduling Lab
Koligacje
8 Synchronizacja wątków w trybie użytkownika
Dostęp atomowy: rodzina funkcji blokujących
Wiersze pamięci podręcznej
Zaawansowana synchronizacja wątków
Technika, której należy unikać
Sekcje krytyczne
Sekcje krytyczne: uwagi drobnym drukiem
Sekcje krytyczne i blokady pętlowe
Sekcje krytyczne i obsługa błędów
Ograniczone blokady odczytu-zapisu
Zmienne warunkowe
Przykładowa aplikacja Queue
Użyteczne wskazówki i techniki
9 Synchronizacja wątków przy pomocy obiektów jądra
Funkcje oczekiwania
Efekty uboczne udanego oczekiwania
Obiekty jądra dla zdarzeń
Aplikacja przykładowa Handshake
Obiekty jądra dla zegarów
Kolejkowanie wywołań APC przez zegary
Brakujące szczegóły dotyczące zegarów
Obiekty jądra dla semaforów
Obiekty jądra dla muteksów
Sprawy związane z porzucaniem
Muteksy a sekcje krytyczne
Aplikacja przykładowa Queue
Wygodne zestawienie obiektów do synchronizacji wątków
Inne funkcje synchronizujące wątki
Asynchroniczne, sprzętowe wejście/wyjście
WaitForInputIdle
MsgWaitForMultipleObjects(Ex)
WaitForDebugEvent
SignalObjectAndWait
Wykrywanie zakleszczeń przy użyciu Wait Chain Traversal API
10 Synchroniczne i asynchroniczne operacje wejścia/wyjścia
Otwieranie i zamykanie urządzeń
Szczegółowe spojrzenie na CreateFile
Praca z urządzeniami plikowymi
Pobieranie rozmiaru pliku
Ustawianie wskaźnika pliku
Ustawianie końca pliku
Wykonywanie synchronicznego, sprzętowego wejścia/wyjścia
Przerzucanie danych do urządzenia
Anulowanie synchronicznego wejścia/wyjścia
Podstawy asynchronicznego, sprzętowego wejścia/wyjścia
Struktura OVERLAPPED
Zastrzeżenia do asynchronicznego, sprzętowego wejścia/wyjścia
Anulowanie zakolejkowanych żądań sprzętowego wejścia/wyjścia
Otrzymywanie powiadomień o zakończonym żądaniu wejścia/wyjścia
Sygnalizowanie obiektu jądra dla urządzenia
Sygnalizowanie obiektu jądra dla zdarzenia
Powiadamialne wejście/wyjście
Porty zakończeń wejścia/wyjścia
11 Pula wątków Windows
Scenariusz 1: Asynchroniczne wywoływanie funkcji
Jawne sterowanie zadaniem
Aplikacja przykładowa Batch
Scenariusz 2: Wywoływanie funkcji w określonych odstępach czasu
Aplikacja przykładowa Timed Message Box
Scenariusz 3: Wywoływanie funkcji, gdy zasygnalizowany zostanie
pojedynczy obiekt jądra
Scenariusz 4: Wywoływanie funkcji, gdy zakończy się Ŝądanie
asynchronicznego wejścia/wyjścia
Działania wykonywane po zakończeniu funkcji zwrotnej
Niestandardowe pule wątków
Eleganckie niszczenie puli wątków: grupy porządkowe
12 Włókna
Praca z włóknami
Aplikacja przykładowa Counter
Część III: Zarządzanie pamięcią
13 Architektura pamięci Windows
Wirtualna przestrzeń adresowa procesu
Jak jest podzielona wirtualna przestrzeń adresowa?
Partycja przypisywania pustego wskaźnika
Partycja trybu uŜytkownika
Partycja trybu jądra
Regiony w przestrzeni adresowej
Przydzielanie fizycznej pamięci dla regionu
Pamięć fizyczna a plik wymiany
Pamięć fizyczna nieutrzymywana w pliku wymiany
Atrybuty ochrony
Dostęp z kopiowaniem przy zapisie
Flagi atrybutów ochrony dla specjalnego dostępu
Zebranie wszystkiego razem
Regiony od środka
Znaczenie wyrównywania danych
14 Badanie pamięci wirtualnej
Informacje systemowe
Aplikacja przykładowa System Information
Stan pamięci wirtualnej
Zarządzanie pamięcią na maszynach NUMA
Aplikacja przykładowa Virtual Memory Status
Określanie stanu przestrzeni adresowej
Funkcja VMQuery
Aplikacja przykładowa Virtual Memory Map
15 Korzystanie z pamięci wirtualnej we własnych aplikacjach
Rezerwowanie regionu w przestrzeni adresowej
Przydzielanie pamięci w zarezerwowanym regionie
Jednoczesne rezerwowanie regionu i przydzielanie pamięci
Kiedy przydzielać pamięć fizyczną?
Oddzielanie pamięci fizycznej i zwalnianie regionu
Kiedy oddzielać pamięć fizyczną?
Aplikacja przykładowa Virtual Memory Allocation
Zmienianie atrybutów ochrony
Odnawianie zawartości pamięci fizycznej
Aplikacja przykładowa MemReset
Rozszerzenia okien adresowych
Aplikacja przykładowa AWE
16 Stos wątku
Funkcja sprawdzania stosu z biblioteki uruchomieniowej C/C++
Aplikacja przykładowa Summation
17 Pliki mapowane w pamięci
Mapowane w pamięci pliki wykonywalne i biblioteki DLL
Dane statyczne nie są współdzielone przez wiele instancji pliku
wykonywalnego lub biblioteki DLL
Mapowane w pamięci pliki danych
Metoda 1: Jeden plik, jeden bufor
Metoda 2: Dwa pliki, jeden bufor
Metoda 3: Jeden plik, dwa bufory
Metoda 4: Jeden plik, zero buforów
Korzystanie z plików mapowanych w pamięci
Krok 1: Tworzenie lub otwieranie obiektu jądra dla pliku
Krok 2: Tworzenie obiektu jądra dla mapowania pliku
Krok 3: Mapowanie danych pliku do przestrzeni adresowej procesu
Krok 4: Odłączanie mapowania danych pliku od przestrzeni adresowej procesu
Kroki 5 i 6: Zamykanie obiektu mapowania pliku i obiektu pliku
Aplikacja przykładowa File Reverse
Przetwarzanie dużego pliku przy użyciu plików mapowanych w pamięci
Pliki mapowane w pamięci a spójność
Określanie adresu bazowego pliku mapowanego w pamięci
Szczegóły implementacyjne plików mapowanych w pamięci
Korzystanie z plików mapowanych w pamięci do współdzielenia danych
pomiędzy procesami
Pliki mapowane w pamięci wspierane przez plik wymiany
Aplikacja przykładowa Memory-Mapped File Sharing
Rzadko przydzielane pliki mapowane w pamięci
Aplikacja przykładowa MMF Sparse
18 Sterty
Domyślna sterta procesu
Powody tworzenia dodatkowych stert
Ochrona składników
Efektywniejsze zarządzanie pamięcią
Dostęp lokalny
Unikanie kosztów synchronizacji wątków
Szybkie zwalnianie pamięci
Jak utworzyć dodatkową stertę?
Alokowanie bloku pamięci ze sterty
Zmienianie rozmiaru bloku
Otrzymywanie rozmiaru bloku
Zwalnianie bloku
Niszczenie sterty
UŜywanie stert w języku C++
Rozmaite funkcje sterty
Część IV: Dynamicznie dołączane biblioteki
19 Podstawy DLL
Biblioteki DLL a przestrzeń adresowa procesu
Ogólny obraz sytuacji
Budowanie modułu DLL
Budowanie modułu wykonywalnego
Uruchamianie modułu wykonywalnego
20 Zaawansowane techniki DLL
Jawne ładowanie modułu DLL i dołączanie symboli
Jawne ładowanie modułu DLL
Jawne wyładowywanie modułu DLL
Jawne dołączanie do wyeksportowanego symbolu
Funkcja wejściowa biblioteki
Powiadomienie DLL_PROCESS_ATTACH
Powiadomienie DLL_PROCESS_DETACH
Powiadomienie DLL_THREAD_ATTACH
Powiadomienie DLL_THREAD_DETACH
Szeregowane wywołania DllMain
DllMain a biblioteka uruchomieniowa C/C++
Ładowanie biblioteki DLL z opóźnieniem
Aplikacja przykładowa DelayLoadApp
Przekierowania funkcji
Znane biblioteki DLL
Przekierowywanie bibliotek DLL
Zmienianie adresów bazowych modułów
Wiązanie modułów
21 Pamięć lokalna dla wątku
Dynamiczna pamięć TLS
Korzystanie z dynamicznej pamięci TLS
Statyczna pamięć TLS
22 Wszczepianie bibliotek DLL i podczepianie API
Wszczepianie biblioteki DLL: przykład
Wszczepianie biblioteki DLL przy użyciu rejestru
Wszczepianie biblioteki DLL przy użyciu haków Windows
Narzędzie Desktop Item Position Saver (DIPS)
Wszczepianie biblioteki DLL przy użyciu zdalnych wątków
Aplikacja przykładowa Inject Library
Biblioteka DLL Image Walk
Wszczepianie biblioteki DLL przy użyciu konia trojańskiego
Wszczepianie biblioteki DLL przez debuger
Wszczepianie kodu przy uŜyciu CreateProcess
Podczepianie API: przykład
Podczepianie API poprzez nadpisywanie kodu
Podczepianie API poprzez manipulowanie sekcją importu modułu
Aplikacja przykładowa Last MessageBox Info
Część V:Strukturalna obsługa wyjątków
23 Procedury obsługi sytuacji krańcowych
Zrozumienie procedur obsługi sytuacji krańcowych poprzez przykład
Funcenstein1
Funcenstein2
Funcenstein3
Funcfurter1
Czas na Quiz: FuncaDoodleDoo
Funcenstein4
Funcarama1
Funcarama2
Funcarama3
Funcarama4: ostatnia granica
Uwagi na temat bloku finally
Funcfurter2
Aplikacja przykładowa SEH Termination
24 Procedury obsługi wyjątków i wyjątki programowe
Zrozumienie filtrów wyjątków i procedur obsługi wyjątków poprzez przykład
Funcmeister1
Funcmeister2
EXCEPTION_EXECUTE_HANDLER
Kilka użytecznych przykładów
Globalne odkręcanie
Zatrzymywanie globalnego odkręcania
EXCEPTION_CONTINUE_EXECUTION
Ostrożne korzystanie z EXCEPTION_CONTINUE_EXECUTION
EXCEPTION_CONTINUE_SEARCH
GetExceptionCode
Wyjątki związane z pamięcią
Wyjątki związane z wyjątkami
Wyjątki związane z debugowaniem
Wyjątki związane z liczbami całkowitymi
Wyjątki związane z liczbami zmiennoprzecinkowymi
GetExceptionInformation
Wyjątki programowe
25 Nieobsłużone wyjątki, ukierunkowana obsługa, wyjątków i wyjątki C++
wewnątrz funkcji UnhandledExceptionFilter
Działanie numer 1: pozwalanie na zapisanie zasobu i kontynuowanie wykonania
Działanie numer 2: powiadamianie debugera o nieobsłużonym wyjątku
Działanie numer 3: powiadamianie globalnie ustawionej funkcji filtra
Działanie numer 4: powiadamianie debugera o nieobsłużonym wyjątku (znowu)
Działanie numer 5: ciche zakończenie procesu
UnhandledExceptionFilter i interakcja z usługą WER
Debugowanie dokładnie na czas
Aplikacja przykładowa Spreadsheet
Ukierunkowany wyjątek i procedury obsługi kontynuacji
Wyjątki C++ a wyjątki strukturalne
Wyjątki i debuger
26 Raportowanie błędów i przywracanie aplikacji do normalnego stanu
Konsola raportowania błędów systemu Windows
Programowe raportowanie błędów systemu Windows
Wyłączanie generowania i przesyłania raportów
Dostosowywanie wszystkich raportów dotyczących problemów wewnątrz procesu
Tworzenie i dostosowywanie raportu o problemie
Tworzenie niestandardowego raportu dotyczącego problemu: WerReportCreate
Ustawianie parametrów raportu: WerReportSetParameter
Dodawanie pliku mini-zrzutu do raportu: WerReportAddDump
Dodawanie arbitralnych plików do raportu: WerReportAddFile
Modyfikowanie łańcuchów tekstowych w oknie dialogowym:
WerReportSetUIOption
Przekazywanie raportu dotyczącego problemu: WerReportSubmit
Zamykanie raportu dotyczącego problemu: WerReportCloseHandle
Aplikacja przykładowa Customized WER
Automatyczne wznawianie aplikacji i odzyskiwanie danych
Automatyczne wznawianie aplikacji
Wsparcie dla odzyskiwania danych przez aplikację
Część VI: Dodatki
A Środowisko budowania aplikacji
Plik nagłówkowy CmnHdr.h
Opcja wersji systemu Microsoft Windows
Opcje Unicode
Definicje Windows i poziom ostrzeżeń
Pomocnicze makro pragma message
Makro chINRANGE
Makro chBEGINTHREADEX
Ulepszenie DebugBreak dla platform x86
Tworzenie kodów dla wyjątków programowych
Makro chMB
Makra chASSERT i chVERIFY
Makro chHANDLE_DLGMSG
Makro chSETDLGICONS
Zmuszanie programu łączącego do szukania funkcji początkowej (w)WinMain
Wsparcie dla kompozycji interfejsu uŜytkownika przy uŜyciu dyrektywy pragma
B Makra rozbijające komunikaty, makra pól potomnych i makra API
Makra rozbijające komunikaty
Makra pól potomnych
Makra API 795