Guybrush Threepwood Geschrieben 14. Januar 2009 Teilen Geschrieben 14. Januar 2009 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 14. Januar 2009 Teilen Geschrieben 14. Januar 2009 Der Treiber hat keine Konsole, in der deine printfs landen könnten. DbgPrint Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 15. Januar 2009 Autor Teilen Geschrieben 15. Januar 2009 Klar im Treiber hab ich natürlich auch keine printfs sondern mache das wie oben geschrieben mit DbgPrint, aber leider kommt davon nichts im DebugView an Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 15. Januar 2009 Teilen Geschrieben 15. Januar 2009 Vista? http://blogs.msdn.com/doronh/archive/2006/11/14/where-did-my-debug-output-go-in-vista.aspx Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 15. Januar 2009 Autor Teilen Geschrieben 15. Januar 2009 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 15. Januar 2009 Autor Teilen Geschrieben 15. Januar 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.