#include "Driver.h"
Funktionen | |
NTSTATUS | DriverEntry (IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath) |
Wird beim erstmaligen Laden des Treibers aufgerufen. Initialisiert den Treiber. | |
VOID | DriverUnload (IN PDRIVER_OBJECT pDriverObject) |
Wird vom PnP-Manager aufgerufen, um den Treiber zu entladen. | |
NTSTATUS | AddDevice (IN PDRIVER_OBJECT pDriverObject, IN PDEVICE_OBJECT pPdo) |
Sobald ein neues Gerät am Bus gefunden wurde, wird AddDevice aufgerufen. | |
NTSTATUS | DispPnp (IN PDEVICE_OBJECT pDo, IN PIRP pIrp) |
Wird vom PnP-Manager aufgerufen, um entsprechende PnP-Codes zu übergeben. | |
NTSTATUS | PassDownPnP (IN PDEVICE_OBJECT pDo, IN PIRP pIrp) |
Zentrale Funktion, die die Weiterleitung nach IO-Request-Packets durch den Treiberstack ermöglicht. | |
NTSTATUS | HandleStartDevice (IN PDEVICE_OBJECT pDo, IN PIRP pIrp) |
Wird aus dem Treiber heraus aufgerufen. | |
NTSTATUS | HandleStopDevice (IN PDEVICE_OBJECT pDo, IN PIRP pIrp) |
Aufruf aus dem Treiber heraus. | |
NTSTATUS | HandleRemoveDevice (IN PDEVICE_OBJECT pDo, IN PIRP pIrp) |
Aufruf aus dem Treiber heraus. | |
NTSTATUS | DispatchCreate (IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp) |
Wird direkt vom IO-Manager aufgerufen, um den Win32-Funktionsaufruf CreateHandle zu bearbeiten. | |
NTSTATUS | DispatchClose (IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp) |
Wird direkt vom IO-Manager aufgerufen, um den Win32-Funktionsaufruf CloseHandle zu bearbeiten. | |
VOID | DispatchCancel (IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp) |
Wird aufgerufen, wenn die Bearbeitung eines IRP abgebrochen wurde. | |
NTSTATUS | DispatchWrite (IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp) |
Wird für die Win32-Funktion WriteFile aufgerufen. | |
NTSTATUS | DispatchRead (IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp) |
Wird für die Win32-Funktion ReadFile aufgerufen. | |
BOOLEAN | Isr (IN PKINTERRUPT pIntObj, IN PVOID pServiceContext) |
Eigentlicher Einsprungpunkt, um einen aufgetretenen Interrupt zu bearbeiten. | |
VOID | StartIo (IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp) |
Funktion für den eigentlichen Datentransfer. | |
VOID | DpcForIsr (IN PKDPC pDpc, IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp, IN PVOID pContext) |
Wird vom IO-Manager als DPC aufgerufen. |
|
Sobald ein neues Gerät am Bus gefunden wurde, wird AddDevice aufgerufen. AddDevice dient dazu, den Gerätestack aufzubauen. Es muß also für das PhysicalDeviceObject (PDO) ein entsprechendes FunctionalDeviceObject (FDO) erzeugt werden. Außerdem ist eine "Bekanntmachung" des Gerätes in Form eines symbolischen Gerätenames erforderlich.
|
|
Wird aufgerufen, wenn die Bearbeitung eines IRP abgebrochen wurde.
|
|
Wird direkt vom IO-Manager aufgerufen, um den Win32-Funktionsaufruf CloseHandle zu bearbeiten.
|
|
Wird direkt vom IO-Manager aufgerufen, um den Win32-Funktionsaufruf CreateHandle zu bearbeiten.
|
|
Wird für die Win32-Funktion ReadFile aufgerufen.
|
|
Wird für die Win32-Funktion WriteFile aufgerufen.
|
|
Wird vom PnP-Manager aufgerufen, um entsprechende PnP-Codes zu übergeben.
|
|
Wird vom IO-Manager als DPC aufgerufen. Ist ein Interrupt aufgetreten, wird die entsprechende ISR aufgerufen. Da diese entsprechend kurz gehalten werden muß, können ausstehende Arbeiten in eine eigene Funktion ausgelagert werden, in diesem Fall DpcForIsr. Diese wird dann auf einem niedrigeren IRQL ausgeführt. Es ist dabei darauf zu achten, daß ein mehrmaliges Einfügen eines DPC-Aufrufes in die Windows-interne Warteschlange in diesem einfachen Fall nicht möglich ist. Der Aufruf dafür kann zwar mehrfach erfolgen, die Ausführung erfolgt jedoch nur einmal. Wird jedoch eine strenge 1:1 Abbildung von IoRequestDpc auf DpcForIsr gefordert, muß man einen eigenen Mechanismus implementieren.
|
|
Wird beim erstmaligen Laden des Treibers aufgerufen. Initialisiert den Treiber.
|
|
Wird vom PnP-Manager aufgerufen, um den Treiber zu entladen. Der Treiber kann noch ausstehende Arbeiten ausführen, sofern dies nötig ist. Der IRQL-Kontext ist PASSIVE_LEVEL, so dass eben auch Speicher wieder freigegeben werden kann.
|
|
Aufruf aus dem Treiber heraus.
|
|
Wird aus dem Treiber heraus aufgerufen. Um eine bessere Verteilung der Funktionalität und Wartbarkeit des Codes zu erreichen, wird der KontrollCode IRP_MN_START_DEVICE auf diese Funktion abgebildet.
|
|
Aufruf aus dem Treiber heraus.
|
|
Eigentlicher Einsprungpunkt, um einen aufgetretenen Interrupt zu bearbeiten.
|
|
Zentrale Funktion, die die Weiterleitung nach IO-Request-Packets durch den Treiberstack ermöglicht.
|
|
Funktion für den eigentlichen Datentransfer.
|