Mickey Williams, Christian Gross
Windows 2000 Developer's Guide, m. CD-ROM
DNA, COM+, Active Directory
4 Angebote ab € 5,69 €
Mickey Williams, Christian Gross
Windows 2000 Developer's Guide, m. CD-ROM
DNA, COM+, Active Directory
- Gebundenes Buch
- Merkliste
- Auf die Merkliste
- Bewerten Bewerten
- Teilen
- Produkt teilen
- Produkterinnerung
- Produkterinnerung
Windows 2000 bringt eine Vielzahl technischer Neuerungen mit sich, die ganz "normale" Anwender, aber vor allem auch Software-Entwickler und Systemverwalter vor neue Herausforderungen stellen. Dieses technische Handbuch beschreibt ausführlich die neuen Microsoft-Standards, liefert zahllose Beispielprogramme und zeigt vor allem, wie eigene Installationen, Anwendungen und Netzwerke sicher und zukunftsweisend implementiert werden.
Windows 2000 bringt eine Vielzahl technischer Neuerungen mit sich, die ganz "normale" Anwender, aber vor allem auch Software-Entwickler und Systemverwalter vor neue Herausforderungen stellen. Dieses technische Handbuch beschreibt ausführlich die neuen Microsoft-Standards, liefert zahllose Beispielprogramme und zeigt vor allem, wie eigene Installationen, Anwendungen und Netzwerke sicher und zukunftsweisend implementiert werden.
Produktdetails
- Produktdetails
- New Technology
- Verlag: Markt +Technik
- Seitenzahl: 1096
- Abmessung: 245mm
- Gewicht: 1902g
- ISBN-13: 9783827257024
- ISBN-10: 3827257026
- Artikelnr.: 24719941
- Herstellerkennzeichnung Die Herstellerinformationen sind derzeit nicht verfügbar.
- New Technology
- Verlag: Markt +Technik
- Seitenzahl: 1096
- Abmessung: 245mm
- Gewicht: 1902g
- ISBN-13: 9783827257024
- ISBN-10: 3827257026
- Artikelnr.: 24719941
- Herstellerkennzeichnung Die Herstellerinformationen sind derzeit nicht verfügbar.
Einführung 23
Teil 1 Windows 2000-Kerntechnologien 27
Kapitel 1 Windows DNA im Überblick 29
1.1 Zur Geschichte von Windows und Windows NT 30
1.2 Windows DNA im Detail 31
1.2.1 Die Lösung 32
1.3 Die Architektur von Windows DNA 34
1.3.1 COM überall 34
1.3.2 Präsentationsebene 35
1.3.3 Schicht der Firewall 38
1.3.4 Ebene der Geschäftslogik 39
1.3.5 Datenebene 44
1.4 Zusammenfassung 46
Kapitel 2 Virtueller Speicher und Speicherverwaltung 47
2.1 Virtueller Speicher 48
2.2 Entscheidung für den Einsatz von virtuellem Speicher 50
2.2.1 Virtuelle Speicherbereiche reservieren 51
2.2.2 Virtuelle Speicherseiten bestätigen 52
2.2.3 Virtuelle Speicherseiten sperren 56
2.2.4 Virtuelle Speicherseiten freigeben 57
2.2.5 Speicher für andere Prozesse zuweisen 58
2.3 Beispiel mit virtuellem Speicher 58
2.4 Heap-Funktionen von Windows 2000 69
2.4.1 Heap-Verwaltung unter Windows 2000 69
2.4.2 Private Heaps in C++-Klassen 72
2.5 Zusammenfassung 77
Kapitel 3 Threads und Prozesse 79
3.1 Prozesse und Threads 80
3.2 Prozesse verwalten 82
3.2.1 Die Funktion CreateProcess 82
3.2.2 Prozesse beenden 85
3.3 Threads verwalten 86
3.3.1 Threads erzeugen 86
3.3.2 Threads beenden 91
3.3.3 Thread-Prioritäten abrufen und ändern 92
3.3.4 Lokaler Thread-Speicher 93
3.3.5 Thread-ID bestimmen 95
3.3.6 Thread-Affinität 96
3.3.7 Zusammenarbeit mehrerer Threads 99
3.3.8 Wann ein Thread zu erzeugen ist 102
3.3.9 Wann kein Thread zu erzeugen ist 102
3.4 Synchronisierung 103
3.4.1 Sperroperationen von Win32 103
3.4.2 Kritische Abschnitte 106
3.4.3 Ereignisse verwalten 109
3.4.4 Mutexe und gegenseitiger Ausschluss 116
3.5 Semaphoren 119
3.5.1 Semaphoren und Wartefunktionen 120
3.5.2 Anwendungen für Semaphoren 121
3.5.3 Semaphoren erstellen 122
3.5.4 Semaphoren-gesteuerte Ressourcen zurückgeben 123
3.6 Semaphoren und kritische Abschnitte in einer Anwendung 124
3.7 Auftragsobjekte 131
3.7.1 Attribute von Auftragsobjekten steuern 132
3.7.2 Beispiel für ein Auftragsobjekt 133
3.8 Zusammenfassung 137
Kapitel 4 Dateien 139
4.1 Dateisysteme in Windows 2000 140
4.2 Allgemeine Dateioperationen 141
4.2.1 Datenträgerinformationen einholen 141
4.2.2 Attribute des Dateisystems 142
4.2.3 Informationen über Datenträger abfragen 143
4.2.4 Dateien öffnen, schließen und löschen 145
4.2.5 In Dateien schreiben 149
4.2.6 Aus Dateien lesen 150
4.3 Nach Dateien suchen 153
4.3.1 Die Funktionen FindFirstFile, FindNextFile
und FindClose 153
4.3.2 Ausblick: FindFirstFileEx 157
4.3.3 Die Struktur FILETIME 158
4.4 Andere Dateioperationen 161
4.4.1 Die Funktion CopyFile 161
4.4.2 Die Funktion MoveFile 161
4.4.3 Die Funktion SetFilePointer 161
4.4.4 Die Funktion GetFileSize 163
4.5 Asynchrone Ein- und Ausgabe 164
4.5.1 Überlappende Ein- und Ausgabe 165
4.5.2 Fertigstellungsroutinen für Dateien 168
4.5.3 Beispiel für Dateifertigstellungsroutinen 170
4.6 Das verschlüsselnde Dateisystem 178
4.7 Funktionen zur Dateibenachrichtigung 182
4.8 Zusammenfassung 188
Kapitel 5 Strukturierte Ausnahmebehandlung 189
5.1 Grundlagen der Ausnahmebehandlung 190
5.2 Arbeitsweise der strukturierten Ausnahmebehandlung 191
5.3 Beendigungsbehandlungsroutinen 192
5.3.1 Einen __try-Block mit __leave beenden 195
5.3.2 Normale und vorzeitige Beendigung 195
5.4 Ausnahmebehandlungsroutinen 196
5.4.1 Ausnahmefilter 197
5.4.2 Ausnahmen bei Gleitkommaoperationen behandeln 202
5.5 Ausnahmebehandlung in C++ 203
5.5.1 Ausnahmen zur Erkennung von Fehlern 203
5.5.2 Ausnahmen zum Aufräumen nach Erkennen
von Fehlern 205
5.5.3 Die Standardbibliothek für Ausnahmen 206
5.5.4 Ausnahmen zur Laufzeit 207
5.5.5 Logische Ausnahmen 208
5.5.6 Fehler während der Konstruktion erkennen 209
5.6 Strukturierte Ausnahmebehandlung von Win32 mit
der Ausnahmebehandlung von C++ integrieren 210
5.7 Zusammenfassung 213
Kapitel 6 Dynamische Link-Bibliotheken 215
6.1 Bibliotheken 216
6.1.1 Statische Link-Bibliotheken 217
6.1.2 Dynamische Link-Bibliotheken 217
6.1.3 Vorteile von DLLs 219
6.1.4 Nachteile von DLLs 219
6.2 DLLs erstellen und einsetzen 220
6.2.1 DLLs initialisieren 220
6.2.2 Funktionen und Daten von DLLs exportieren
und importieren 222
6.2.3 DLLs zur Ladezeit laden 226
6.2.4 DLLs zur Laufzeit laden 227
6.2.5 Versionskontrolle bei DLLs 228
6.2.6 Gemeinsam genutzten Speicher für eine DLL erstellen 230
6.2.7 Ein einfaches DLL-Beispiel 231
6.2.8 C++ und DLLs 236
6.2.9 MFC und DLLs 238
6.3 Generische Thunks 247
6.3.1 Generische Thunk-Architektur 248
6.3.2 Generische Thunk-Funktionen 249
6.3.3 Beispiel für generische Thunks 252
6.3.4 Fehlersuche in generischen Thunks 260
6.4 Zusammenfassung 261
Kapitel 7 Verteilte Sicherheit 263
7.1 Sicherheit von Windows 2000 im Überblick 264
7.2 Grundlegende Datenstrukturen für Sicherheit 265
7.2.1 Zugriffstoken für Prozesse und Threads 266
7.2.2 Sicherheits-IDs 269
7.2.3 Die Strukturen ACE, DACL und SACL 274
7.2.4 Die erforderliche Größe für eine
ACL-Struktur bestimmen 276
7.2.5 Einen zugriffsgewährenden ACE in eine
DACL aufnehmen 277
7.2.6 Sicherheitsdeskriptoren 279
7.2.7 Einen Sicherheitsdeskriptor abrufen 282
7.2.8 Die Struktur SECURITY_ATTRIBUTES 285
7.3 Vertrauensbasierte Zugriffskontrolle 285
7.3.1 Die Struktur TRUSTEE 287
7.3.2 Die Struktur ACTRL_ACCESS_ENTRY 289
7.3.3 Die Struktur ACTRL_ACCESS_ENTRY_LIST 291
7.3.4 Die Struktur ACTRL_PROPERTY_ENTRY 292
7.3.5 Die Struktur ACTRL_ACCESS 292
7.4 Identitätswechsel für einen Client 298
7.5 Zusammenfassung 299
Kapitel 8 Windows 2000-Debugging 301
8.1 Strategien der Fehlersuche in Windows 302
8.2 Die Fehlersuche im Code erleichtern 303
8.2.1 Unterstützung der Fehlersuche für Windows 2000 303
8.2.2 MFC-Unterstützung für die Fehlersuche 304
8.3 Überblick zur Fehlersuche in Windows 2000 307
8.3.1 Symbolische Debug-Informationen 307
8.3.2 Debugging-Tools von Microsoft 307
8.3.3 Debugging-Tools von Drittherstellern 308
8.4 Der integrierte Debugger von Visual C++ 308
8.4.1 Grundlagen zum Debugger von Visual C++ 309
8.4.2 Die Fenster des Visual C++-Debuggers 313
8.4.3 Tricks für den Visual C++-Debugger 314
8.5 Der Windows-Debugger WINDBG 317
8.6 SoftIce zur Fehlersuche in Programmen 317
8.7 Mit Dr. Watson die Ursache von Abstürzen suchen 318
8.8 Mit BugTrapper die Ursache von Abstürzen suchen 321
8.9 Quellen für Tools von Drittherstellern 322
8.9.1 Compuware NuMega Lab 322
8.9.2 Mutek Solutions Ltd. 323
8.9.3 Rational 323
8.10 Zusammenfassung 323
Kapitel 9 Dienste in Windows 2000 325
9.1 Dienste 326
9.1.1 Zusammenarbeit mit Windows 2000-Diensten 326
9.1.2 Windows 2000-Dienste und Systemsicherheit 329
9.2 Windows 2000-Dienste programmieren 331
9.2.1 Den Dienststeuerungs-Manager mit
dem Dienststatus aktualisieren 332
9.2.2 Der Lebenszyklus eines Windows 2000-Dienstes 335
9.2.3 Daten in das Windows 2000-
Ereignisprotokoll schreiben 341
9.3 Beispiel eines Windows 2000-Dienstes 345
9.3.1 FileSpy: Ein Windows 2000-Dienst 345
9.4 Zusammenfassung 358
Kapitel 10 Dienste von Windows 2000 steuern 359
10.1 Dienststeuerungsprogramme schreiben 360
10.1.1 Einen Dienst mit dem Dienststeuerungs-
Manager registrieren 360
10.1.2 Registrierung eines Dienstes aufheben 364
10.1.3 Gescheiterte Dienste automatisch neu starten 366
10.2 Applets für die Systemsteuerung schreiben 369
10.2.1 Die Applet-Schnittstelle zur Systemsteuerung 369
10.2.2 CtlFileSpy: Ein Applet der Systemsteuerung
für den Dienst FileSpy 372
10.3 Zusammenfassung 382
Teil 2 Benutzerinteraktion/Desktop 383
Kapitel 11 GDI-Programmierung 385
11.1 GDI-Grundlagen 386
11.2 Gerätekontexte 387
11.2.1 Die GDI-Abbildungsmodi 388
11.2.2 GDI-Objekte 389
11.3 Bitmaps 390
11.3.1 DDBs und DIBs 391
11.3.2 DIBs mit 16 Farben 396
11.3.3 DIBs mit 256 Farben 396
11.4 Das DIB-Beispiel 399
11.4.1 Die Klasse CDIBitmap 399
11.4.2 Die Klasse CBmpPalette 406
11.4.3 Änderungen an der Klasse CDibDoc 407
11.4.4 Änderungen an der Hauptrahmenklasse 410
11.4.5 Änderungen an der Klasse CDibView 410
11.5 Pfade 413
11.6 Metadateien 417
11.7 Beispiel einer Metadatei 418
11.7.1 Änderungen der Klassendeklaration von CMetaView 418
11.7.2 Änderungen am Destruktor der Klasse CMetaView 419
11.7.3 Änderungen an CMetaView::OnInitialUpdate 419
11.7.4 Klicks mit der linken Maustaste 421
11.7.5 Änderungen an CMetaView::OnDraw 421
11.8 Zusammenfassung 423
Kapitel 12 Besitzerzeichnung und Benutzerzeichnung 425
12.1 Besitzer-Steuerelemente 426
12.2 Ein Besitzer-Steuerelement implementieren 427
12.2.1 Die Nachricht WM_DRAWITEM 428
12.2.2 Die Nachricht WM_MEASUREITEM 429
12.2.3 Die Nachricht WM_COMPAREITEM 430
12.2.4 Die Nachricht WM_DELETEITEM 430
12.3 OwnDraw: Beispiel für Besitzerzeichnung 431
12.3.1 Die Struktur CListItem erstellen 432
12.3.2 Die Nachrichten der Besitzerzeichnung behandeln 432
12.3.3 Elemente in das Listenfeld aufnehmen 433
12.3.4 Die Nachricht WM_MEASUREITEM behandeln 433
12.3.5 Die Nachricht WM_DRAWITEM behandeln 434
12.3.6 Die Nachricht WM_DELETEITEM behandeln 435
12.4 Benutzerdefiniertes Zeichnen 436
12.4.1 Datenstrukturen einer Benutzerzeichnung 437
12.4.2 CustDraw: Beispiel einer Benutzerzeichnung mit MFC 443
12.5 Zusammenfassung 450
Teil 3 COM und ActiveX 451
Kapitel 13 Konzepte von COM und OLE 453
13.1 Überblick zu COM und OLE 454
13.2 Gebräuchliche COM- und OLE-Technologien 454
13.2.1 Verbunddokumente 455
13.2.2 Visuelle Bearbeitung 456
13.2.3 Automatisierung 458
13.2.4 OLE-Datentransfer 458
13.2.5 Drag & Drop 459
13.2.6 Integration mit anderen Anwendungen 459
13.3 Programmieren mit COM und OLE 459
13.3.1 COM-Schnittstellen 459
13.3.2 COM-Schnittstellen und -Objekte identifizieren 460
13.3.3 GUIDs behandeln 461
13.3.4 Das Versionsproblem 462
13.3.5 Die Schnittstelle IUnknown 463
13.3.6 Ein Objekt erstellen 467
13.4 Beispiel einer COM-Komponente 471
13.4.1 Der Shell-Erweiterungsmechanismus 472
13.4.2 Kontextmenü-Erweiterungen 472
13.4.3 Das Beispiel erstellen 473
13.5 Zusammenfassung 488
Kapitel 14 Automatisierung 489
14.1 Programmierbare Anwendungen durch Automatisierung 490
14.2 Die Schnittstelle IDispatch 491
14.2.1 Datentypen von IDispatch 491
14.2.2 Funktionen in IDispatch 498
14.2.3 IDispatch-Schnittstellen und Funktionstabellen 499
14.3 Einen Automatisierungs-Server mit MFC erstellen 501
14.3.1 Automatisierungsoptionen modifizieren 502
14.3.2 Modifikationen an der Dokumentenklasse 502
14.3.3 Ein Dialogfeld für AutoBub 504
14.3.4 Bubble-Objekte für AutoBub zeichnen 507
14.3.5 Automatisierungsunterstützung für AutoBub 508
14.4 Einen Automatisierungs-Controller mit Visual Basic erstellen 512
14.5 Automatisierung in VBScript 515
14.6 Zusammenfassung 517
Kapitel 15 OLE-Drag & Drop 519
15.1 Die OLE-Zwischenablage 520
15.1.1 Die Strukturen FORMATETC und STGMEDIUM 521
15.1.2 FORMATETC-Strukturen behandeln 522
15.1.3 Die Struktur DVTARGETDEVICE 523
15.1.4 Die Struktur STGMEDIUM 524
15.1.5 Die Schnittstelle IDataObject 526
15.2 OLE-Drag & Drop 527
15.2.1 Eine OLE-Drag & Drop-Quelle 528
15.2.2 Ein OLE-Drag & Drop-Ziel 529
15.3 Ein Drag & Drop-Beispiel 529
15.4 Zusammenfassung 539
Kapitel 16 COM-Threading-Modelle 541
16.1 Alternativen zum COM-Threading 542
16.1.1 Prozessinterne COM-Server vor
Einführung der Apartments 542
16.1.2 Prozessexterne Server vor Einführung der Apartments 544
16.1.3 Speicher über Prozessgrenzen verwalten 545
16.1.4 COM mit Apartments 547
16.2 STA oder MTA? 549
16.2.1 Ein Apartment für jeden Thread 550
16.2.2 Das beste Apartment für einen bestimmten Thread 550
16.2.3 Ein Apartment für jedes COM-Objekt auswählen 551
16.2.4 Inkompatible Apartments von Client und COM-Objekt 553
16.3 Marshaling zwischen COM-Apartments 559
16.3.1 Der falsche Weg zur gemeinsamen Nutzung von Schnittstellenzeigern 561
16.3.2 Der richtige Weg zur gemeinsamen Nutzung von Schnittstellenzeigern 564
16.4 Zusammenfassung 567
Kapitel 17 Benutzerdefinierte COM-Objekte 569
17.1 IDL 570
17.1.1 MIDL-Attribute 572
17.1.2 Eine MIDL-Quelldatei kompilieren 574
17.1.3 Typbibliotheken 575
17.1.4 Strukturen in IDL 575
17.1.5 Aufzählungen in IDL 576
17.1.6 Zeiger und IDL 576
17.1.7 Richtungsattribute in IDL 579
17.2 Benutzerdefinierte Komponenten mit ATL erstellen 579
17.2.1 Gebräuchliche ATL-Klassen 580
17.2.2 ATL COM-Schnittstellentabelle 580
17.2.3 ATL-Assistenten 581
17.2.4 Proxy-/Stub-Code mit der DLL zusammenführen 588
17.2.5 Beispiel für ein benutzerdefiniertes COM-Objekt 589
17.3 Moniker 600
17.3.1 Beispiele von System-Monikern 601
17.3.2 Instanzen von Monikern anlegen 601
17.3.3 Moniker in Zeichenfolgen übersetzen 602
17.3.4 Moniker aus einem Anzeigenamen erzeugen 604
17.4 Verbindungspunkte 604
17.5 Benutzerdefiniertes Marshaling 608
17.5.1 Benutzerdefiniertes Marshaling im Überblick 608
17.5.2 Marshaling nach Wert 611
17.5.3 Einen benutzerdefinierten Proxy implementieren 611
17.5.4 IMarshal auf dem Server implementieren 617
17.5.5 Leistungsvergleich zwischen benutzerdefiniertem
und Standard-Proxy 620
17.6 Zusammenfassung 621
Kapitel 18 ActiveX-Steuerelemente entwickeln 623
18.1 Was ist ein ActiveX-Steuerelement? 624
18.2 Schnittstellen zu ActiveX-Steuerelementen 625
18.3 Eigenschaften, Ereignisse und Methoden von
ActiveX-Steuerelementen 626
18.3.1 Eigenschaften 626
18.3.2 Ereignisse 627
18.3.3 Methoden 627
18.4 Beispiel für ein ActiveX-Steuerelement 627
18.4.1 Das Projekt AxEdit erstellen 628
18.4.2 Das Steuerelement AxEdit zeichnen 629
18.4.3 Die Eigenschaften für AxEdit definieren 630
18.4.4 Zeicheneingaben behandeln 633
18.4.5 Das Bitmap des Steuerelements modifizieren 635
18.5 Ein ActiveX-Steuerelement testen 635
18.5.1 Einen Testcontainer für das Steuerelement auswählen 636
18.5.2 Der Testcontainer TSTCON32 636
18.5.3 Eigenschaften testen 638
18.6 ActiveX-Steuerelemente mit ATL erstellen 639
18.6.1 Grundeigenschaften mit ATL implementieren 640
18.6.2 Benutzerdefinierte Eigenschaften mit
ATL implementieren 642
18.6.3 Ambient-Eigenschaften mit ATL 645
18.6.4 Ereignisse in einem ATL-Projekt implementieren 645
18.6.5 Behandlungsroutinen für Nachrichten und Ereignisse 647
18.7 Ein ActiveX-Steuerelement mit ATL erstellen 649
18.7.1 Grundlegender Entwurf des PopButton-Steuerelements 650
18.7.2 Das PopBtn-Projekt erstellen 653
18.7.3 PopButton mit Visual Basic testen 672
18.8 Zusammenfassung 675
Kapitel 19 Asynchrones COM 677
19.1 Synchrone und asynchrone Methoden in COM 678
19.2 Unterstützung asynchroner Methoden in Windows 2000 679
19.2.1 Asynchrone Unterstützung in IDL 680
19.2.2 Weitere neue asynchrone Komponenten
in Windows 2000 682
19.2.3 Methodenaufrufe "auslösen und vergessen" 689
19.3 Ein Beispiel für asynchrones COM 689
19.3.1 Die Schnittstelle IShop 689
19.3.2 Das Projekt AsyncTest 690
19.3.3 Ein synchroner Testclient 692
19.3.4 Zweite Version der Schnittstelle IShop 694
19.3.5 Der asynchrone Testclient 696
19.4 Zusammenfassung 699
Kapitel 20 DCOM 701
20.1 Standorttransparenz 702
20.1.1 Die Instanz eines Remoteobjekts erstellen 703
20.1.2 Die Schnittstelle IMultiQI 708
20.1.3 Gültigkeit einer externen Referenz bestimmen 709
20.2 Sicherheit in DCOM 710
20.2.1 Arten der Sicherheit 710
20.2.2 Aufrufsicherheit 711
20.2.3 Delegierung und Identitätswechsel 712
20.2.4 Sicherheitsebenen für einen Computer einstellen 712
20.2.5 Sicherheitsattribute für einen Prozess einstellen 716
20.2.6 Sicherheitsbeschreibungen 731
20.2.7 Clientseitige Sicherheitsattribute für eine Schnittstelle 732
20.2.8 Serverseitige Sicherheit verwalten 734
20.3 Das Dienstprogramm DCOM-Konfiguration 735
20.3.1 Systemweite Attribute mit DCOM-Konfiguration
setzen 736
20.3.2 Attribute für eine bestimmte AppID mit DCOM-Konfiguration festlegen 737
20.4 Zusammenfassung 738
Teil 4 COM+ 739
Kapitel 21 Einführung in die COM+-Dienste 741
21.1 Transaktionen 742
21.1.1 ACID: Die vier Regeln der Transaktionsverarbeitung 743
21.1.2 Transaktionsarten 745
21.1.3 Zweiphasencommit 747
21.2 Transaktionen in COM+ 748
21.2.1 COM+-Anwendung 750
21.3 Eine transaktionsfähige COM+-Komponente erstellen 752
21.3.1 Ein COM-Objekt mit Visual Basic erstellen 753
21.3.2 Zwischenbilanz 773
21.3.3 Komponenten in eine COM+-Anwendung hinzufügen 773
21.4 Zusammenfassung 790
Kapitel 22 Komponenten für COM+-Dienste 791
22.1 COM+Transaktionskomponenten 792
22.1.1 Lebenszyklen und statuslose Objekte 792
22.1.2 Statuslos Objekte 794
22.1.3 Aktivitäten 796
22.2 Transaktionskomponenten schreiben 798
22.2.1 Eine allgemeine Transaktionskomponente erstellen 799
22.2.2 Ein COM+-Objekt für Transaktionen mit
Visual C++ erstellen 800
22.2.3 Ein COM+-Objekt für Transaktionen mit
Visual Basic erstellen 812
22.3 COM-Unterstützung des Compilers 815
22.3.1 TLH und TLI: Die Ausgabe unter der Lupe 816
22.3.2 Befehlsattribute des COM-Compilers 819
22.3.3 Fehler mit com_error generieren und abfangen 820
22.3.4 Mit beliebigen Daten arbeiten: _variant_t 821
22.3.5 Mit BSTRs arbeiten: _bstr_t 822
22.4 Mit mehreren COM+-Objekten arbeiten 823
22.4.1 Transaktionslebensstadien für kombinierte
COM+-Objekte 823
22.4.2 Transaktionsergebnisse von Multi-COM-Objekten 826
22.4.3 Fehlerbehandlung 828
22.4.4 Parameter und Schnittstellen übergeben 828
22.5 Zusammenfassung 831
Kapitel 23 COM+ und IIS 833
23.1 Basis einer Webanwendung 834
23.1.1 ASP im Überblick 835
23.1.2 Ein kurzes Skript-Beispiel 836
23.1.3 ASP-Anwendungen 836
23.1.4 Integrierte ASP-Objekte 842
23.2 Eine Webanwendung erstellen 842
23.2.1 Webaktivitäten 844
23.3 Die Theorie umsetzen 847
23.3.1 HTML-Formulare verarbeiten 847
23.3.2 Cookies verwalten 849
23.3.3 Cookies erstellen 850
23.3.4 Die Auflistung ServerVariables 853
23.3.5 ASP-Fehler behandeln 854
23.3.6 Einen globalen Schlüssel definieren 856
23.3.7 Die Reihenfolge erzwingen 858
23.3.8 Einfacher mit JavaScript 862
23.3.9 Objekte einfacher verwalten 866
23.3.10 Binärdaten 866
23.3.11 Dynamischer Code 868
23.3.12 Dynamische Anpassung des Inhalts 869
23.3.13 Gültigkeitsprüfung der Daten 871
23.3.14 Dateien herunterladen 874
23.3.15 E-Mails senden 875
23.3.16 Browser-Fähigkeiten 876
23.4 Komponentenentwicklung 880
23.4.1 Eine einfache ASP-Komponente 881
23.4.2 Eine umfangreichere ASP-Komponente 884
23.5 ASP-Seiten mit Transaktionen 889
23.6 Zusammenfassung 891
Kapitel 24 Erweiterte COM+Dienste 893
24.1 Skalierbarkeit über Objektpooling 894
24.1.1 IObjectControl implementieren 895
24.2 Einige erweiterte Transaktionskonzepte 898
24.2.1 Deadlocks und Blockierungen vermeiden 898
24.2.2 IObjectConstruct-Schnittstellen 899
24.2.3 Spezielle Transaktionssteuerung 900
24.2.4 Transaktionen vom Client aus steuern 904
24.3 Komponenten in Warteschlangen 907
24.3.1 Was sind Komponenten in Warteschlangen? 908
24.3.2 Arbeitsweise von Komponenten in Warteschlangen 909
24.3.3 Komponenten in Warteschlangen erstellen 910
24.3.4 Eine Rückgabenachricht mit Komponenten in Warteschlangen senden 911
24.4 Informationen asynchron verteilen 912
24.4.1 Einführung in die Verleger/Abonnent-Architektur 913
24.4.2 Ein Verleger/Abonnent-Projekt erstellen 914
24.5 Zusammenfassung 932
Teil 5 Verteilte Windows 2000-Dienste 933
Kapitel 25 Pipes 935
25.1 Arten von Pipes 936
25.2 Anonyme Pipes 936
25.2.1 Eine anonyme Pipe erstellen und schließen 937
25.2.2 Anonyme Pipes lesen und schreiben 938
25.2.3 Über anonyme Pipes mit einem anderen Prozess kommunizieren 939
25.2.4 Ein Beispiel mit anonymen Pipes 940
25.3 Benannte Pipes 944
25.3.1 Arten von benannten Pipes 945
25.3.2 Eine benannte Pipe erstellen und schließen 945
25.3.3 Zu einer benannten Pipe verbinden 948
25.3.4 Beispiel für eine benannte Pipe 949
25.4 Zusammenfassung 959
Kapitel 26 Active Directory 961
26.1 Überblick über Active Directory 962
26.1.1 Namespaceorganisation 962
26.1.2 Gesamtstrukturen 965
26.2 Active Directory mit ADSI verwalten 966
26.2.1 ADSI in Visual Basic und Visual C++ 966
26.2.2 ADSI-Bindungszeichenfolgen 967
26.2.3 ADSI-Hilfsfunktionen 968
26.2.4 Serverlose Bindung und ADSI 972
26.2.5 Von ADSI offen gelegte COM-Schnittstellen 974
26.3 Zusammenfassung 984
Kapitel 27 MSMQ 985
27.1 Eine Einführung in den Microsoft Message Queue Server 986
27.1.1 MSMQ und benannte Pipes 987
27.1.2 MSMQ installieren 987
27.1.3 Arten von Nachrichtenwarteschlangen 988
27.1.4 Öffentliche und private Warteschlangen 989
27.2 MSMQ-Objekteigenschaften 990
27.2.1 Warteschlangeneigenschaften 991
27.2.2 Nachrichteneigenschaften 993
27.2.3 Computereigenschaften 994
27.2.4 Speicherreservierung 995
27.3 Funktionen der Win32-API für Nachrichtenwarteschlangen 996
27.3.1 Eine Warteschlange erstellen 997
27.3.2 Eine vorhandene Warteschlange öffnen 1002
27.3.3 Nachrichten über eine Warteschlange senden 1003
27.3.4 Nachrichten aus einer Warteschlange empfangen 1008
27.3.5 Eine Nachrichtenwarteschlange schließen 1013
27.3.6 Eine Warteschlange löschen 1013
27.4 Ein Warteschlangen-Client in Visual Basic 1016
27.5 Zusammenfassung 1020
Kapitel 28 Cluster Server 1021
28.1 Die Architektur von Microsoft Cluster Server 1022
28.1.1 Die Hardware von Cluster Server 1023
28.1.2 Softwarekomponenten von MSCS 1024
28.1.3 Cluster einrichten und wiederherstellen 1026
28.2 Cluster-APIs 1027
28.2.1 APIs der Clusterobjektverwaltung 1027
28.2.2 APIs der Ressourcen-DLLs 1036
28.2.3 APIs der Cluster-Administrator-Erweiterung 1040
28.3 Beispiel einer clusterfähigen Anwendung 1042
28.3.1 Das Projekt ClusterQuote 1043
28.3.2 Das Projekt QuoteClient 1043
28.3.3 Der Cluster-Ressourcentyp für hohe Verfügbarkeit 1044
28.4 Zusammenfassung 1047
Anhang A Die Begleit-CD zum Buch 1049
Stichwortverzeichnis 1051
Teil 1 Windows 2000-Kerntechnologien 27
Kapitel 1 Windows DNA im Überblick 29
1.1 Zur Geschichte von Windows und Windows NT 30
1.2 Windows DNA im Detail 31
1.2.1 Die Lösung 32
1.3 Die Architektur von Windows DNA 34
1.3.1 COM überall 34
1.3.2 Präsentationsebene 35
1.3.3 Schicht der Firewall 38
1.3.4 Ebene der Geschäftslogik 39
1.3.5 Datenebene 44
1.4 Zusammenfassung 46
Kapitel 2 Virtueller Speicher und Speicherverwaltung 47
2.1 Virtueller Speicher 48
2.2 Entscheidung für den Einsatz von virtuellem Speicher 50
2.2.1 Virtuelle Speicherbereiche reservieren 51
2.2.2 Virtuelle Speicherseiten bestätigen 52
2.2.3 Virtuelle Speicherseiten sperren 56
2.2.4 Virtuelle Speicherseiten freigeben 57
2.2.5 Speicher für andere Prozesse zuweisen 58
2.3 Beispiel mit virtuellem Speicher 58
2.4 Heap-Funktionen von Windows 2000 69
2.4.1 Heap-Verwaltung unter Windows 2000 69
2.4.2 Private Heaps in C++-Klassen 72
2.5 Zusammenfassung 77
Kapitel 3 Threads und Prozesse 79
3.1 Prozesse und Threads 80
3.2 Prozesse verwalten 82
3.2.1 Die Funktion CreateProcess 82
3.2.2 Prozesse beenden 85
3.3 Threads verwalten 86
3.3.1 Threads erzeugen 86
3.3.2 Threads beenden 91
3.3.3 Thread-Prioritäten abrufen und ändern 92
3.3.4 Lokaler Thread-Speicher 93
3.3.5 Thread-ID bestimmen 95
3.3.6 Thread-Affinität 96
3.3.7 Zusammenarbeit mehrerer Threads 99
3.3.8 Wann ein Thread zu erzeugen ist 102
3.3.9 Wann kein Thread zu erzeugen ist 102
3.4 Synchronisierung 103
3.4.1 Sperroperationen von Win32 103
3.4.2 Kritische Abschnitte 106
3.4.3 Ereignisse verwalten 109
3.4.4 Mutexe und gegenseitiger Ausschluss 116
3.5 Semaphoren 119
3.5.1 Semaphoren und Wartefunktionen 120
3.5.2 Anwendungen für Semaphoren 121
3.5.3 Semaphoren erstellen 122
3.5.4 Semaphoren-gesteuerte Ressourcen zurückgeben 123
3.6 Semaphoren und kritische Abschnitte in einer Anwendung 124
3.7 Auftragsobjekte 131
3.7.1 Attribute von Auftragsobjekten steuern 132
3.7.2 Beispiel für ein Auftragsobjekt 133
3.8 Zusammenfassung 137
Kapitel 4 Dateien 139
4.1 Dateisysteme in Windows 2000 140
4.2 Allgemeine Dateioperationen 141
4.2.1 Datenträgerinformationen einholen 141
4.2.2 Attribute des Dateisystems 142
4.2.3 Informationen über Datenträger abfragen 143
4.2.4 Dateien öffnen, schließen und löschen 145
4.2.5 In Dateien schreiben 149
4.2.6 Aus Dateien lesen 150
4.3 Nach Dateien suchen 153
4.3.1 Die Funktionen FindFirstFile, FindNextFile
und FindClose 153
4.3.2 Ausblick: FindFirstFileEx 157
4.3.3 Die Struktur FILETIME 158
4.4 Andere Dateioperationen 161
4.4.1 Die Funktion CopyFile 161
4.4.2 Die Funktion MoveFile 161
4.4.3 Die Funktion SetFilePointer 161
4.4.4 Die Funktion GetFileSize 163
4.5 Asynchrone Ein- und Ausgabe 164
4.5.1 Überlappende Ein- und Ausgabe 165
4.5.2 Fertigstellungsroutinen für Dateien 168
4.5.3 Beispiel für Dateifertigstellungsroutinen 170
4.6 Das verschlüsselnde Dateisystem 178
4.7 Funktionen zur Dateibenachrichtigung 182
4.8 Zusammenfassung 188
Kapitel 5 Strukturierte Ausnahmebehandlung 189
5.1 Grundlagen der Ausnahmebehandlung 190
5.2 Arbeitsweise der strukturierten Ausnahmebehandlung 191
5.3 Beendigungsbehandlungsroutinen 192
5.3.1 Einen __try-Block mit __leave beenden 195
5.3.2 Normale und vorzeitige Beendigung 195
5.4 Ausnahmebehandlungsroutinen 196
5.4.1 Ausnahmefilter 197
5.4.2 Ausnahmen bei Gleitkommaoperationen behandeln 202
5.5 Ausnahmebehandlung in C++ 203
5.5.1 Ausnahmen zur Erkennung von Fehlern 203
5.5.2 Ausnahmen zum Aufräumen nach Erkennen
von Fehlern 205
5.5.3 Die Standardbibliothek für Ausnahmen 206
5.5.4 Ausnahmen zur Laufzeit 207
5.5.5 Logische Ausnahmen 208
5.5.6 Fehler während der Konstruktion erkennen 209
5.6 Strukturierte Ausnahmebehandlung von Win32 mit
der Ausnahmebehandlung von C++ integrieren 210
5.7 Zusammenfassung 213
Kapitel 6 Dynamische Link-Bibliotheken 215
6.1 Bibliotheken 216
6.1.1 Statische Link-Bibliotheken 217
6.1.2 Dynamische Link-Bibliotheken 217
6.1.3 Vorteile von DLLs 219
6.1.4 Nachteile von DLLs 219
6.2 DLLs erstellen und einsetzen 220
6.2.1 DLLs initialisieren 220
6.2.2 Funktionen und Daten von DLLs exportieren
und importieren 222
6.2.3 DLLs zur Ladezeit laden 226
6.2.4 DLLs zur Laufzeit laden 227
6.2.5 Versionskontrolle bei DLLs 228
6.2.6 Gemeinsam genutzten Speicher für eine DLL erstellen 230
6.2.7 Ein einfaches DLL-Beispiel 231
6.2.8 C++ und DLLs 236
6.2.9 MFC und DLLs 238
6.3 Generische Thunks 247
6.3.1 Generische Thunk-Architektur 248
6.3.2 Generische Thunk-Funktionen 249
6.3.3 Beispiel für generische Thunks 252
6.3.4 Fehlersuche in generischen Thunks 260
6.4 Zusammenfassung 261
Kapitel 7 Verteilte Sicherheit 263
7.1 Sicherheit von Windows 2000 im Überblick 264
7.2 Grundlegende Datenstrukturen für Sicherheit 265
7.2.1 Zugriffstoken für Prozesse und Threads 266
7.2.2 Sicherheits-IDs 269
7.2.3 Die Strukturen ACE, DACL und SACL 274
7.2.4 Die erforderliche Größe für eine
ACL-Struktur bestimmen 276
7.2.5 Einen zugriffsgewährenden ACE in eine
DACL aufnehmen 277
7.2.6 Sicherheitsdeskriptoren 279
7.2.7 Einen Sicherheitsdeskriptor abrufen 282
7.2.8 Die Struktur SECURITY_ATTRIBUTES 285
7.3 Vertrauensbasierte Zugriffskontrolle 285
7.3.1 Die Struktur TRUSTEE 287
7.3.2 Die Struktur ACTRL_ACCESS_ENTRY 289
7.3.3 Die Struktur ACTRL_ACCESS_ENTRY_LIST 291
7.3.4 Die Struktur ACTRL_PROPERTY_ENTRY 292
7.3.5 Die Struktur ACTRL_ACCESS 292
7.4 Identitätswechsel für einen Client 298
7.5 Zusammenfassung 299
Kapitel 8 Windows 2000-Debugging 301
8.1 Strategien der Fehlersuche in Windows 302
8.2 Die Fehlersuche im Code erleichtern 303
8.2.1 Unterstützung der Fehlersuche für Windows 2000 303
8.2.2 MFC-Unterstützung für die Fehlersuche 304
8.3 Überblick zur Fehlersuche in Windows 2000 307
8.3.1 Symbolische Debug-Informationen 307
8.3.2 Debugging-Tools von Microsoft 307
8.3.3 Debugging-Tools von Drittherstellern 308
8.4 Der integrierte Debugger von Visual C++ 308
8.4.1 Grundlagen zum Debugger von Visual C++ 309
8.4.2 Die Fenster des Visual C++-Debuggers 313
8.4.3 Tricks für den Visual C++-Debugger 314
8.5 Der Windows-Debugger WINDBG 317
8.6 SoftIce zur Fehlersuche in Programmen 317
8.7 Mit Dr. Watson die Ursache von Abstürzen suchen 318
8.8 Mit BugTrapper die Ursache von Abstürzen suchen 321
8.9 Quellen für Tools von Drittherstellern 322
8.9.1 Compuware NuMega Lab 322
8.9.2 Mutek Solutions Ltd. 323
8.9.3 Rational 323
8.10 Zusammenfassung 323
Kapitel 9 Dienste in Windows 2000 325
9.1 Dienste 326
9.1.1 Zusammenarbeit mit Windows 2000-Diensten 326
9.1.2 Windows 2000-Dienste und Systemsicherheit 329
9.2 Windows 2000-Dienste programmieren 331
9.2.1 Den Dienststeuerungs-Manager mit
dem Dienststatus aktualisieren 332
9.2.2 Der Lebenszyklus eines Windows 2000-Dienstes 335
9.2.3 Daten in das Windows 2000-
Ereignisprotokoll schreiben 341
9.3 Beispiel eines Windows 2000-Dienstes 345
9.3.1 FileSpy: Ein Windows 2000-Dienst 345
9.4 Zusammenfassung 358
Kapitel 10 Dienste von Windows 2000 steuern 359
10.1 Dienststeuerungsprogramme schreiben 360
10.1.1 Einen Dienst mit dem Dienststeuerungs-
Manager registrieren 360
10.1.2 Registrierung eines Dienstes aufheben 364
10.1.3 Gescheiterte Dienste automatisch neu starten 366
10.2 Applets für die Systemsteuerung schreiben 369
10.2.1 Die Applet-Schnittstelle zur Systemsteuerung 369
10.2.2 CtlFileSpy: Ein Applet der Systemsteuerung
für den Dienst FileSpy 372
10.3 Zusammenfassung 382
Teil 2 Benutzerinteraktion/Desktop 383
Kapitel 11 GDI-Programmierung 385
11.1 GDI-Grundlagen 386
11.2 Gerätekontexte 387
11.2.1 Die GDI-Abbildungsmodi 388
11.2.2 GDI-Objekte 389
11.3 Bitmaps 390
11.3.1 DDBs und DIBs 391
11.3.2 DIBs mit 16 Farben 396
11.3.3 DIBs mit 256 Farben 396
11.4 Das DIB-Beispiel 399
11.4.1 Die Klasse CDIBitmap 399
11.4.2 Die Klasse CBmpPalette 406
11.4.3 Änderungen an der Klasse CDibDoc 407
11.4.4 Änderungen an der Hauptrahmenklasse 410
11.4.5 Änderungen an der Klasse CDibView 410
11.5 Pfade 413
11.6 Metadateien 417
11.7 Beispiel einer Metadatei 418
11.7.1 Änderungen der Klassendeklaration von CMetaView 418
11.7.2 Änderungen am Destruktor der Klasse CMetaView 419
11.7.3 Änderungen an CMetaView::OnInitialUpdate 419
11.7.4 Klicks mit der linken Maustaste 421
11.7.5 Änderungen an CMetaView::OnDraw 421
11.8 Zusammenfassung 423
Kapitel 12 Besitzerzeichnung und Benutzerzeichnung 425
12.1 Besitzer-Steuerelemente 426
12.2 Ein Besitzer-Steuerelement implementieren 427
12.2.1 Die Nachricht WM_DRAWITEM 428
12.2.2 Die Nachricht WM_MEASUREITEM 429
12.2.3 Die Nachricht WM_COMPAREITEM 430
12.2.4 Die Nachricht WM_DELETEITEM 430
12.3 OwnDraw: Beispiel für Besitzerzeichnung 431
12.3.1 Die Struktur CListItem erstellen 432
12.3.2 Die Nachrichten der Besitzerzeichnung behandeln 432
12.3.3 Elemente in das Listenfeld aufnehmen 433
12.3.4 Die Nachricht WM_MEASUREITEM behandeln 433
12.3.5 Die Nachricht WM_DRAWITEM behandeln 434
12.3.6 Die Nachricht WM_DELETEITEM behandeln 435
12.4 Benutzerdefiniertes Zeichnen 436
12.4.1 Datenstrukturen einer Benutzerzeichnung 437
12.4.2 CustDraw: Beispiel einer Benutzerzeichnung mit MFC 443
12.5 Zusammenfassung 450
Teil 3 COM und ActiveX 451
Kapitel 13 Konzepte von COM und OLE 453
13.1 Überblick zu COM und OLE 454
13.2 Gebräuchliche COM- und OLE-Technologien 454
13.2.1 Verbunddokumente 455
13.2.2 Visuelle Bearbeitung 456
13.2.3 Automatisierung 458
13.2.4 OLE-Datentransfer 458
13.2.5 Drag & Drop 459
13.2.6 Integration mit anderen Anwendungen 459
13.3 Programmieren mit COM und OLE 459
13.3.1 COM-Schnittstellen 459
13.3.2 COM-Schnittstellen und -Objekte identifizieren 460
13.3.3 GUIDs behandeln 461
13.3.4 Das Versionsproblem 462
13.3.5 Die Schnittstelle IUnknown 463
13.3.6 Ein Objekt erstellen 467
13.4 Beispiel einer COM-Komponente 471
13.4.1 Der Shell-Erweiterungsmechanismus 472
13.4.2 Kontextmenü-Erweiterungen 472
13.4.3 Das Beispiel erstellen 473
13.5 Zusammenfassung 488
Kapitel 14 Automatisierung 489
14.1 Programmierbare Anwendungen durch Automatisierung 490
14.2 Die Schnittstelle IDispatch 491
14.2.1 Datentypen von IDispatch 491
14.2.2 Funktionen in IDispatch 498
14.2.3 IDispatch-Schnittstellen und Funktionstabellen 499
14.3 Einen Automatisierungs-Server mit MFC erstellen 501
14.3.1 Automatisierungsoptionen modifizieren 502
14.3.2 Modifikationen an der Dokumentenklasse 502
14.3.3 Ein Dialogfeld für AutoBub 504
14.3.4 Bubble-Objekte für AutoBub zeichnen 507
14.3.5 Automatisierungsunterstützung für AutoBub 508
14.4 Einen Automatisierungs-Controller mit Visual Basic erstellen 512
14.5 Automatisierung in VBScript 515
14.6 Zusammenfassung 517
Kapitel 15 OLE-Drag & Drop 519
15.1 Die OLE-Zwischenablage 520
15.1.1 Die Strukturen FORMATETC und STGMEDIUM 521
15.1.2 FORMATETC-Strukturen behandeln 522
15.1.3 Die Struktur DVTARGETDEVICE 523
15.1.4 Die Struktur STGMEDIUM 524
15.1.5 Die Schnittstelle IDataObject 526
15.2 OLE-Drag & Drop 527
15.2.1 Eine OLE-Drag & Drop-Quelle 528
15.2.2 Ein OLE-Drag & Drop-Ziel 529
15.3 Ein Drag & Drop-Beispiel 529
15.4 Zusammenfassung 539
Kapitel 16 COM-Threading-Modelle 541
16.1 Alternativen zum COM-Threading 542
16.1.1 Prozessinterne COM-Server vor
Einführung der Apartments 542
16.1.2 Prozessexterne Server vor Einführung der Apartments 544
16.1.3 Speicher über Prozessgrenzen verwalten 545
16.1.4 COM mit Apartments 547
16.2 STA oder MTA? 549
16.2.1 Ein Apartment für jeden Thread 550
16.2.2 Das beste Apartment für einen bestimmten Thread 550
16.2.3 Ein Apartment für jedes COM-Objekt auswählen 551
16.2.4 Inkompatible Apartments von Client und COM-Objekt 553
16.3 Marshaling zwischen COM-Apartments 559
16.3.1 Der falsche Weg zur gemeinsamen Nutzung von Schnittstellenzeigern 561
16.3.2 Der richtige Weg zur gemeinsamen Nutzung von Schnittstellenzeigern 564
16.4 Zusammenfassung 567
Kapitel 17 Benutzerdefinierte COM-Objekte 569
17.1 IDL 570
17.1.1 MIDL-Attribute 572
17.1.2 Eine MIDL-Quelldatei kompilieren 574
17.1.3 Typbibliotheken 575
17.1.4 Strukturen in IDL 575
17.1.5 Aufzählungen in IDL 576
17.1.6 Zeiger und IDL 576
17.1.7 Richtungsattribute in IDL 579
17.2 Benutzerdefinierte Komponenten mit ATL erstellen 579
17.2.1 Gebräuchliche ATL-Klassen 580
17.2.2 ATL COM-Schnittstellentabelle 580
17.2.3 ATL-Assistenten 581
17.2.4 Proxy-/Stub-Code mit der DLL zusammenführen 588
17.2.5 Beispiel für ein benutzerdefiniertes COM-Objekt 589
17.3 Moniker 600
17.3.1 Beispiele von System-Monikern 601
17.3.2 Instanzen von Monikern anlegen 601
17.3.3 Moniker in Zeichenfolgen übersetzen 602
17.3.4 Moniker aus einem Anzeigenamen erzeugen 604
17.4 Verbindungspunkte 604
17.5 Benutzerdefiniertes Marshaling 608
17.5.1 Benutzerdefiniertes Marshaling im Überblick 608
17.5.2 Marshaling nach Wert 611
17.5.3 Einen benutzerdefinierten Proxy implementieren 611
17.5.4 IMarshal auf dem Server implementieren 617
17.5.5 Leistungsvergleich zwischen benutzerdefiniertem
und Standard-Proxy 620
17.6 Zusammenfassung 621
Kapitel 18 ActiveX-Steuerelemente entwickeln 623
18.1 Was ist ein ActiveX-Steuerelement? 624
18.2 Schnittstellen zu ActiveX-Steuerelementen 625
18.3 Eigenschaften, Ereignisse und Methoden von
ActiveX-Steuerelementen 626
18.3.1 Eigenschaften 626
18.3.2 Ereignisse 627
18.3.3 Methoden 627
18.4 Beispiel für ein ActiveX-Steuerelement 627
18.4.1 Das Projekt AxEdit erstellen 628
18.4.2 Das Steuerelement AxEdit zeichnen 629
18.4.3 Die Eigenschaften für AxEdit definieren 630
18.4.4 Zeicheneingaben behandeln 633
18.4.5 Das Bitmap des Steuerelements modifizieren 635
18.5 Ein ActiveX-Steuerelement testen 635
18.5.1 Einen Testcontainer für das Steuerelement auswählen 636
18.5.2 Der Testcontainer TSTCON32 636
18.5.3 Eigenschaften testen 638
18.6 ActiveX-Steuerelemente mit ATL erstellen 639
18.6.1 Grundeigenschaften mit ATL implementieren 640
18.6.2 Benutzerdefinierte Eigenschaften mit
ATL implementieren 642
18.6.3 Ambient-Eigenschaften mit ATL 645
18.6.4 Ereignisse in einem ATL-Projekt implementieren 645
18.6.5 Behandlungsroutinen für Nachrichten und Ereignisse 647
18.7 Ein ActiveX-Steuerelement mit ATL erstellen 649
18.7.1 Grundlegender Entwurf des PopButton-Steuerelements 650
18.7.2 Das PopBtn-Projekt erstellen 653
18.7.3 PopButton mit Visual Basic testen 672
18.8 Zusammenfassung 675
Kapitel 19 Asynchrones COM 677
19.1 Synchrone und asynchrone Methoden in COM 678
19.2 Unterstützung asynchroner Methoden in Windows 2000 679
19.2.1 Asynchrone Unterstützung in IDL 680
19.2.2 Weitere neue asynchrone Komponenten
in Windows 2000 682
19.2.3 Methodenaufrufe "auslösen und vergessen" 689
19.3 Ein Beispiel für asynchrones COM 689
19.3.1 Die Schnittstelle IShop 689
19.3.2 Das Projekt AsyncTest 690
19.3.3 Ein synchroner Testclient 692
19.3.4 Zweite Version der Schnittstelle IShop 694
19.3.5 Der asynchrone Testclient 696
19.4 Zusammenfassung 699
Kapitel 20 DCOM 701
20.1 Standorttransparenz 702
20.1.1 Die Instanz eines Remoteobjekts erstellen 703
20.1.2 Die Schnittstelle IMultiQI 708
20.1.3 Gültigkeit einer externen Referenz bestimmen 709
20.2 Sicherheit in DCOM 710
20.2.1 Arten der Sicherheit 710
20.2.2 Aufrufsicherheit 711
20.2.3 Delegierung und Identitätswechsel 712
20.2.4 Sicherheitsebenen für einen Computer einstellen 712
20.2.5 Sicherheitsattribute für einen Prozess einstellen 716
20.2.6 Sicherheitsbeschreibungen 731
20.2.7 Clientseitige Sicherheitsattribute für eine Schnittstelle 732
20.2.8 Serverseitige Sicherheit verwalten 734
20.3 Das Dienstprogramm DCOM-Konfiguration 735
20.3.1 Systemweite Attribute mit DCOM-Konfiguration
setzen 736
20.3.2 Attribute für eine bestimmte AppID mit DCOM-Konfiguration festlegen 737
20.4 Zusammenfassung 738
Teil 4 COM+ 739
Kapitel 21 Einführung in die COM+-Dienste 741
21.1 Transaktionen 742
21.1.1 ACID: Die vier Regeln der Transaktionsverarbeitung 743
21.1.2 Transaktionsarten 745
21.1.3 Zweiphasencommit 747
21.2 Transaktionen in COM+ 748
21.2.1 COM+-Anwendung 750
21.3 Eine transaktionsfähige COM+-Komponente erstellen 752
21.3.1 Ein COM-Objekt mit Visual Basic erstellen 753
21.3.2 Zwischenbilanz 773
21.3.3 Komponenten in eine COM+-Anwendung hinzufügen 773
21.4 Zusammenfassung 790
Kapitel 22 Komponenten für COM+-Dienste 791
22.1 COM+Transaktionskomponenten 792
22.1.1 Lebenszyklen und statuslose Objekte 792
22.1.2 Statuslos Objekte 794
22.1.3 Aktivitäten 796
22.2 Transaktionskomponenten schreiben 798
22.2.1 Eine allgemeine Transaktionskomponente erstellen 799
22.2.2 Ein COM+-Objekt für Transaktionen mit
Visual C++ erstellen 800
22.2.3 Ein COM+-Objekt für Transaktionen mit
Visual Basic erstellen 812
22.3 COM-Unterstützung des Compilers 815
22.3.1 TLH und TLI: Die Ausgabe unter der Lupe 816
22.3.2 Befehlsattribute des COM-Compilers 819
22.3.3 Fehler mit com_error generieren und abfangen 820
22.3.4 Mit beliebigen Daten arbeiten: _variant_t 821
22.3.5 Mit BSTRs arbeiten: _bstr_t 822
22.4 Mit mehreren COM+-Objekten arbeiten 823
22.4.1 Transaktionslebensstadien für kombinierte
COM+-Objekte 823
22.4.2 Transaktionsergebnisse von Multi-COM-Objekten 826
22.4.3 Fehlerbehandlung 828
22.4.4 Parameter und Schnittstellen übergeben 828
22.5 Zusammenfassung 831
Kapitel 23 COM+ und IIS 833
23.1 Basis einer Webanwendung 834
23.1.1 ASP im Überblick 835
23.1.2 Ein kurzes Skript-Beispiel 836
23.1.3 ASP-Anwendungen 836
23.1.4 Integrierte ASP-Objekte 842
23.2 Eine Webanwendung erstellen 842
23.2.1 Webaktivitäten 844
23.3 Die Theorie umsetzen 847
23.3.1 HTML-Formulare verarbeiten 847
23.3.2 Cookies verwalten 849
23.3.3 Cookies erstellen 850
23.3.4 Die Auflistung ServerVariables 853
23.3.5 ASP-Fehler behandeln 854
23.3.6 Einen globalen Schlüssel definieren 856
23.3.7 Die Reihenfolge erzwingen 858
23.3.8 Einfacher mit JavaScript 862
23.3.9 Objekte einfacher verwalten 866
23.3.10 Binärdaten 866
23.3.11 Dynamischer Code 868
23.3.12 Dynamische Anpassung des Inhalts 869
23.3.13 Gültigkeitsprüfung der Daten 871
23.3.14 Dateien herunterladen 874
23.3.15 E-Mails senden 875
23.3.16 Browser-Fähigkeiten 876
23.4 Komponentenentwicklung 880
23.4.1 Eine einfache ASP-Komponente 881
23.4.2 Eine umfangreichere ASP-Komponente 884
23.5 ASP-Seiten mit Transaktionen 889
23.6 Zusammenfassung 891
Kapitel 24 Erweiterte COM+Dienste 893
24.1 Skalierbarkeit über Objektpooling 894
24.1.1 IObjectControl implementieren 895
24.2 Einige erweiterte Transaktionskonzepte 898
24.2.1 Deadlocks und Blockierungen vermeiden 898
24.2.2 IObjectConstruct-Schnittstellen 899
24.2.3 Spezielle Transaktionssteuerung 900
24.2.4 Transaktionen vom Client aus steuern 904
24.3 Komponenten in Warteschlangen 907
24.3.1 Was sind Komponenten in Warteschlangen? 908
24.3.2 Arbeitsweise von Komponenten in Warteschlangen 909
24.3.3 Komponenten in Warteschlangen erstellen 910
24.3.4 Eine Rückgabenachricht mit Komponenten in Warteschlangen senden 911
24.4 Informationen asynchron verteilen 912
24.4.1 Einführung in die Verleger/Abonnent-Architektur 913
24.4.2 Ein Verleger/Abonnent-Projekt erstellen 914
24.5 Zusammenfassung 932
Teil 5 Verteilte Windows 2000-Dienste 933
Kapitel 25 Pipes 935
25.1 Arten von Pipes 936
25.2 Anonyme Pipes 936
25.2.1 Eine anonyme Pipe erstellen und schließen 937
25.2.2 Anonyme Pipes lesen und schreiben 938
25.2.3 Über anonyme Pipes mit einem anderen Prozess kommunizieren 939
25.2.4 Ein Beispiel mit anonymen Pipes 940
25.3 Benannte Pipes 944
25.3.1 Arten von benannten Pipes 945
25.3.2 Eine benannte Pipe erstellen und schließen 945
25.3.3 Zu einer benannten Pipe verbinden 948
25.3.4 Beispiel für eine benannte Pipe 949
25.4 Zusammenfassung 959
Kapitel 26 Active Directory 961
26.1 Überblick über Active Directory 962
26.1.1 Namespaceorganisation 962
26.1.2 Gesamtstrukturen 965
26.2 Active Directory mit ADSI verwalten 966
26.2.1 ADSI in Visual Basic und Visual C++ 966
26.2.2 ADSI-Bindungszeichenfolgen 967
26.2.3 ADSI-Hilfsfunktionen 968
26.2.4 Serverlose Bindung und ADSI 972
26.2.5 Von ADSI offen gelegte COM-Schnittstellen 974
26.3 Zusammenfassung 984
Kapitel 27 MSMQ 985
27.1 Eine Einführung in den Microsoft Message Queue Server 986
27.1.1 MSMQ und benannte Pipes 987
27.1.2 MSMQ installieren 987
27.1.3 Arten von Nachrichtenwarteschlangen 988
27.1.4 Öffentliche und private Warteschlangen 989
27.2 MSMQ-Objekteigenschaften 990
27.2.1 Warteschlangeneigenschaften 991
27.2.2 Nachrichteneigenschaften 993
27.2.3 Computereigenschaften 994
27.2.4 Speicherreservierung 995
27.3 Funktionen der Win32-API für Nachrichtenwarteschlangen 996
27.3.1 Eine Warteschlange erstellen 997
27.3.2 Eine vorhandene Warteschlange öffnen 1002
27.3.3 Nachrichten über eine Warteschlange senden 1003
27.3.4 Nachrichten aus einer Warteschlange empfangen 1008
27.3.5 Eine Nachrichtenwarteschlange schließen 1013
27.3.6 Eine Warteschlange löschen 1013
27.4 Ein Warteschlangen-Client in Visual Basic 1016
27.5 Zusammenfassung 1020
Kapitel 28 Cluster Server 1021
28.1 Die Architektur von Microsoft Cluster Server 1022
28.1.1 Die Hardware von Cluster Server 1023
28.1.2 Softwarekomponenten von MSCS 1024
28.1.3 Cluster einrichten und wiederherstellen 1026
28.2 Cluster-APIs 1027
28.2.1 APIs der Clusterobjektverwaltung 1027
28.2.2 APIs der Ressourcen-DLLs 1036
28.2.3 APIs der Cluster-Administrator-Erweiterung 1040
28.3 Beispiel einer clusterfähigen Anwendung 1042
28.3.1 Das Projekt ClusterQuote 1043
28.3.2 Das Projekt QuoteClient 1043
28.3.3 Der Cluster-Ressourcentyp für hohe Verfügbarkeit 1044
28.4 Zusammenfassung 1047
Anhang A Die Begleit-CD zum Buch 1049
Stichwortverzeichnis 1051
Einführung 23
Teil 1 Windows 2000-Kerntechnologien 27
Kapitel 1 Windows DNA im Überblick 29
1.1 Zur Geschichte von Windows und Windows NT 30
1.2 Windows DNA im Detail 31
1.2.1 Die Lösung 32
1.3 Die Architektur von Windows DNA 34
1.3.1 COM überall 34
1.3.2 Präsentationsebene 35
1.3.3 Schicht der Firewall 38
1.3.4 Ebene der Geschäftslogik 39
1.3.5 Datenebene 44
1.4 Zusammenfassung 46
Kapitel 2 Virtueller Speicher und Speicherverwaltung 47
2.1 Virtueller Speicher 48
2.2 Entscheidung für den Einsatz von virtuellem Speicher 50
2.2.1 Virtuelle Speicherbereiche reservieren 51
2.2.2 Virtuelle Speicherseiten bestätigen 52
2.2.3 Virtuelle Speicherseiten sperren 56
2.2.4 Virtuelle Speicherseiten freigeben 57
2.2.5 Speicher für andere Prozesse zuweisen 58
2.3 Beispiel mit virtuellem Speicher 58
2.4 Heap-Funktionen von Windows 2000 69
2.4.1 Heap-Verwaltung unter Windows 2000 69
2.4.2 Private Heaps in C++-Klassen 72
2.5 Zusammenfassung 77
Kapitel 3 Threads und Prozesse 79
3.1 Prozesse und Threads 80
3.2 Prozesse verwalten 82
3.2.1 Die Funktion CreateProcess 82
3.2.2 Prozesse beenden 85
3.3 Threads verwalten 86
3.3.1 Threads erzeugen 86
3.3.2 Threads beenden 91
3.3.3 Thread-Prioritäten abrufen und ändern 92
3.3.4 Lokaler Thread-Speicher 93
3.3.5 Thread-ID bestimmen 95
3.3.6 Thread-Affinität 96
3.3.7 Zusammenarbeit mehrerer Threads 99
3.3.8 Wann ein Thread zu erzeugen ist 102
3.3.9 Wann kein Thread zu erzeugen ist 102
3.4 Synchronisierung 103
3.4.1 Sperroperationen von Win32 103
3.4.2 Kritische Abschnitte 106
3.4.3 Ereignisse verwalten 109
3.4.4 Mutexe und gegenseitiger Ausschluss 116
3.5 Semaphoren 119
3.5.1 Semaphoren und Wartefunktionen 120
3.5.2 Anwendungen für Semaphoren 121
3.5.3 Semaphoren erstellen 122
3.5.4 Semaphoren-gesteuerte Ressourcen zurückgeben 123
3.6 Semaphoren und kritische Abschnitte in einer Anwendung 124
3.7 Auftragsobjekte 131
3.7.1 Attribute von Auftragsobjekten steuern 132
3.7.2 Beispiel für ein Auftragsobjekt 133
3.8 Zusammenfassung 137
Kapitel 4 Dateien 139
4.1 Dateisysteme in Windows 2000 140
4.2 Allgemeine Dateioperationen 141
4.2.1 Datenträgerinformationen einholen 141
4.2.2 Attribute des Dateisystems 142
4.2.3 Informationen über Datenträger abfragen 143
4.2.4 Dateien öffnen, schließen und löschen 145
4.2.5 In Dateien schreiben 149
4.2.6 Aus Dateien lesen 150
4.3 Nach Dateien suchen 153
4.3.1 Die Funktionen FindFirstFile, FindNextFile
und FindClose 153
4.3.2 Ausblick: FindFirstFileEx 157
4.3.3 Die Struktur FILETIME 158
4.4 Andere Dateioperationen 161
4.4.1 Die Funktion CopyFile 161
4.4.2 Die Funktion MoveFile 161
4.4.3 Die Funktion SetFilePointer 161
4.4.4 Die Funktion GetFileSize 163
4.5 Asynchrone Ein- und Ausgabe 164
4.5.1 Überlappende Ein- und Ausgabe 165
4.5.2 Fertigstellungsroutinen für Dateien 168
4.5.3 Beispiel für Dateifertigstellungsroutinen 170
4.6 Das verschlüsselnde Dateisystem 178
4.7 Funktionen zur Dateibenachrichtigung 182
4.8 Zusammenfassung 188
Kapitel 5 Strukturierte Ausnahmebehandlung 189
5.1 Grundlagen der Ausnahmebehandlung 190
5.2 Arbeitsweise der strukturierten Ausnahmebehandlung 191
5.3 Beendigungsbehandlungsroutinen 192
5.3.1 Einen __try-Block mit __leave beenden 195
5.3.2 Normale und vorzeitige Beendigung 195
5.4 Ausnahmebehandlungsroutinen 196
5.4.1 Ausnahmefilter 197
5.4.2 Ausnahmen bei Gleitkommaoperationen behandeln 202
5.5 Ausnahmebehandlung in C++ 203
5.5.1 Ausnahmen zur Erkennung von Fehlern 203
5.5.2 Ausnahmen zum Aufräumen nach Erkennen
von Fehlern 205
5.5.3 Die Standardbibliothek für Ausnahmen 206
5.5.4 Ausnahmen zur Laufzeit 207
5.5.5 Logische Ausnahmen 208
5.5.6 Fehler während der Konstruktion erkennen 209
5.6 Strukturierte Ausnahmebehandlung von Win32 mit
der Ausnahmebehandlung von C++ integrieren 210
5.7 Zusammenfassung 213
Kapitel 6 Dynamische Link-Bibliotheken 215
6.1 Bibliotheken 216
6.1.1 Statische Link-Bibliotheken 217
6.1.2 Dynamische Link-Bibliotheken 217
6.1.3 Vorteile von DLLs 219
6.1.4 Nachteile von DLLs 219
6.2 DLLs erstellen und einsetzen 220
6.2.1 DLLs initialisieren 220
6.2.2 Funktionen und Daten von DLLs exportieren
und importieren 222
6.2.3 DLLs zur Ladezeit laden 226
6.2.4 DLLs zur Laufzeit laden 227
6.2.5 Versionskontrolle bei DLLs 228
6.2.6 Gemeinsam genutzten Speicher für eine DLL erstellen 230
6.2.7 Ein einfaches DLL-Beispiel 231
6.2.8 C++ und DLLs 236
6.2.9 MFC und DLLs 238
6.3 Generische Thunks 247
6.3.1 Generische Thunk-Architektur 248
6.3.2 Generische Thunk-Funktionen 249
6.3.3 Beispiel für generische Thunks 252
6.3.4 Fehlersuche in generischen Thunks 260
6.4 Zusammenfassung 261
Kapitel 7 Verteilte Sicherheit 263
7.1 Sicherheit von Windows 2000 im Überblick 264
7.2 Grundlegende Datenstrukturen für Sicherheit 265
7.2.1 Zugriffstoken für Prozesse und Threads 266
7.2.2 Sicherheits-IDs 269
7.2.3 Die Strukturen ACE, DACL und SACL 274
7.2.4 Die erforderliche Größe für eine
ACL-Struktur bestimmen 276
7.2.5 Einen zugriffsgewährenden ACE in eine
DACL aufnehmen 277
7.2.6 Sicherheitsdeskriptoren 279
7.2.7 Einen Sicherheitsdeskriptor abrufen 282
7.2.8 Die Struktur SECURITY_ATTRIBUTES 285
7.3 Vertrauensbasierte Zugriffskontrolle 285
7.3.1 Die Struktur TRUSTEE 287
7.3.2 Die Struktur ACTRL_ACCESS_ENTRY 289
7.3.3 Die Struktur ACTRL_ACCESS_ENTRY_LIST 291
7.3.4 Die Struktur ACTRL_PROPERTY_ENTRY 292
7.3.5 Die Struktur ACTRL_ACCESS 292
7.4 Identitätswechsel für einen Client 298
7.5 Zusammenfassung 299
Kapitel 8 Windows 2000-Debugging 301
8.1 Strategien der Fehlersuche in Windows 302
8.2 Die Fehlersuche im Code erleichtern 303
8.2.1 Unterstützung der Fehlersuche für Windows 2000 303
8.2.2 MFC-Unterstützung für die Fehlersuche 304
8.3 Überblick zur Fehlersuche in Windows 2000 307
8.3.1 Symbolische Debug-Informationen 307
8.3.2 Debugging-Tools von Microsoft 307
8.3.3 Debugging-Tools von Drittherstellern 308
8.4 Der integrierte Debugger von Visual C++ 308
8.4.1 Grundlagen zum Debugger von Visual C++ 309
8.4.2 Die Fenster des Visual C++-Debuggers 313
8.4.3 Tricks für den Visual C++-Debugger 314
8.5 Der Windows-Debugger WINDBG 317
8.6 SoftIce zur Fehlersuche in Programmen 317
8.7 Mit Dr. Watson die Ursache von Abstürzen suchen 318
8.8 Mit BugTrapper die Ursache von Abstürzen suchen 321
8.9 Quellen für Tools von Drittherstellern 322
8.9.1 Compuware NuMega Lab 322
8.9.2 Mutek Solutions Ltd. 323
8.9.3 Rational 323
8.10 Zusammenfassung 323
Kapitel 9 Dienste in Windows 2000 325
9.1 Dienste 326
9.1.1 Zusammenarbeit mit Windows 2000-Diensten 326
9.1.2 Windows 2000-Dienste und Systemsicherheit 329
9.2 Windows 2000-Dienste programmieren 331
9.2.1 Den Dienststeuerungs-Manager mit
dem Dienststatus aktualisieren 332
9.2.2 Der Lebenszyklus eines Windows 2000-Dienstes 335
9.2.3 Daten in das Windows 2000-
Ereignisprotokoll schreiben 341
9.3 Beispiel eines Windows 2000-Dienstes 345
9.3.1 FileSpy: Ein Windows 2000-Dienst 345
9.4 Zusammenfassung 358
Kapitel 10 Dienste von Windows 2000 steuern 359
10.1 Dienststeuerungsprogramme schreiben 360
10.1.1 Einen Dienst mit dem Dienststeuerungs-
Manager registrieren 360
10.1.2 Registrierung eines Dienstes aufheben 364
10.1.3 Gescheiterte Dienste automatisch neu starten 366
10.2 Applets für die Systemsteuerung schreiben 369
10.2.1 Die Applet-Schnittstelle zur Systemsteuerung 369
10.2.2 CtlFileSpy: Ein Applet der Systemsteuerung
für den Dienst FileSpy 372
10.3 Zusammenfassung 382
Teil 2 Benutzerinteraktion/Desktop 383
Kapitel 11 GDI-Programmierung 385
11.1 GDI-Grundlagen 386
11.2 Gerätekontexte 387
11.2.1 Die GDI-Abbildungsmodi 388
11.2.2 GDI-Objekte 389
11.3 Bitmaps 390
11.3.1 DDBs und DIBs 391
11.3.2 DIBs mit 16 Farben 396
11.3.3 DIBs mit 256 Farben 396
11.4 Das DIB-Beispiel 399
11.4.1 Die Klasse CDIBitmap 399
11.4.2 Die Klasse CBmpPalette 406
11.4.3 Änderungen an der Klasse CDibDoc 407
11.4.4 Änderungen an der Hauptrahmenklasse 410
11.4.5 Änderungen an der Klasse CDibView 410
11.5 Pfade 413
11.6 Metadateien 417
11.7 Beispiel einer Metadatei 418
11.7.1 Änderungen der Klassendeklaration von CMetaView 418
11.7.2 Änderungen am Destruktor der Klasse CMetaView 419
11.7.3 Änderungen an CMetaView::OnInitialUpdate 419
11.7.4 Klicks mit der linken Maustaste 421
11.7.5 Änderungen an CMetaView::OnDraw 421
11.8 Zusammenfassung 423
Kapitel 12 Besitzerzeichnung und Benutzerzeichnung 425
12.1 Besitzer-Steuerelemente 426
12.2 Ein Besitzer-Steuerelement implementieren 427
12.2.1 Die Nachricht WM_DRAWITEM 428
12.2.2 Die Nachricht WM_MEASUREITEM 429
12.2.3 Die Nachricht WM_COMPAREITEM 430
12.2.4 Die Nachricht WM_DELETEITEM 430
12.3 OwnDraw: Beispiel für Besitzerzeichnung 431
12.3.1 Die Struktur CListItem erstellen 432
12.3.2 Die Nachrichten der Besitzerzeichnung behandeln 432
12.3.3 Elemente in das Listenfeld aufnehmen 433
12.3.4 Die Nachricht WM_MEASUREITEM behandeln 433
12.3.5 Die Nachricht WM_DRAWITEM behandeln 434
12.3.6 Die Nachricht WM_DELETEITEM behandeln 435
12.4 Benutzerdefiniertes Zeichnen 436
12.4.1 Datenstrukturen einer Benutzerzeichnung 437
12.4.2 CustDraw: Beispiel einer Benutzerzeichnung mit MFC 443
12.5 Zusammenfassung 450
Teil 3 COM und ActiveX 451
Kapitel 13 Konzepte von COM und OLE 453
13.1 Überblick zu COM und OLE 454
13.2 Gebräuchliche COM- und OLE-Technologien 454
13.2.1 Verbunddokumente 455
13.2.2 Visuelle Bearbeitung 456
13.2.3 Automatisierung 458
13.2.4 OLE-Datentransfer 458
13.2.5 Drag & Drop 459
13.2.6 Integration mit anderen Anwendungen 459
13.3 Programmieren mit COM und OLE 459
13.3.1 COM-Schnittstellen 459
13.3.2 COM-Schnittstellen und -Objekte identifizieren 460
13.3.3 GUIDs behandeln 461
13.3.4 Das Versionsproblem 462
13.3.5 Die Schnittstelle IUnknown 463
13.3.6 Ein Objekt erstellen 467
13.4 Beispiel einer COM-Komponente 471
13.4.1 Der Shell-Erweiterungsmechanismus 472
13.4.2 Kontextmenü-Erweiterungen 472
13.4.3 Das Beispiel erstellen 473
13.5 Zusammenfassung 488
Kapitel 14 Automatisierung 489
14.1 Programmierbare Anwendungen durch Automatisierung 490
14.2 Die Schnittstelle IDispatch 491
14.2.1 Datentypen von IDispatch 491
14.2.2 Funktionen in IDispatch 498
14.2.3 IDispatch-Schnittstellen und Funktionstabellen 499
14.3 Einen Automatisierungs-Server mit MFC erstellen 501
14.3.1 Automatisierungsoptionen modifizieren 502
14.3.2 Modifikationen an der Dokumentenklasse 502
14.3.3 Ein Dialogfeld für AutoBub 504
14.3.4 Bubble-Objekte für AutoBub zeichnen 507
14.3.5 Automatisierungsunterstützung für AutoBub 508
14.4 Einen Automatisierungs-Controller mit Visual Basic erstellen 512
14.5 Automatisierung in VBScript 515
14.6 Zusammenfassung 517
Kapitel 15 OLE-Drag & Drop 519
15.1 Die OLE-Zwischenablage 520
15.1.1 Die Strukturen FORMATETC und STGMEDIUM 521
15.1.2 FORMATETC-Strukturen behandeln 522
15.1.3 Die Struktur DVTARGETDEVICE 523
15.1.4 Die Struktur STGMEDIUM 524
15.1.5 Die Schnittstelle IDataObject 526
15.2 OLE-Drag & Drop 527
15.2.1 Eine OLE-Drag & Drop-Quelle 528
15.2.2 Ein OLE-Drag & Drop-Ziel 529
15.3 Ein Drag & Drop-Beispiel 529
15.4 Zusammenfassung 539
Kapitel 16 COM-Threading-Modelle 541
16.1 Alternativen zum COM-Threading 542
16.1.1 Prozessinterne COM-Server vor
Einführung der Apartments 542
16.1.2 Prozessexterne Server vor Einführung der Apartments 544
16.1.3 Speicher über Prozessgrenzen verwalten 545
16.1.4 COM mit Apartments 547
16.2 STA oder MTA? 549
16.2.1 Ein Apartment für jeden Thread 550
16.2.2 Das beste Apartment für einen bestimmten Thread 550
16.2.3 Ein Apartment für jedes COM-Objekt auswählen 551
16.2.4 Inkompatible Apartments von Client und COM-Objekt 553
16.3 Marshaling zwischen COM-Apartments 559
16.3.1 Der falsche Weg zur gemeinsamen Nutzung von Schnittstellenzeigern 561
16.3.2 Der richtige Weg zur gemeinsamen Nutzung von Schnittstellenzeigern 564
16.4 Zusammenfassung 567
Kapitel 17 Benutzerdefinierte COM-Objekte 569
17.1 IDL 570
17.1.1 MIDL-Attribute 572
17.1.2 Eine MIDL-Quelldatei kompilieren 574
17.1.3 Typbibliotheken 575
17.1.4 Strukturen in IDL 575
17.1.5 Aufzählungen in IDL 576
17.1.6 Zeiger und IDL 576
17.1.7 Richtungsattribute in IDL 579
17.2 Benutzerdefinierte Komponenten mit ATL erstellen 579
17.2.1 Gebräuchliche ATL-Klassen 580
17.2.2 ATL COM-Schnittstellentabelle 580
17.2.3 ATL-Assistenten 581
17.2.4 Proxy-/Stub-Code mit der DLL zusammenführen 588
17.2.5 Beispiel für ein benutzerdefiniertes COM-Objekt 589
17.3 Moniker 600
17.3.1 Beispiele von System-Monikern 601
17.3.2 Instanzen von Monikern anlegen 601
17.3.3 Moniker in Zeichenfolgen übersetzen 602
17.3.4 Moniker aus einem Anzeigenamen erzeugen 604
17.4 Verbindungspunkte 604
17.5 Benutzerdefiniertes Marshaling 608
17.5.1 Benutzerdefiniertes Marshaling im Überblick 608
17.5.2 Marshaling nach Wert 611
17.5.3 Einen benutzerdefinierten Proxy implementieren 611
17.5.4 IMarshal auf dem Server implementieren 617
17.5.5 Leistungsvergleich zwischen benutzerdefiniertem
und Standard-Proxy 620
17.6 Zusammenfassung 621
Kapitel 18 ActiveX-Steuerelemente entwickeln 623
18.1 Was ist ein ActiveX-Steuerelement? 624
18.2 Schnittstellen zu ActiveX-Steuerelementen 625
18.3 Eigenschaften, Ereignisse und Methoden von
ActiveX-Steuerelementen 626
18.3.1 Eigenschaften 626
18.3.2 Ereignisse 627
18.3.3 Methoden 627
18.4 Beispiel für ein ActiveX-Steuerelement 627
18.4.1 Das Projekt AxEdit erstellen 628
18.4.2 Das Steuerelement AxEdit zeichnen 629
18.4.3 Die Eigenschaften für AxEdit definieren 630
18.4.4 Zeicheneingaben behandeln 633
18.4.5 Das Bitmap des Steuerelements modifizieren 635
18.5 Ein ActiveX-Steuerelement testen 635
18.5.1 Einen Testcontainer für das Steuerelement auswählen 636
18.5.2 Der Testcontainer TSTCON32 636
18.5.3 Eigenschaften testen 638
18.6 ActiveX-Steuerelemente mit ATL erstellen 639
18.6.1 Grundeigenschaften mit ATL implementieren 640
18.6.2 Benutzerdefinierte Eigenschaften mit
ATL implementieren 642
18.6.3 Ambient-Eigenschaften mit ATL 645
18.6.4 Ereignisse in einem ATL-Projekt implementieren 645
18.6.5 Behandlungsroutinen für Nachrichten und Ereignisse 647
18.7 Ein ActiveX-Steuerelement mit ATL erstellen 649
18.7.1 Grundlegender Entwurf des PopButton-Steuerelements 650
18.7.2 Das PopBtn-Projekt erstellen 653
18.7.3 PopButton mit Visual Basic testen 672
18.8 Zusammenfassung 675
Kapitel 19 Asynchrones COM 677
19.1 Synchrone und asynchrone Methoden in COM 678
19.2 Unterstützung asynchroner Methoden in Windows 2000 679
19.2.1 Asynchrone Unterstützung in IDL 680
19.2.2 Weitere neue asynchrone Komponenten
in Windows 2000 682
19.2.3 Methodenaufrufe "auslösen und vergessen" 689
19.3 Ein Beispiel für asynchrones COM 689
19.3.1 Die Schnittstelle IShop 689
19.3.2 Das Projekt AsyncTest 690
19.3.3 Ein synchroner Testclient 692
19.3.4 Zweite Version der Schnittstelle IShop 694
19.3.5 Der asynchrone Testclient 696
19.4 Zusammenfassung 699
Kapitel 20 DCOM 701
20.1 Standorttransparenz 702
20.1.1 Die Instanz eines Remoteobjekts erstellen 703
20.1.2 Die Schnittstelle IMultiQI 708
20.1.3 Gültigkeit einer externen Referenz bestimmen 709
20.2 Sicherheit in DCOM 710
20.2.1 Arten der Sicherheit 710
20.2.2 Aufrufsicherheit 711
20.2.3 Delegierung und Identitätswechsel 712
20.2.4 Sicherheitsebenen für einen Computer einstellen 712
20.2.5 Sicherheitsattribute für einen Prozess einstellen 716
20.2.6 Sicherheitsbeschreibungen 731
20.2.7 Clientseitige Sicherheitsattribute für eine Schnittstelle 732
20.2.8 Serverseitige Sicherheit verwalten 734
20.3 Das Dienstprogramm DCOM-Konfiguration 735
20.3.1 Systemweite Attribute mit DCOM-Konfiguration
setzen 736
20.3.2 Attribute für eine bestimmte AppID mit DCOM-Konfiguration festlegen 737
20.4 Zusammenfassung 738
Teil 4 COM+ 739
Kapitel 21 Einführung in die COM+-Dienste 741
21.1 Transaktionen 742
21.1.1 ACID: Die vier Regeln der Transaktionsverarbeitung 743
21.1.2 Transaktionsarten 745
21.1.3 Zweiphasencommit 747
21.2 Transaktionen in COM+ 748
21.2.1 COM+-Anwendung 750
21.3 Eine transaktionsfähige COM+-Komponente erstellen 752
21.3.1 Ein COM-Objekt mit Visual Basic erstellen 753
21.3.2 Zwischenbilanz 773
21.3.3 Komponenten in eine COM+-Anwendung hinzufügen 773
21.4 Zusammenfassung 790
Kapitel 22 Komponenten für COM+-Dienste 791
22.1 COM+Transaktionskomponenten 792
22.1.1 Lebenszyklen und statuslose Objekte 792
22.1.2 Statuslos Objekte 794
22.1.3 Aktivitäten 796
22.2 Transaktionskomponenten schreiben 798
22.2.1 Eine allgemeine Transaktionskomponente erstellen 799
22.2.2 Ein COM+-Objekt für Transaktionen mit
Visual C++ erstellen 800
22.2.3 Ein COM+-Objekt für Transaktionen mit
Visual Basic erstellen 812
22.3 COM-Unterstützung des Compilers 815
22.3.1 TLH und TLI: Die Ausgabe unter der Lupe 816
22.3.2 Befehlsattribute des COM-Compilers 819
22.3.3 Fehler mit com_error generieren und abfangen 820
22.3.4 Mit beliebigen Daten arbeiten: _variant_t 821
22.3.5 Mit BSTRs arbeiten: _bstr_t 822
22.4 Mit mehreren COM+-Objekten arbeiten 823
22.4.1 Transaktionslebensstadien für kombinierte
COM+-Objekte 823
22.4.2 Transaktionsergebnisse von Multi-COM-Objekten 826
22.4.3 Fehlerbehandlung 828
22.4.4 Parameter und Schnittstellen übergeben 828
22.5 Zusammenfassung 831
Kapitel 23 COM+ und IIS 833
23.1 Basis einer Webanwendung 834
23.1.1 ASP im Überblick 835
23.1.2 Ein kurzes Skript-Beispiel 836
23.1.3 ASP-Anwendungen 836
23.1.4 Integrierte ASP-Objekte 842
23.2 Eine Webanwendung erstellen 842
23.2.1 Webaktivitäten 844
23.3 Die Theorie umsetzen 847
23.3.1 HTML-Formulare verarbeiten 847
23.3.2 Cookies verwalten 849
23.3.3 Cookies erstellen 850
23.3.4 Die Auflistung ServerVariables 853
23.3.5 ASP-Fehler behandeln 854
23.3.6 Einen globalen Schlüssel definieren 856
23.3.7 Die Reihenfolge erzwingen 858
23.3.8 Einfacher mit JavaScript 862
23.3.9 Objekte einfacher verwalten 866
23.3.10 Binärdaten 866
23.3.11 Dynamischer Code 868
23.3.12 Dynamische Anpassung des Inhalts 869
23.3.13 Gültigkeitsprüfung der Daten 871
23.3.14 Dateien herunterladen 874
23.3.15 E-Mails senden 875
23.3.16 Browser-Fähigkeiten 876
23.4 Komponentenentwicklung 880
23.4.1 Eine einfache ASP-Komponente 881
23.4.2 Eine umfangreichere ASP-Komponente 884
23.5 ASP-Seiten mit Transaktionen 889
23.6 Zusammenfassung 891
Kapitel 24 Erweiterte COM+Dienste 893
24.1 Skalierbarkeit über Objektpooling 894
24.1.1 IObjectControl implementieren 895
24.2 Einige erweiterte Transaktionskonzepte 898
24.2.1 Deadlocks und Blockierungen vermeiden 898
24.2.2 IObjectConstruct-Schnittstellen 899
24.2.3 Spezielle Transaktionssteuerung 900
24.2.4 Transaktionen vom Client aus steuern 904
24.3 Komponenten in Warteschlangen 907
24.3.1 Was sind Komponenten in Warteschlangen? 908
24.3.2 Arbeitsweise von Komponenten in Warteschlangen 909
24.3.3 Komponenten in Warteschlangen erstellen 910
24.3.4 Eine Rückgabenachricht mit Komponenten in Warteschlangen senden 911
24.4 Informationen asynchron verteilen 912
24.4.1 Einführung in die Verleger/Abonnent-Architektur 913
24.4.2 Ein Verleger/Abonnent-Projekt erstellen 914
24.5 Zusammenfassung 932
Teil 5 Verteilte Windows 2000-Dienste 933
Kapitel 25 Pipes 935
25.1 Arten von Pipes 936
25.2 Anonyme Pipes 936
25.2.1 Eine anonyme Pipe erstellen und schließen 937
25.2.2 Anonyme Pipes lesen und schreiben 938
25.2.3 Über anonyme Pipes mit einem anderen Prozess kommunizieren 939
25.2.4 Ein Beispiel mit anonymen Pipes 940
25.3 Benannte Pipes 944
25.3.1 Arten von benannten Pipes 945
25.3.2 Eine benannte Pipe erstellen und schließen 945
25.3.3 Zu einer benannten Pipe verbinden 948
25.3.4 Beispiel für eine benannte Pipe 949
25.4 Zusammenfassung 959
Kapitel 26 Active Directory 961
26.1 Überblick über Active Directory 962
26.1.1 Namespaceorganisation 962
26.1.2 Gesamtstrukturen 965
26.2 Active Directory mit ADSI verwalten 966
26.2.1 ADSI in Visual Basic und Visual C++ 966
26.2.2 ADSI-Bindungszeichenfolgen 967
26.2.3 ADSI-Hilfsfunktionen 968
26.2.4 Serverlose Bindung und ADSI 972
26.2.5 Von ADSI offen gelegte COM-Schnittstellen 974
26.3 Zusammenfassung 984
Kapitel 27 MSMQ 985
27.1 Eine Einführung in den Microsoft Message Queue Server 986
27.1.1 MSMQ und benannte Pipes 987
27.1.2 MSMQ installieren 987
27.1.3 Arten von Nachrichtenwarteschlangen 988
27.1.4 Öffentliche und private Warteschlangen 989
27.2 MSMQ-Objekteigenschaften 990
27.2.1 Warteschlangeneigenschaften 991
27.2.2 Nachrichteneigenschaften 993
27.2.3 Computereigenschaften 994
27.2.4 Speicherreservierung 995
27.3 Funktionen der Win32-API für Nachrichtenwarteschlangen 996
27.3.1 Eine Warteschlange erstellen 997
27.3.2 Eine vorhandene Warteschlange öffnen 1002
27.3.3 Nachrichten über eine Warteschlange senden 1003
27.3.4 Nachrichten aus einer Warteschlange empfangen 1008
27.3.5 Eine Nachrichtenwarteschlange schließen 1013
27.3.6 Eine Warteschlange löschen 1013
27.4 Ein Warteschlangen-Client in Visual Basic 1016
27.5 Zusammenfassung 1020
Kapitel 28 Cluster Server 1021
28.1 Die Architektur von Microsoft Cluster Server 1022
28.1.1 Die Hardware von Cluster Server 1023
28.1.2 Softwarekomponenten von MSCS 1024
28.1.3 Cluster einrichten und wiederherstellen 1026
28.2 Cluster-APIs 1027
28.2.1 APIs der Clusterobjektverwaltung 1027
28.2.2 APIs der Ressourcen-DLLs 1036
28.2.3 APIs der Cluster-Administrator-Erweiterung 1040
28.3 Beispiel einer clusterfähigen Anwendung 1042
28.3.1 Das Projekt ClusterQuote 1043
28.3.2 Das Projekt QuoteClient 1043
28.3.3 Der Cluster-Ressourcentyp für hohe Verfügbarkeit 1044
28.4 Zusammenfassung 1047
Anhang A Die Begleit-CD zum Buch 1049
Stichwortverzeichnis 1051
Teil 1 Windows 2000-Kerntechnologien 27
Kapitel 1 Windows DNA im Überblick 29
1.1 Zur Geschichte von Windows und Windows NT 30
1.2 Windows DNA im Detail 31
1.2.1 Die Lösung 32
1.3 Die Architektur von Windows DNA 34
1.3.1 COM überall 34
1.3.2 Präsentationsebene 35
1.3.3 Schicht der Firewall 38
1.3.4 Ebene der Geschäftslogik 39
1.3.5 Datenebene 44
1.4 Zusammenfassung 46
Kapitel 2 Virtueller Speicher und Speicherverwaltung 47
2.1 Virtueller Speicher 48
2.2 Entscheidung für den Einsatz von virtuellem Speicher 50
2.2.1 Virtuelle Speicherbereiche reservieren 51
2.2.2 Virtuelle Speicherseiten bestätigen 52
2.2.3 Virtuelle Speicherseiten sperren 56
2.2.4 Virtuelle Speicherseiten freigeben 57
2.2.5 Speicher für andere Prozesse zuweisen 58
2.3 Beispiel mit virtuellem Speicher 58
2.4 Heap-Funktionen von Windows 2000 69
2.4.1 Heap-Verwaltung unter Windows 2000 69
2.4.2 Private Heaps in C++-Klassen 72
2.5 Zusammenfassung 77
Kapitel 3 Threads und Prozesse 79
3.1 Prozesse und Threads 80
3.2 Prozesse verwalten 82
3.2.1 Die Funktion CreateProcess 82
3.2.2 Prozesse beenden 85
3.3 Threads verwalten 86
3.3.1 Threads erzeugen 86
3.3.2 Threads beenden 91
3.3.3 Thread-Prioritäten abrufen und ändern 92
3.3.4 Lokaler Thread-Speicher 93
3.3.5 Thread-ID bestimmen 95
3.3.6 Thread-Affinität 96
3.3.7 Zusammenarbeit mehrerer Threads 99
3.3.8 Wann ein Thread zu erzeugen ist 102
3.3.9 Wann kein Thread zu erzeugen ist 102
3.4 Synchronisierung 103
3.4.1 Sperroperationen von Win32 103
3.4.2 Kritische Abschnitte 106
3.4.3 Ereignisse verwalten 109
3.4.4 Mutexe und gegenseitiger Ausschluss 116
3.5 Semaphoren 119
3.5.1 Semaphoren und Wartefunktionen 120
3.5.2 Anwendungen für Semaphoren 121
3.5.3 Semaphoren erstellen 122
3.5.4 Semaphoren-gesteuerte Ressourcen zurückgeben 123
3.6 Semaphoren und kritische Abschnitte in einer Anwendung 124
3.7 Auftragsobjekte 131
3.7.1 Attribute von Auftragsobjekten steuern 132
3.7.2 Beispiel für ein Auftragsobjekt 133
3.8 Zusammenfassung 137
Kapitel 4 Dateien 139
4.1 Dateisysteme in Windows 2000 140
4.2 Allgemeine Dateioperationen 141
4.2.1 Datenträgerinformationen einholen 141
4.2.2 Attribute des Dateisystems 142
4.2.3 Informationen über Datenträger abfragen 143
4.2.4 Dateien öffnen, schließen und löschen 145
4.2.5 In Dateien schreiben 149
4.2.6 Aus Dateien lesen 150
4.3 Nach Dateien suchen 153
4.3.1 Die Funktionen FindFirstFile, FindNextFile
und FindClose 153
4.3.2 Ausblick: FindFirstFileEx 157
4.3.3 Die Struktur FILETIME 158
4.4 Andere Dateioperationen 161
4.4.1 Die Funktion CopyFile 161
4.4.2 Die Funktion MoveFile 161
4.4.3 Die Funktion SetFilePointer 161
4.4.4 Die Funktion GetFileSize 163
4.5 Asynchrone Ein- und Ausgabe 164
4.5.1 Überlappende Ein- und Ausgabe 165
4.5.2 Fertigstellungsroutinen für Dateien 168
4.5.3 Beispiel für Dateifertigstellungsroutinen 170
4.6 Das verschlüsselnde Dateisystem 178
4.7 Funktionen zur Dateibenachrichtigung 182
4.8 Zusammenfassung 188
Kapitel 5 Strukturierte Ausnahmebehandlung 189
5.1 Grundlagen der Ausnahmebehandlung 190
5.2 Arbeitsweise der strukturierten Ausnahmebehandlung 191
5.3 Beendigungsbehandlungsroutinen 192
5.3.1 Einen __try-Block mit __leave beenden 195
5.3.2 Normale und vorzeitige Beendigung 195
5.4 Ausnahmebehandlungsroutinen 196
5.4.1 Ausnahmefilter 197
5.4.2 Ausnahmen bei Gleitkommaoperationen behandeln 202
5.5 Ausnahmebehandlung in C++ 203
5.5.1 Ausnahmen zur Erkennung von Fehlern 203
5.5.2 Ausnahmen zum Aufräumen nach Erkennen
von Fehlern 205
5.5.3 Die Standardbibliothek für Ausnahmen 206
5.5.4 Ausnahmen zur Laufzeit 207
5.5.5 Logische Ausnahmen 208
5.5.6 Fehler während der Konstruktion erkennen 209
5.6 Strukturierte Ausnahmebehandlung von Win32 mit
der Ausnahmebehandlung von C++ integrieren 210
5.7 Zusammenfassung 213
Kapitel 6 Dynamische Link-Bibliotheken 215
6.1 Bibliotheken 216
6.1.1 Statische Link-Bibliotheken 217
6.1.2 Dynamische Link-Bibliotheken 217
6.1.3 Vorteile von DLLs 219
6.1.4 Nachteile von DLLs 219
6.2 DLLs erstellen und einsetzen 220
6.2.1 DLLs initialisieren 220
6.2.2 Funktionen und Daten von DLLs exportieren
und importieren 222
6.2.3 DLLs zur Ladezeit laden 226
6.2.4 DLLs zur Laufzeit laden 227
6.2.5 Versionskontrolle bei DLLs 228
6.2.6 Gemeinsam genutzten Speicher für eine DLL erstellen 230
6.2.7 Ein einfaches DLL-Beispiel 231
6.2.8 C++ und DLLs 236
6.2.9 MFC und DLLs 238
6.3 Generische Thunks 247
6.3.1 Generische Thunk-Architektur 248
6.3.2 Generische Thunk-Funktionen 249
6.3.3 Beispiel für generische Thunks 252
6.3.4 Fehlersuche in generischen Thunks 260
6.4 Zusammenfassung 261
Kapitel 7 Verteilte Sicherheit 263
7.1 Sicherheit von Windows 2000 im Überblick 264
7.2 Grundlegende Datenstrukturen für Sicherheit 265
7.2.1 Zugriffstoken für Prozesse und Threads 266
7.2.2 Sicherheits-IDs 269
7.2.3 Die Strukturen ACE, DACL und SACL 274
7.2.4 Die erforderliche Größe für eine
ACL-Struktur bestimmen 276
7.2.5 Einen zugriffsgewährenden ACE in eine
DACL aufnehmen 277
7.2.6 Sicherheitsdeskriptoren 279
7.2.7 Einen Sicherheitsdeskriptor abrufen 282
7.2.8 Die Struktur SECURITY_ATTRIBUTES 285
7.3 Vertrauensbasierte Zugriffskontrolle 285
7.3.1 Die Struktur TRUSTEE 287
7.3.2 Die Struktur ACTRL_ACCESS_ENTRY 289
7.3.3 Die Struktur ACTRL_ACCESS_ENTRY_LIST 291
7.3.4 Die Struktur ACTRL_PROPERTY_ENTRY 292
7.3.5 Die Struktur ACTRL_ACCESS 292
7.4 Identitätswechsel für einen Client 298
7.5 Zusammenfassung 299
Kapitel 8 Windows 2000-Debugging 301
8.1 Strategien der Fehlersuche in Windows 302
8.2 Die Fehlersuche im Code erleichtern 303
8.2.1 Unterstützung der Fehlersuche für Windows 2000 303
8.2.2 MFC-Unterstützung für die Fehlersuche 304
8.3 Überblick zur Fehlersuche in Windows 2000 307
8.3.1 Symbolische Debug-Informationen 307
8.3.2 Debugging-Tools von Microsoft 307
8.3.3 Debugging-Tools von Drittherstellern 308
8.4 Der integrierte Debugger von Visual C++ 308
8.4.1 Grundlagen zum Debugger von Visual C++ 309
8.4.2 Die Fenster des Visual C++-Debuggers 313
8.4.3 Tricks für den Visual C++-Debugger 314
8.5 Der Windows-Debugger WINDBG 317
8.6 SoftIce zur Fehlersuche in Programmen 317
8.7 Mit Dr. Watson die Ursache von Abstürzen suchen 318
8.8 Mit BugTrapper die Ursache von Abstürzen suchen 321
8.9 Quellen für Tools von Drittherstellern 322
8.9.1 Compuware NuMega Lab 322
8.9.2 Mutek Solutions Ltd. 323
8.9.3 Rational 323
8.10 Zusammenfassung 323
Kapitel 9 Dienste in Windows 2000 325
9.1 Dienste 326
9.1.1 Zusammenarbeit mit Windows 2000-Diensten 326
9.1.2 Windows 2000-Dienste und Systemsicherheit 329
9.2 Windows 2000-Dienste programmieren 331
9.2.1 Den Dienststeuerungs-Manager mit
dem Dienststatus aktualisieren 332
9.2.2 Der Lebenszyklus eines Windows 2000-Dienstes 335
9.2.3 Daten in das Windows 2000-
Ereignisprotokoll schreiben 341
9.3 Beispiel eines Windows 2000-Dienstes 345
9.3.1 FileSpy: Ein Windows 2000-Dienst 345
9.4 Zusammenfassung 358
Kapitel 10 Dienste von Windows 2000 steuern 359
10.1 Dienststeuerungsprogramme schreiben 360
10.1.1 Einen Dienst mit dem Dienststeuerungs-
Manager registrieren 360
10.1.2 Registrierung eines Dienstes aufheben 364
10.1.3 Gescheiterte Dienste automatisch neu starten 366
10.2 Applets für die Systemsteuerung schreiben 369
10.2.1 Die Applet-Schnittstelle zur Systemsteuerung 369
10.2.2 CtlFileSpy: Ein Applet der Systemsteuerung
für den Dienst FileSpy 372
10.3 Zusammenfassung 382
Teil 2 Benutzerinteraktion/Desktop 383
Kapitel 11 GDI-Programmierung 385
11.1 GDI-Grundlagen 386
11.2 Gerätekontexte 387
11.2.1 Die GDI-Abbildungsmodi 388
11.2.2 GDI-Objekte 389
11.3 Bitmaps 390
11.3.1 DDBs und DIBs 391
11.3.2 DIBs mit 16 Farben 396
11.3.3 DIBs mit 256 Farben 396
11.4 Das DIB-Beispiel 399
11.4.1 Die Klasse CDIBitmap 399
11.4.2 Die Klasse CBmpPalette 406
11.4.3 Änderungen an der Klasse CDibDoc 407
11.4.4 Änderungen an der Hauptrahmenklasse 410
11.4.5 Änderungen an der Klasse CDibView 410
11.5 Pfade 413
11.6 Metadateien 417
11.7 Beispiel einer Metadatei 418
11.7.1 Änderungen der Klassendeklaration von CMetaView 418
11.7.2 Änderungen am Destruktor der Klasse CMetaView 419
11.7.3 Änderungen an CMetaView::OnInitialUpdate 419
11.7.4 Klicks mit der linken Maustaste 421
11.7.5 Änderungen an CMetaView::OnDraw 421
11.8 Zusammenfassung 423
Kapitel 12 Besitzerzeichnung und Benutzerzeichnung 425
12.1 Besitzer-Steuerelemente 426
12.2 Ein Besitzer-Steuerelement implementieren 427
12.2.1 Die Nachricht WM_DRAWITEM 428
12.2.2 Die Nachricht WM_MEASUREITEM 429
12.2.3 Die Nachricht WM_COMPAREITEM 430
12.2.4 Die Nachricht WM_DELETEITEM 430
12.3 OwnDraw: Beispiel für Besitzerzeichnung 431
12.3.1 Die Struktur CListItem erstellen 432
12.3.2 Die Nachrichten der Besitzerzeichnung behandeln 432
12.3.3 Elemente in das Listenfeld aufnehmen 433
12.3.4 Die Nachricht WM_MEASUREITEM behandeln 433
12.3.5 Die Nachricht WM_DRAWITEM behandeln 434
12.3.6 Die Nachricht WM_DELETEITEM behandeln 435
12.4 Benutzerdefiniertes Zeichnen 436
12.4.1 Datenstrukturen einer Benutzerzeichnung 437
12.4.2 CustDraw: Beispiel einer Benutzerzeichnung mit MFC 443
12.5 Zusammenfassung 450
Teil 3 COM und ActiveX 451
Kapitel 13 Konzepte von COM und OLE 453
13.1 Überblick zu COM und OLE 454
13.2 Gebräuchliche COM- und OLE-Technologien 454
13.2.1 Verbunddokumente 455
13.2.2 Visuelle Bearbeitung 456
13.2.3 Automatisierung 458
13.2.4 OLE-Datentransfer 458
13.2.5 Drag & Drop 459
13.2.6 Integration mit anderen Anwendungen 459
13.3 Programmieren mit COM und OLE 459
13.3.1 COM-Schnittstellen 459
13.3.2 COM-Schnittstellen und -Objekte identifizieren 460
13.3.3 GUIDs behandeln 461
13.3.4 Das Versionsproblem 462
13.3.5 Die Schnittstelle IUnknown 463
13.3.6 Ein Objekt erstellen 467
13.4 Beispiel einer COM-Komponente 471
13.4.1 Der Shell-Erweiterungsmechanismus 472
13.4.2 Kontextmenü-Erweiterungen 472
13.4.3 Das Beispiel erstellen 473
13.5 Zusammenfassung 488
Kapitel 14 Automatisierung 489
14.1 Programmierbare Anwendungen durch Automatisierung 490
14.2 Die Schnittstelle IDispatch 491
14.2.1 Datentypen von IDispatch 491
14.2.2 Funktionen in IDispatch 498
14.2.3 IDispatch-Schnittstellen und Funktionstabellen 499
14.3 Einen Automatisierungs-Server mit MFC erstellen 501
14.3.1 Automatisierungsoptionen modifizieren 502
14.3.2 Modifikationen an der Dokumentenklasse 502
14.3.3 Ein Dialogfeld für AutoBub 504
14.3.4 Bubble-Objekte für AutoBub zeichnen 507
14.3.5 Automatisierungsunterstützung für AutoBub 508
14.4 Einen Automatisierungs-Controller mit Visual Basic erstellen 512
14.5 Automatisierung in VBScript 515
14.6 Zusammenfassung 517
Kapitel 15 OLE-Drag & Drop 519
15.1 Die OLE-Zwischenablage 520
15.1.1 Die Strukturen FORMATETC und STGMEDIUM 521
15.1.2 FORMATETC-Strukturen behandeln 522
15.1.3 Die Struktur DVTARGETDEVICE 523
15.1.4 Die Struktur STGMEDIUM 524
15.1.5 Die Schnittstelle IDataObject 526
15.2 OLE-Drag & Drop 527
15.2.1 Eine OLE-Drag & Drop-Quelle 528
15.2.2 Ein OLE-Drag & Drop-Ziel 529
15.3 Ein Drag & Drop-Beispiel 529
15.4 Zusammenfassung 539
Kapitel 16 COM-Threading-Modelle 541
16.1 Alternativen zum COM-Threading 542
16.1.1 Prozessinterne COM-Server vor
Einführung der Apartments 542
16.1.2 Prozessexterne Server vor Einführung der Apartments 544
16.1.3 Speicher über Prozessgrenzen verwalten 545
16.1.4 COM mit Apartments 547
16.2 STA oder MTA? 549
16.2.1 Ein Apartment für jeden Thread 550
16.2.2 Das beste Apartment für einen bestimmten Thread 550
16.2.3 Ein Apartment für jedes COM-Objekt auswählen 551
16.2.4 Inkompatible Apartments von Client und COM-Objekt 553
16.3 Marshaling zwischen COM-Apartments 559
16.3.1 Der falsche Weg zur gemeinsamen Nutzung von Schnittstellenzeigern 561
16.3.2 Der richtige Weg zur gemeinsamen Nutzung von Schnittstellenzeigern 564
16.4 Zusammenfassung 567
Kapitel 17 Benutzerdefinierte COM-Objekte 569
17.1 IDL 570
17.1.1 MIDL-Attribute 572
17.1.2 Eine MIDL-Quelldatei kompilieren 574
17.1.3 Typbibliotheken 575
17.1.4 Strukturen in IDL 575
17.1.5 Aufzählungen in IDL 576
17.1.6 Zeiger und IDL 576
17.1.7 Richtungsattribute in IDL 579
17.2 Benutzerdefinierte Komponenten mit ATL erstellen 579
17.2.1 Gebräuchliche ATL-Klassen 580
17.2.2 ATL COM-Schnittstellentabelle 580
17.2.3 ATL-Assistenten 581
17.2.4 Proxy-/Stub-Code mit der DLL zusammenführen 588
17.2.5 Beispiel für ein benutzerdefiniertes COM-Objekt 589
17.3 Moniker 600
17.3.1 Beispiele von System-Monikern 601
17.3.2 Instanzen von Monikern anlegen 601
17.3.3 Moniker in Zeichenfolgen übersetzen 602
17.3.4 Moniker aus einem Anzeigenamen erzeugen 604
17.4 Verbindungspunkte 604
17.5 Benutzerdefiniertes Marshaling 608
17.5.1 Benutzerdefiniertes Marshaling im Überblick 608
17.5.2 Marshaling nach Wert 611
17.5.3 Einen benutzerdefinierten Proxy implementieren 611
17.5.4 IMarshal auf dem Server implementieren 617
17.5.5 Leistungsvergleich zwischen benutzerdefiniertem
und Standard-Proxy 620
17.6 Zusammenfassung 621
Kapitel 18 ActiveX-Steuerelemente entwickeln 623
18.1 Was ist ein ActiveX-Steuerelement? 624
18.2 Schnittstellen zu ActiveX-Steuerelementen 625
18.3 Eigenschaften, Ereignisse und Methoden von
ActiveX-Steuerelementen 626
18.3.1 Eigenschaften 626
18.3.2 Ereignisse 627
18.3.3 Methoden 627
18.4 Beispiel für ein ActiveX-Steuerelement 627
18.4.1 Das Projekt AxEdit erstellen 628
18.4.2 Das Steuerelement AxEdit zeichnen 629
18.4.3 Die Eigenschaften für AxEdit definieren 630
18.4.4 Zeicheneingaben behandeln 633
18.4.5 Das Bitmap des Steuerelements modifizieren 635
18.5 Ein ActiveX-Steuerelement testen 635
18.5.1 Einen Testcontainer für das Steuerelement auswählen 636
18.5.2 Der Testcontainer TSTCON32 636
18.5.3 Eigenschaften testen 638
18.6 ActiveX-Steuerelemente mit ATL erstellen 639
18.6.1 Grundeigenschaften mit ATL implementieren 640
18.6.2 Benutzerdefinierte Eigenschaften mit
ATL implementieren 642
18.6.3 Ambient-Eigenschaften mit ATL 645
18.6.4 Ereignisse in einem ATL-Projekt implementieren 645
18.6.5 Behandlungsroutinen für Nachrichten und Ereignisse 647
18.7 Ein ActiveX-Steuerelement mit ATL erstellen 649
18.7.1 Grundlegender Entwurf des PopButton-Steuerelements 650
18.7.2 Das PopBtn-Projekt erstellen 653
18.7.3 PopButton mit Visual Basic testen 672
18.8 Zusammenfassung 675
Kapitel 19 Asynchrones COM 677
19.1 Synchrone und asynchrone Methoden in COM 678
19.2 Unterstützung asynchroner Methoden in Windows 2000 679
19.2.1 Asynchrone Unterstützung in IDL 680
19.2.2 Weitere neue asynchrone Komponenten
in Windows 2000 682
19.2.3 Methodenaufrufe "auslösen und vergessen" 689
19.3 Ein Beispiel für asynchrones COM 689
19.3.1 Die Schnittstelle IShop 689
19.3.2 Das Projekt AsyncTest 690
19.3.3 Ein synchroner Testclient 692
19.3.4 Zweite Version der Schnittstelle IShop 694
19.3.5 Der asynchrone Testclient 696
19.4 Zusammenfassung 699
Kapitel 20 DCOM 701
20.1 Standorttransparenz 702
20.1.1 Die Instanz eines Remoteobjekts erstellen 703
20.1.2 Die Schnittstelle IMultiQI 708
20.1.3 Gültigkeit einer externen Referenz bestimmen 709
20.2 Sicherheit in DCOM 710
20.2.1 Arten der Sicherheit 710
20.2.2 Aufrufsicherheit 711
20.2.3 Delegierung und Identitätswechsel 712
20.2.4 Sicherheitsebenen für einen Computer einstellen 712
20.2.5 Sicherheitsattribute für einen Prozess einstellen 716
20.2.6 Sicherheitsbeschreibungen 731
20.2.7 Clientseitige Sicherheitsattribute für eine Schnittstelle 732
20.2.8 Serverseitige Sicherheit verwalten 734
20.3 Das Dienstprogramm DCOM-Konfiguration 735
20.3.1 Systemweite Attribute mit DCOM-Konfiguration
setzen 736
20.3.2 Attribute für eine bestimmte AppID mit DCOM-Konfiguration festlegen 737
20.4 Zusammenfassung 738
Teil 4 COM+ 739
Kapitel 21 Einführung in die COM+-Dienste 741
21.1 Transaktionen 742
21.1.1 ACID: Die vier Regeln der Transaktionsverarbeitung 743
21.1.2 Transaktionsarten 745
21.1.3 Zweiphasencommit 747
21.2 Transaktionen in COM+ 748
21.2.1 COM+-Anwendung 750
21.3 Eine transaktionsfähige COM+-Komponente erstellen 752
21.3.1 Ein COM-Objekt mit Visual Basic erstellen 753
21.3.2 Zwischenbilanz 773
21.3.3 Komponenten in eine COM+-Anwendung hinzufügen 773
21.4 Zusammenfassung 790
Kapitel 22 Komponenten für COM+-Dienste 791
22.1 COM+Transaktionskomponenten 792
22.1.1 Lebenszyklen und statuslose Objekte 792
22.1.2 Statuslos Objekte 794
22.1.3 Aktivitäten 796
22.2 Transaktionskomponenten schreiben 798
22.2.1 Eine allgemeine Transaktionskomponente erstellen 799
22.2.2 Ein COM+-Objekt für Transaktionen mit
Visual C++ erstellen 800
22.2.3 Ein COM+-Objekt für Transaktionen mit
Visual Basic erstellen 812
22.3 COM-Unterstützung des Compilers 815
22.3.1 TLH und TLI: Die Ausgabe unter der Lupe 816
22.3.2 Befehlsattribute des COM-Compilers 819
22.3.3 Fehler mit com_error generieren und abfangen 820
22.3.4 Mit beliebigen Daten arbeiten: _variant_t 821
22.3.5 Mit BSTRs arbeiten: _bstr_t 822
22.4 Mit mehreren COM+-Objekten arbeiten 823
22.4.1 Transaktionslebensstadien für kombinierte
COM+-Objekte 823
22.4.2 Transaktionsergebnisse von Multi-COM-Objekten 826
22.4.3 Fehlerbehandlung 828
22.4.4 Parameter und Schnittstellen übergeben 828
22.5 Zusammenfassung 831
Kapitel 23 COM+ und IIS 833
23.1 Basis einer Webanwendung 834
23.1.1 ASP im Überblick 835
23.1.2 Ein kurzes Skript-Beispiel 836
23.1.3 ASP-Anwendungen 836
23.1.4 Integrierte ASP-Objekte 842
23.2 Eine Webanwendung erstellen 842
23.2.1 Webaktivitäten 844
23.3 Die Theorie umsetzen 847
23.3.1 HTML-Formulare verarbeiten 847
23.3.2 Cookies verwalten 849
23.3.3 Cookies erstellen 850
23.3.4 Die Auflistung ServerVariables 853
23.3.5 ASP-Fehler behandeln 854
23.3.6 Einen globalen Schlüssel definieren 856
23.3.7 Die Reihenfolge erzwingen 858
23.3.8 Einfacher mit JavaScript 862
23.3.9 Objekte einfacher verwalten 866
23.3.10 Binärdaten 866
23.3.11 Dynamischer Code 868
23.3.12 Dynamische Anpassung des Inhalts 869
23.3.13 Gültigkeitsprüfung der Daten 871
23.3.14 Dateien herunterladen 874
23.3.15 E-Mails senden 875
23.3.16 Browser-Fähigkeiten 876
23.4 Komponentenentwicklung 880
23.4.1 Eine einfache ASP-Komponente 881
23.4.2 Eine umfangreichere ASP-Komponente 884
23.5 ASP-Seiten mit Transaktionen 889
23.6 Zusammenfassung 891
Kapitel 24 Erweiterte COM+Dienste 893
24.1 Skalierbarkeit über Objektpooling 894
24.1.1 IObjectControl implementieren 895
24.2 Einige erweiterte Transaktionskonzepte 898
24.2.1 Deadlocks und Blockierungen vermeiden 898
24.2.2 IObjectConstruct-Schnittstellen 899
24.2.3 Spezielle Transaktionssteuerung 900
24.2.4 Transaktionen vom Client aus steuern 904
24.3 Komponenten in Warteschlangen 907
24.3.1 Was sind Komponenten in Warteschlangen? 908
24.3.2 Arbeitsweise von Komponenten in Warteschlangen 909
24.3.3 Komponenten in Warteschlangen erstellen 910
24.3.4 Eine Rückgabenachricht mit Komponenten in Warteschlangen senden 911
24.4 Informationen asynchron verteilen 912
24.4.1 Einführung in die Verleger/Abonnent-Architektur 913
24.4.2 Ein Verleger/Abonnent-Projekt erstellen 914
24.5 Zusammenfassung 932
Teil 5 Verteilte Windows 2000-Dienste 933
Kapitel 25 Pipes 935
25.1 Arten von Pipes 936
25.2 Anonyme Pipes 936
25.2.1 Eine anonyme Pipe erstellen und schließen 937
25.2.2 Anonyme Pipes lesen und schreiben 938
25.2.3 Über anonyme Pipes mit einem anderen Prozess kommunizieren 939
25.2.4 Ein Beispiel mit anonymen Pipes 940
25.3 Benannte Pipes 944
25.3.1 Arten von benannten Pipes 945
25.3.2 Eine benannte Pipe erstellen und schließen 945
25.3.3 Zu einer benannten Pipe verbinden 948
25.3.4 Beispiel für eine benannte Pipe 949
25.4 Zusammenfassung 959
Kapitel 26 Active Directory 961
26.1 Überblick über Active Directory 962
26.1.1 Namespaceorganisation 962
26.1.2 Gesamtstrukturen 965
26.2 Active Directory mit ADSI verwalten 966
26.2.1 ADSI in Visual Basic und Visual C++ 966
26.2.2 ADSI-Bindungszeichenfolgen 967
26.2.3 ADSI-Hilfsfunktionen 968
26.2.4 Serverlose Bindung und ADSI 972
26.2.5 Von ADSI offen gelegte COM-Schnittstellen 974
26.3 Zusammenfassung 984
Kapitel 27 MSMQ 985
27.1 Eine Einführung in den Microsoft Message Queue Server 986
27.1.1 MSMQ und benannte Pipes 987
27.1.2 MSMQ installieren 987
27.1.3 Arten von Nachrichtenwarteschlangen 988
27.1.4 Öffentliche und private Warteschlangen 989
27.2 MSMQ-Objekteigenschaften 990
27.2.1 Warteschlangeneigenschaften 991
27.2.2 Nachrichteneigenschaften 993
27.2.3 Computereigenschaften 994
27.2.4 Speicherreservierung 995
27.3 Funktionen der Win32-API für Nachrichtenwarteschlangen 996
27.3.1 Eine Warteschlange erstellen 997
27.3.2 Eine vorhandene Warteschlange öffnen 1002
27.3.3 Nachrichten über eine Warteschlange senden 1003
27.3.4 Nachrichten aus einer Warteschlange empfangen 1008
27.3.5 Eine Nachrichtenwarteschlange schließen 1013
27.3.6 Eine Warteschlange löschen 1013
27.4 Ein Warteschlangen-Client in Visual Basic 1016
27.5 Zusammenfassung 1020
Kapitel 28 Cluster Server 1021
28.1 Die Architektur von Microsoft Cluster Server 1022
28.1.1 Die Hardware von Cluster Server 1023
28.1.2 Softwarekomponenten von MSCS 1024
28.1.3 Cluster einrichten und wiederherstellen 1026
28.2 Cluster-APIs 1027
28.2.1 APIs der Clusterobjektverwaltung 1027
28.2.2 APIs der Ressourcen-DLLs 1036
28.2.3 APIs der Cluster-Administrator-Erweiterung 1040
28.3 Beispiel einer clusterfähigen Anwendung 1042
28.3.1 Das Projekt ClusterQuote 1043
28.3.2 Das Projekt QuoteClient 1043
28.3.3 Der Cluster-Ressourcentyp für hohe Verfügbarkeit 1044
28.4 Zusammenfassung 1047
Anhang A Die Begleit-CD zum Buch 1049
Stichwortverzeichnis 1051