Zum Inhalt springen

Debug Ausgabe in Treiber


Empfohlene Beiträge

Ich hab mir einen kleinen Testtreiber nach einer Anleitung geschrieben welcher in allen Funktion eine Debugausgabe per DbgPrint macht, zum Beispiel auch im DriverEntry Point.

Den Treiber hab ich dann mit dem WDK gebaut und mit folgendem Code geladen:

int main()
{
SC_HANDLE hSCManager;
SC_HANDLE hService;
SERVICE_STATUS ss;

hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);

printf("Load Driver\n");

if(hSCManager)
{
printf("Create Service\n");

hService = CreateService(hSCManager, "Driver1",
"Example Driver",
SERVICE_START | DELETE | SERVICE_STOP,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE,
"C:\\driver1.sys",
NULL, NULL, NULL, NULL, NULL);

if(!hService)
{
hService = OpenService(hSCManager, "Driver1",
SERVICE_START | DELETE | SERVICE_STOP);
}

if(hService)
{
printf("Start Service\n");

StartService(hService, 0, NULL);
printf("Press Enter to close service\r\n");
getchar();
ControlService(hService, SERVICE_CONTROL_STOP, &ss);

DeleteService(hService);

CloseServiceHandle(hService);

}

CloseServiceHandle(hSCManager);
}

return 0;
}[/PHP]

Obwohl der Treiber wohl geladen wird kann ich im Tool DebugView von Sysinternals keine Debugausgaben sehen.

Auch wenn ich in meinem Testprogramm den Treiber verwende erscheinen keine Debugausgaben.

[PHP]int main()
{
HANDLE hFile;
DWORD dwReturn;

hFile = CreateFile("\\\\.\\Driver1",
GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, 0, NULL);

if(hFile)
{
WriteFile(hFile, "Hello from user mode!",
sizeof("Hello from user mode!"), &dwReturn, NULL);
CloseHandle(hFile);
}

return 0;
}

Weiß jemand woran das liegen könnte?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke hat aber leider nicht geholfen. Ich hab jetzt mal DbgPrint durch DbgPrintEx ersetzt, aber leider funktioniert das entladen des Treibers nicht so richtig.

Das heißt wenn ich DeleteService aufrufe klappt das zwar, beim nächsten Aufruf von CreateService schlägt dieser aber fehl und der alte Service wird wieder per OpenService geöffnet bis ich neu gestartet habe.

Hab aber keine Lust jetzt dauernd neu zu starten also muss ich erstmal das Problem lösen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ha! Jetzt klappts :)

Ich hab mich mal an diesen Artikel Reading and Filtering Debugging Messages géhalten auch wenn ich ihn nicht 100% verstanden habe und einfach wie im Beispiel in der Registry unter Debug Print Filter den Wert IHVDRIVER 0x7ff eingetragen.

Die DbgPrintEx Aufrufe sehen jetzt so aus:

DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_MASK | 0x10, "DriverEntry Called \r\n");

und im DebugViewer werden alle angezeigt.

Außerdem lässt sich der Treiber jetzt auch dynamisch entladen nachdem ich den Rückgabetyp der Unload Funktion von void in VOID geändert habe. Ich dachte eigentlich das wär das Selbe, aber wohl doch nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...