Beruflich Dokumente
Kultur Dokumente
Win32 Systemprogrammierung
Fachhochschule Wiesbaden Lehrveranstaltung: Systemprogrammierung Prof. Dr. Weber
30.01.2009
Win32 Systemprogrammierung
Inhaltsverzeichnis
Kapitel 1
1. Einfhrung 2. Dateisysteme 3. I/O Systemaufrufe 4. Mutex/File Locking
30.01.2009
Win32 Systemprogrammierung
1.1 Einfhrung
WinApi
Ausgeschrieben steht WinAPI frWindows Application Programming Interface.Zu dt. bedeutet es Windows Anwendungs-Programmierungs- Schnittstelle.Die WinApi ist nix anderes als eine Programmierschnittstelle und Laufzeitumgebung. Mit dieser Api kann man Anwendungsprogrammen fr Microsoft WindowsBetriebssysteme erstellen
30.01.2009
Win32 Systemprogrammierung
1.1 Einfhrung
WinApi
Die existierenden Funktionen der WinAPI sind ausschlielich in der Programmiersprache C und Assembler geschrieben.Die Funktionen befinden sich in Bibliotheken, den sogenannten DLL-Dateien, wie beispielsweise kernel32.dll, user32.dll und gdi32.dll. Die Api kann in Verbindung mit C, C++ oder Delphi eingesetzt werden.
30.01.2009
Win32 Systemprogrammierung
1.1 Einfhrung
Versionen
Win16 war die erste API, fr die 16-Bit Versionen von Microsoft Windows. Gngiger Begriff war schlicht Windows API, wurde aber spter umbenannt in Win16, um sie von der neueren Windows API der 32-BitArchitektur unterscheiden zu knnen. Die Funktionen der Win16 API liegen hauptschlich im Kern des Betriebssystems: kernel.exe (oder krnl286.exe oder krnl386.exe), user.exe und gdi.exe. Trotz der Dateiendung exe sind diese Dateien tatschlich sogenannte Programmbibliotheken.
30.01.2009
Win32 Systemprogrammierung
1.1 Einfhrung
Versionen
Win32 ist die 32-Bit-API fr moderne Versionen von Windows. Die API besteht aus Funktionen, die, wie bei Win16, in Programmbibliotheken implementiert sind. Die Kern-DLLs von Win32 sind kernel32.dll, user32.dll und gdi32.dll. Win32 wurde mit Windows NT eingefhrt. Die Version von Win32, die mit Windows 95 ausgeliefert wurde, lief ursprnglich unter dem Namen Win32c, wobei das 'c' fr Kompatibilitt (engl. compatibility) stand, aber dieser Ausdruck wurde spter von Microsoft zugunsten von Win32 wieder verworfen.
30.01.2009
Win32 Systemprogrammierung
1.1 Einfhrung
Versionen
Win32s ist die 32-Bit-API fr die Windows 3.1x-Familie von Microsoft Windows und als solche die 32-BitErweiterung fr die ansonsten 16-bittigen Betriebssysteme. Das s steht fr Teilmenge (engl.: subset). Dabei wurden die Funktionsbibliotheken aus Windows NT nicht komplett bernommen, sondern lediglich eine Auswahl daraus, so ist beispielsweise MS Office 97 unter Windows NT 3.51 lauffhig, nicht jedoch unter Windows 3.1x. In Kombination mit Grafikschnittstellen wie OpenGL oder Video for Windows sollte damit jedoch bis zum Erscheinen von Windows 95 ein ausreichender Standard fr Heimanwender gesetzt werden.
30.01.2009 Win32 Systemprogrammierung 7
1.1 Einfhrung
Versionen
Win32 fr 64-Bit-Windows, auch bekannt unter dem Namen Win64, ist die Version der API die fr 64-BitVersionen von Windows namentlich Windows XP x64 Edition, Windows Server 2003 x64 Edition (fr AMD64 Prozessoren), Windows XP 64-Bit Edition und Windows Server 2003 fr Itanium-Serien - entworfen wurde. Bei den 64-Bit-Versionen handelt es sich nur um zwei weitere untersttzte Plattformen innerhalb der Windows-NT-Architektur, so dass sowohl die 32-Bit- als auch die 64-Bit-Version einer Anwendung aus demselben Quellcode kompiliert werden knnen.
30.01.2009
Win32 Systemprogrammierung
1.2 Dateisysteme
Dateisysteme
Das Dateisystem ist die Ablageorganisation auf einem Datentrger eines Computers. Dateien mssen gelesen, gespeichert oder verschoben werden. Fr den Menschen mssen Dateiname und computerinterne Dateiadressen in Einklang gebracht werden. Das leichte Wiederfinden und das sichere Abspeichern ist wesentlich. Das Ordnungs- und Zugriffssystem bercksichtigt die Gerteeigenschaften und ist normalerweise Bestandteil des Betriebssystems.
30.01.2009
Win32 Systemprogrammierung
1.2 Dateisysteme
1.2 Dateisysteme
30.01.2009
Win32 Systemprogrammierung
11
Systemaufrufe
Ein Systemaufruf ist eine vom Anwendungsprogrammen benutzte Methode, um vom Betriebssystem bereitgestellte Funktionalitten auszufhren.Systemaufrufe werden im Quellcode wie Bibliotheksfunktionen aufgerufen. Jedoch die Leistung solch eines Systemaufrufs wird im Kern des Betriebssystems erbracht. Ein Systemaufruf fhrt Assemblercode und C Code aus. In der folgenden Abbildung wird ein Systemaufruf schematisch dargestellt.
30.01.2009
Win32 Systemprogrammierung
12
Ablauf
In der Definition der Funktion write befindet sich C/Assemblercode diese Zeilen haben die Aufgabe den Adressraum zu wechseln und zwar vom Adressraum des Prozesses in den Adressraum des Kern's
30.01.2009
Win32 Systemprogrammierung
13
Systemaufruf Beispiele
Unix open close read write lseek stat unlink mkdir rmdir Win32 CreateFile CloseHandle ReadFile WriteFile SetFilePointer GetFileAttributes DeleteFile CreateDirectory RemoveDirectory Beschreibung Neue Datei erzeugen oder Datei ffnen Datei schlieen Daten aus einer Datei lesen Daten in eine Datei schreiben Warten auf ein Ereignis Dateizeiger bewegen Datei lschen Neues Verzeichnis erzeugen Leeres Verzeichnis lschen
30.01.2009
Win32 Systemprogrammierung
14
CreateFile
Die Funktion CreateFile erzeugt eine Datei der Rckgabewert dieser Funktion ist ein Handle womit man spter die Datei eindeutig identifizieren kann.
HANDLE CreateFile ( LPCTSTR lpFileName, /*Name der Datei*/ DWORD dwDesiredAccess, /*Lesen, Schreiben, Beides*/ DWORD dwShareMode, /*Share Modus fr Prozesse*/ [LPSECURITY_ATTRIBUTES lpSecurityAttributes,] DWORD dwCreationDisposition, /*berschreiben, ffnen...*/ DWORD dwFlagsAndAttributes, /*Schreibgesch., Versteckt*/ [HANDLE hTemplateFile]);
30.01.2009
Win32 Systemprogrammierung
15
ReadFile
Die Funktion ReadFile liest aus einer gegebenen Datei mithilfe eines HANDLE's.
BOOL ReadFile ( HANDLE hFile, /*Das Objekt das gelesen werden soll*/ LPVOID lpBuffer,/*Buffer*/ DWORD nNumberOfBytesToRead, /*Anzahl Max. Bytes*/ LPDWORD lpNumberOfBytesRead, /*Wirkl. gel. Bytes*/ [LPOVERLAPPED lpOverlapped]);
30.01.2009
Win32 Systemprogrammierung
16
CloseFile
Die Funktion CloseFile schliet eine Datei.
BOOL CloseFile (HANDLE hFile);
30.01.2009
Win32 Systemprogrammierung
17
Lese Beispiel
#include<windows.h> #define SOURCE source.txt #define MAXREADSIZE 1024 int main(int argc, char **argv[]) { HANDLE hread; DWORD readsize; char buffer [MAXREADSIZE]; hread = CreateFile(SOURCE, GENERIC_READ, 0, NULL,OPEN_EXISTING, 0, NULL); /*Mgliche Fehler abfangen*/ ReadFile (hread, buffer, MAXREADSIZE, &readsize, NULL); /*Mgliche Fehler abfangen*/ printf(%s, buffer); CloseFile(hread);
30.01.2009
Win32 Systemprogrammierung
18
1.4 Mutex
Mutex
Mutex bedeutet Wechselseitiger Ausschluss (mutual exclusion).Ein Mutex ist nix anderes als eine Gruppe von Verfahren mit denen das Problem des kritischen Abschnitts gelst wird.Damit wird verhindert, dass nebenlufige Prozesse gleichzeitig oder zeitlich verschrnkt gemeinsam genutzte Datenstrukturen unkoordiniert verndern. Zu dieser Gruppe gehren zB. Semaphore, Monitore, Lock.
30.01.2009
Win32 Systemprogrammierung
19
File Locking
Das File Locking ist einfaches Prinzipe das folgendermaen vorgeht nach dem dem ffnen einer Datei fr andere automatisch gesperrt. Es ist notwendig damit zwei Nutzer nicht gleichzeitig eine Datei manipulieren.Es kann immer nur ein Anwender bzw. immer nur ein Anwendungsprogramm zu einer Zeit die Datei manipulieren. File Locking wird in Netzwerkumgebungen oder auf multitaskingfhigen Systemen wie beispielsweise Windows-Rechnern eingesetzt
30.01.2009
Win32 Systemprogrammierung
20
LockFile
Die WinApi stellt die Funktionalitt fr das File Locking zur Verfgung mit der Methode LockFile kann man eine ganze Datei oder bestimmte Abschnitte in Bytes fr andere Prozesse sperren.
BOOL WINAPI LockFile( HANDLE hFile, /*Datei*/ DWORD dwFileOffsetLow, /*Offset*/ DWORD dwFileOffsetHigh, /*Offset*/ DWORD nNumberOfBytesToLockLow, /*Lock bytes*/ DWORD nNumberOfBytesToLockHigh /*Lock bytes*/ );
30.01.2009
Win32 Systemprogrammierung
21
UnlockFile
Natrlich muss die gesperrte Datei bzw. der Abschnitt wieder fr andere Prozesse zugnglich sein dafr gibts die Funktion UnlockFile sie besitzt dieselben argumente wie die Funktion LockFile.
BOOL WINAPI UnlockFile( HANDLE hFile, /*Datei*/ DWORD dwFileOffsetLow, /*Offset*/ DWORD dwFileOffsetHigh, /*Offset*/ DWORD nNumberOfBytesToUnlockLow, /*Unlock bytes*/ DWORD nNumberOfBytesToUnlockHigh /*Unlock bytes*/ );
30.01.2009
Win32 Systemprogrammierung
22
/* Datei ffnen*/ /* Datei lesen*/ /* Mehrfache Lesen*/ /* Security Atrribut wird nich gebraucht */ /* ffnen oder erstellen*/ /* Normale Datei*/ /* Kein Template*/
Inhaltsverzeichnis
Kapitel 2
1. Windows Registry 2. Fehlerbehandlung 3. Windows Sockets
30.01.2009
Win32 Systemprogrammierung
24
Registry
Zentrale, hierarchische Datenbank fr Applikations- und Konfigurationsinformationen Registry-Editor wird durch den regedit Befehl geffnet auf der Kommandozeile Zugriff durch Schlssel Programme kommunizieren mit der Registry durch Registry API Funktionsaufrufe Registry-Programmierung hnlich zur Dateiverarbeitung
30.01.2009
Win32 Systemprogrammierung
25
Registry
Registry enthlt folgende Informationen:
Betriebssystem-Versionsnr., Build-Nr. und registrierte User hnliche Informationen fr jede installierte Applikation Hardware-Informationen ber Prozessortyp, Anzahl an Prozessoren, Arbeitsspeicher, etc. Benutzerspezifische Informationen (Home-Verzeichnis, bevorzugte Anwendungen) installierte Services Mappings von Dateiendungen zu deren ausfhrbaren Programmen und Mappings von Netzwerkadressen zu deren Hostnamen
30.01.2009 Win32 Systemprogrammierung 26
Registry
30.01.2009
Win32 Systemprogrammierung
27
Registry-Schlssel
HKEY_LOCAL_MACHINE Informationen ber den Rechner und darauf installierte Software HKEY_USERS Informationen ber BenutzerKonfigurationen HKEY_CURRENT_CONFIG Informationen wie Bildschirmauflsung und Schriftarten HKEY_CLASSES_ROOT Mappings von Dateiendungen zu deren Anwendung HKEY_CURRENT_USER Benutzerspezifische Informationen (Umgebungsvariablen, Drucker, ...)
30.01.2009 Win32 Systemprogrammierung 28
RegOpenKeyEx
LONG RegOpenKeyEx ( HKEY hKey,
/* Parent Key-Handle */ /* Name des Subkeys */ /* = 0 */ /* Zugriffsrechte */
REGSAM samDesired,
30.01.2009
Win32 Systemprogrammierung
30
RegOpenKeyEx Beispiel
#include <windows.h> HKEY hKey = Null; /* Schlssel ffnen */ if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, LSoftware\\Alias\\Common, 0, KEY_READ, &hKey)) { } printf(Fehler beim ffnen des Keys);
30.01.2009
Win32 Systemprogrammierung
31
RegEnumKeyEx
LONG RegEnumKeyEx ( HKEY hKey,
/* Parent Key-Handle */ /* Indexwert */
PFILETIME lpftLastWriteTime);
Win32 Systemprogrammierung
RegCreateKeyEx
LONG RegCreateKeyEx ( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTSTR lpClass,
/* = 0 */
RegCreateKeyEx Beispiel
#include <windows.h> HKEY hKey = Null; DWORD dwDisp = NULL; /* Schlssel mit Schreibrechten erzeugen */ if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_LOCAL_MACHINE, LSYSTEM\\CurrentControlSet\\Services\\EventLog\\MyLog, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dwDisp)) { } printf(Fehler beim Erzeugen des Keys);
30.01.2009
Win32 Systemprogrammierung
34
30.01.2009
Win32 Systemprogrammierung
35
RegSetValueEx
LONG RegSetValueEx ( HKEY hKey,
/* Key-Handle */ /* Name des Values */
/* = 0 */
30.01.2009
Win32 Systemprogrammierung
36
RegSetValueEx Beispiel
#include <windows.h> HKEY hKey = Null; wchar_t *value = LNew Registry Value; /* Key ffnen oder neu erzeugen */ ... /* Wert setzen */ if (ERROR_SUCCESS != RegSetValueEx(hKey, LMyValue, 0, REG_SZ, (LPBYTE) value, (DWORD) ((lstrlen(value)+1) * sizeof(TCHAR))) { } printf(Fehler beim Setzen des Wertes);
30.01.2009
Win32 Systemprogrammierung
37
RegEnumValue
LONG RegEnumValue ( HKEY hKey,
/* Parent Key-Handle */ /* Indexwert */ /* Name des Values */ /* Gre des Valuenamens */
DWORD dwIndex,
LPTSTR lpValueName,
/* reserviert */
LPDWORD lpcbData);
2.2 Fehlerbehandlung
Fehlerbehandlung
Win32 Structured Exception Handling (SEH) Exceptions, Arithmetikfehler und Systemfehler SEH Support durch Win32 Funktionen, Sprachensupport des Compilers und Run-Time Support Beispiele fr Fehlerbehandlungen: Array-Out-Of-Bound-Exceptions Pointer Dereferenzierung Division durch Null
30.01.2009 Win32 Systemprogrammierung 39
2.2 Fehlerbehandlung
Try / Except
hnlich zum gewhnlichen try-catch-Block:
__try { /* Code, der einen Fehler werfen knnte */ } __except (filter expression) { /* Fehlerbehandlung */ }
30.01.2009
Win32 Systemprogrammierung
40
2.2 Fehlerbehandlung
Filterexpressions
Filterexpression in __except Anweisung wird direkt nach Auftreten der Exception berprft normalerweise eine Konstante, eine Filterfunktion oder ein konditionaler Ausdruck, wobei immer einer der folgenden drei Typen zurckgegeben werden muss: EXCEPTION_EXECUTE_HANDLER EXCEPTION_CONTINUE_SEARCH EXCEPTION_CONTINUE_EXECUTION
30.01.2009
Win32 Systemprogrammierung
41
2.2 Fehlerbehandlung
Exceptions Beispiel 1
#include <windows.h> GetTempFileName (TempFile, ...); while (...) __try { /* Datei erzeugen */ hFile = CreateFile (TempFile, ..., OPEN_ALWAYS, ...); SetFilePointer (hFile, 0, NULL, FILE_END); /* in Datei schreiben */ WriteFile (hFile, ...); /* hier kann ein Addressierungsfehler auftreten!!! */ i = *p; ... CloseHandle (hFile); } __except (EXCEPTION_EXECUTE_HANDLER) { CloseHandle (hFile); DeleteFile (TempFile); } /* Datei am Ende immer geschlossen*/
30.01.2009 Win32 Systemprogrammierung 42
2.2 Fehlerbehandlung
Fehlercodes
DWORD GetExceptionCode (VOID); Funktion gibt Fehlercode zurck Reagieren auf bestimmte Fehlerereignisse mglich einige wichtige Fehlercodes: EXCEPTION_ACCESS_VIOLATION EXCEPTION_NONCONTINUABLE_EXECUTION EXCEPTION_INT_DIVIDE_BY_ZERO EXCEPTION_BREAKPOINT
30.01.2009 Win32 Systemprogrammierung 43
2.2 Fehlerbehandlung
Exceptions Beispiel 2
#include <windows.h> __try { ... i = j / 0; ... } __except (Filter (GetExceptionCode ())) { ... } /* Filter Funktion, die auf bestimmte Fehler DWORD Filter (DWORD ExCode) { switch (ExCode) { ... case EXCEPTION_INT_DIVISION_BY_ZERO: ... return EXCEPTION_EXECUTE_HANDLER; case ... } }
30.01.2009 Win32 Systemprogrammierung
reagiert*/
44
Windows Sockets
dienen der Interprozess-Kommunikation fast identisch zu Berkeley Sockets Initialisierung der WinSock API: int WSAStartup ( WORD wVersionRequired, LPWSADATA lpWSAData);
/* Socket Version (Minimum) */ /* Pointer zu WSADATA Struct */
30.01.2009
Win32 Systemprogrammierung
45
Sockets (TCP)
Server: binden eines Sockets an einen Port: int bind (SOCKET s, int namelen);
30.01.2009
/* Socket-Handle */ /* Adresse/Port */
Win32 Systemprogrammierung
47
Sockets - sockaddr_in
sockaddr_in Struktur bei AF_INET verwenden: struct sockaddr_in { short sin_family; u_short sin_port;
/* AF_INET */ /* Portnummer */ /* 4-Byte IP-Adresse */
/* optional */
30.01.2009
Win32 Systemprogrammierung
48
Sockets - listen
Struktur sin_addr besitzt eine Variable s_addr, die die IP Adresse speichert Bsp.: sa.sin_addr.s_addr = inet_addr (192.13.12.1); Server: Socket auf Akzeptieren von Clients vorbereiten: int listen ( SOCKET s,
/* Socket-Handle */ /* Gre der Warteschlange an Clients*/
49
int nQueueSize);
30.01.2009
Win32 Systemprogrammierung
Client: Verbindung aufbauen: int connect (SOCKET s, LPSOCKADDR lpAddr, int nAddrLen);
30.01.2009
Win32 Systemprogrammierung
Server Beispiel
#include <winsock.h> struct sockaddr_in SrvSAddr,ConnectAddr; SOCKET SrvSock, sockio; ... SrvSock = socket (AF_INET, SOCK_STREAM, 0); SrvSAddr.sin_family = AF_INET; SrvSAddr.sin_addr.s_addr = htonl (INADDR_ANY); SrvSAddr.sin_port = htons (SERVER_PORT); /* Socket an Adresse binden */ bind (SrvSock, (struct sockaddr *) &SrvSAddr, sizeof (SrvSAddr); listen (SrvSock, 5); AddrLen = sizeof (ConnectAddr); /* Client Verbindung akzeptieren*/ sockio = accept (SrvSock, (struct sockaddr *) &ConnectAddr, &AddrLen); ... /* Daten empfangen*/ ret = recv (sockio, buffer, sizeof(buffer), 0); ... closesocket (sockio);
30.01.2009 Win32 Systemprogrammierung 52
Client Beispiel
#include <winsock.h> SOCKET ClientSock; /* Socket erzeugen */ ClientSock = socket (AF_INET, SOCK_STREAM, 0); memset (&ClientSAddr, sizeof (ClientSAddr), 0); ClientSAddr.sin_family = AF_INET; ClientSAddr.sin_addr.s_addr = inet_addr (argv[1]); ClientSAddr.sin_port = htons (SERVER_PORT); /* Verbindung zu Server aufbauen */ ret = connect (ClientSock, (struct sockaddr *) &ClientSAddr, sizeof (ClientSAddr)); ... /* Daten senden */ ret = send (ClientSock, buffer, sizeof(buffer), 0); ... /* Socket und Verbindung schliessen*/ shutdown (ClientSock); closesocket (ClientSock);
30.01.2009 Win32 Systemprogrammierung 53
Inhaltsverzeichnis
Kapitel 3
1. Win32 Adressraum 2. Virtuelle Adressierung 3. Heaps 4. Memory Mapped Files 5. Bibliotheken 6. Prozesse
30.01.2009
Win32 Systemprogrammierung
54
30.01.2009
Win32 Systemprogrammierung
55
30.01.2009
Win32 Systemprogrammierung
56
30.01.2009
Win32 Systemprogrammierung
57
i l e M a p p i n i e w O f F i l e
Physical Memory
30.01.2009
Win32 Systemprogrammierung
58
30.01.2009
Win32 Systemprogrammierung
59
r o c H o o t R
e a p = H
= G
e t P
r o c e s s H (P r o c H
e a p
( );
p R
e a p A l l o c e a p = H e a p = H
e a p ); ( ); ( );
e c H
e a p C r e a t e
o d e H ( ) { = H
e a p C r e a t e
Record
h i l e
pRecorde c R
e a p A
l l o c
(R
e c H (N
e a p ); e a p );
p N o d Not allocated e }
NodeHeap Node Node Node Not allocated
= H
e a p A
l l o c
o d e H
H e a p F r e e (R e c H e a p , 0 , p R e c ); H e a p F r e e (N o d e H e a p , 0 , p N o d e ); H e a p D e s t r o y (R e c H e a p );
30.01.2009
Win32 Systemprogrammierung
H e a p D e s t r o y (N o d e H e a p );
60
30.01.2009
Win32 Systemprogrammierung
61
30.01.2009
Win32 Systemprogrammierung
62
bei bedarf gesamter freier virtueller Adressraum dwMaximumSize wird allokiert aber es wird nur dwInitialsize in der Pagefile reserviert.
Win32 Systemprogrammierung 63
30.01.2009
Win32 Systemprogrammierung
64
- dwBytes : Anmerkungen:
30.01.2009
Win32 Systemprogrammierung
65
30.01.2009
Win32 Systemprogrammierung
66
LPVOID HeapReAlloc ( HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, DWORD dwBytes );
Parameter: - NULL bei Fehler (wenn kein SHE) sonst Zeiger auf Speicherbereich der Gre dwBytes.
Handle eines Heaps (HeapCreate) HEAP_GENERATE_EXCEPTIONS, HEAP_NO_SERIALIZE, HEAP_ZERO_MEMORY (neu allokierter Speicher), HEAP_REALLOC_IN_PLACE_ONLY (Block nicht verschieben) - lpMem : Zeiger auf einen durch HeapAlloc oder HeapRelloc Anmerkungen: allokierten Speicherbereich - dwBytes : Speicher in Byte welcher reallokiert werden soll.
- hHeap: - dwFlags:
- Keine
30.01.2009 Win32 Systemprogrammierung 67
Rckgabewerte: - 0 bei Fehler (wenn kein SHE) sonst Gre des Speicherbereiches in Bytes. Parameter: - hHeap: - dwFlags: - lpMem : Handle eines Heaps (HeapCreate) HEAP_NO_SERIALIZE, Zeiger auf einen durch HeapAlloc oder HeapRelloc allokierten Speicherbereich
Anmerkungen: - Ermittelt die Gre eines Speicherbereiches eines Heaps, nicht die Gre des Heaps!
30.01.2009 Win32 Systemprogrammierung 68
30.01.2009
Win32 Systemprogrammierung
69
Win32
Beschreibung Erstellt einen Heap Lscht einen Heap Allokiert einen Speicherbereich vom Haeap Heap-Speicherbereich neu dimensionieren. HeapSpeicherbereichgre. Heap korrupiert? Heap defragmentieren Heapgre ermitteln Heap sperren (mutal exc.) Heap freigabe (mutal exc.)
70
HeapCreate HeapDestroy HeapAlloc HeapReAlloc HeapSize HeapValidate HeapCompact HeapWalk HeapLock HeapUnlock
Win32 Systemprogrammierung
Vorteile: - Ermglichen das Einblenden eines Objektes in den virtuellen Adressraum eines Prozesses. - Fr MMFs wird keine File-I/O-API bentigt - Inhalte von Datenstrukturen knnen wiederverwendet werden. - Implementierung fr Dateipuffer entfllt! - Bietet die Mglichkeit Daten mit anderen Prozessen zu teilen. - Die Auslagerungsdatei wird entlastet.
30.01.2009
Win32 Systemprogrammierung
71
30.01.2009
Win32 Systemprogrammierung
72
- dwMaximumSizeHigh : Absolute Maximalgre der MMF, MMF kann nicht darber hinaus wachsen! - dwMaximumSizeLow : Mindestgre der MMF - lpMapName: Namensraum, erlaubt den Zugriff von anderen Prozessen aus.
30.01.2009 Win32 Systemprogrammierung 73
30.01.2009
Win32 Systemprogrammierung
74
Anmerkungen:
30.01.2009
Win32 Systemprogrammierung
75
3.4 Memory-Mapped Files: Einblenden Files: HANDLE MapViewOfFile ( HANDLE hMapObject, DWORD dwAccess,
DWORD dwOffsetHigh, DWORD dwOffsetLow, DWORD cbMap); Rckgabewerte: - NULL bei Fehler sonst Startadresse der file-view. Parameter: - hMapObject: Handle eines MMF-Objektes. - dwAccess: Zugriffsrechte (Kompatibel zu MMF-Objekt whlen!) - cbMap: Gre der gemappten Region in Byte. - dwOffsetHigh, dwOffsetLow: Startadresse der View im Objekt. Anmerkungen: - cbMap = 0 => ganzes File Mappen - dwOffsetHigh und dwOffsetLow = 0 dann vom Dateianfang mappen, sonst immer ein Vielfaches von 64K whlen
30.01.2009 Win32 Systemprogrammierung 76
30.01.2009
Win32 Systemprogrammierung
77
UnmapViewOfFile
30.01.2009
Win32 Systemprogrammierung
78
30.01.2009
Win32 Systemprogrammierung
79
30.01.2009
Win32 Systemprogrammierung
80
//mydll.cpp extern "C" int summe( int a, int b ) { return a + b; } #include <stdio.h> extern "C" void _init( void ) { printf(Bibliothek geffnet } extern "C" void _fini( void ) { printf(Bibliothek geschlossen }
30.01.2009
Win32 Systemprogrammierung
83
- Beim impliziten linken ist das Einbinden der Bibliothek fr UNIX und
Windows gleich
30.01.2009
Win32 Systemprogrammierung
84
30.01.2009
Win32 Systemprogrammierung
85
dlsym
GetProcAddress
Funktionspointer ermitteln
30.01.2009
Win32 Systemprogrammierung
86
30.01.2009
Win32 Systemprogrammierung
87
// Zeiger auf die darin enthaltenen Funktionen holen: summe_pf = (pFuncSumme) GetProcAddress( DLL_Handle, "summe" );
30.01.2009
Win32 Systemprogrammierung
88
Code Global Variables Process Heap Process Resources Open Files, Heaps, Environment Block Thread 1 TLS Stack
30.01.2009
Win32 Systemprogrammierung
Rckgabewerte: - NULL bei Fehler (wenn kein SHE) sonst Zeiger auf Speicherbereich der Gre dwBytes.
30.01.2009
Win32 Systemprogrammierung
90
30.01.2009
Win32 Systemprogrammierung
91
30.01.2009
Win32 Systemprogrammierung
92
30.01.2009
Win32 Systemprogrammierung
93
- Beendet einen anderen Prozess mit all einen Threads - Ignoriert SEH komplett! - Resourcen werden nicht freigeben!
30.01.2009 Win32 Systemprogrammierung 94
- dwTimeOut: Wartezeit in Millisekunden. Rckgabewerte: 0=>blockiert nicht, INFINITE=>blockiert - WAIT_OBJECT_0: Prozess wurde beendet. - WAIT_TIMEOUT: - WAIT_FAILED: Anmerkungen: Wartezeit ist abgelaufen. Warten fehlgeschlagen (z.B.: keine SYNCHONIZE-Option gesetzt)
- Keine
30.01.2009
Win32 Systemprogrammierung
95
Parameter: - dwCtrlEvent: Beenden: CTRL_C_EVENT (Dabei: dwProcessGroup=NULL) Unterbrechen: CTRL_BREAK_EVENT - dwProcessGroup: Spezifiziert die betreffende Prozessgruppe
Anmerkungen: - Ermglicht es anderen Prozessen ihre Resourcen freizugeben bevor sie terminieren.
30.01.2009
Win32 Systemprogrammierung
96
HANDLE OpenProcess ( DWORD fdwAccess, BOOL fInherit, 3.6 Prozesse: ffnenDWORD IDProcess ); Rckgabewerte:
30.01.2009
Win32 Systemprogrammierung
98
TerminateProcess
Win32 Systemprogrammierung
int pid; pid = fork(); if(pid==0) { // Kindprozess execle ("/bin/ls", NULL); } // Wait until child process exits. int status=0; wait(&status);
30.01.2009
Win32 Systemprogrammierung
100
STARTUPINFO si; PROCESS_INFORMATION pi; // Start the child process. CreateProcess( NULL, // No module name (use command line) argv[1], // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE 0, // No creation flags NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi ) // Pointer to PROCESS_INFORMATION structure ); // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread );
30.01.2009
Win32 Systemprogrammierung
101
30.01.2009
Win32 Systemprogrammierung
103
30.01.2009
Win32 Systemprogrammierung
104
Handle 2
Not Inheritable
File B
Create File
Handle 2
Handle 3
Inheritable
File C
Inherited
Handle 3
Handle 4
Not Inheritable
File D
Create File
Handle 4
File E
Parent
Child
30.01.2009
Win32 Systemprogrammierung
105