Hallo Wenn ich im Windows Kernel Mutex und Timer verwende wie kann ich diese dann löschen?! Habe sowohl für Mutex als auch für Timer einen Speicher mit ExAllocatPool angefordert und dachte ich kann ihn mit ExFreePool wieder freigeben! Aber dann bekomme ich Fehlermeldungen! Ist meine Denkweise falsch was den Kernel angeht? MFG Gast
Da ist eine Funktionalitaet dahinter, nicht nur RAM. Dh zuerst die Funktionalitaet stoppen. wie Spess53 schon sagte.
Hi Damit ein Programm nicht 2 mal gestartet werden kann gehen auch folgende Funktionen: Beim Start: Mutex:=CreateMutex(nil,True,MutexName); beim Beenden: CloseHandle(Mutex); MfG Spess
Hi Danke für die Antworten! Start des Timers schaut bei mir folgendermassen aus:
1 | PKTIMER* unloadTimer = (PKTIMER*)ExAllocatePoolWithTag(NonPagedPool, sizeof(PKTIMER), 111); |
2 | KeInitializeTimerEx((PKTIMER)unloadTimer, SynchronizationTimer); |
bzw. Mutex:
1 | pDevice->send_mutex = (PRKMUTEX*)ExAllocatePoolWithTag(NonPagedPool, sizeof(PRKMUTEX), 117); |
2 | KeInitializeMutex((PRKMUTEX)pDevice->send_mutex, 0); |
Aber laut winddk doku gibt es für Timer und Mutex keine Destroy funktion oder ähnliches? MFG Gast
> To disable a previously set timer object, a driver calls > KeCancelTimer. This routine removes the timer object for the > system's timer queue. Generally, the timer object is not set > to the signaled state and the CustomTimerDpc routine is not > queued for execution. However, if the timer is about to expire > when KeCancelTimer is called, expiration might occur before > KeCancelTimer has a chance to access the time queue, in which > case signaling and DPC queuing will occur. Immerhin gibt es mittlerweile wenigstens so eine Art Dokumentation des DDK, das war früher noch viel schlimmer.
hi Danke für die Hilfe! Habe noch ein Problem mit Threads. Erstelle einen Thread folgendermassen:
1 | HANDLE ThreadHandle = NULL; |
2 | NTSTATUS status_thread = STATUS_SUCCESS; |
3 | |
4 | status_thread = PsCreateSystemThread(&ThreadHandle ,(ACCESS_MASK)0, |
5 | NULL, (HANDLE)0, NULL, (void)(gl_pDevice->send), NULL); |
6 | if(!NT_SUCCESS(status_thread)) |
7 | T.Trace(TraceInfo, __FUNCTION__"++. Send Thread not successful created.\n"); |
8 | status_thread = ZwClose(ThreadHandle); |
9 | if(!NT_SUCCESS(status_thread)) |
10 | T.Trace(TraceInfo, __FUNCTION__"++. Handle for Send not successful closed.\n"); |
Leider führt er die Zeile PsCreateSystemThread gar nicht aus! Anscheinend wird es wegoptimiert?! MFG Gast
> Leider führt er die Zeile PsCreateSystemThread gar nicht aus!
Woran machst Du das fest? Wer ist "er"?
Er ist bei mir der Rechner und nachdem ich diese Zeile im Softice nicht als Breakpoint angeben kann gehe ich davon aus das der Compiler sie wegoptimiert! MFG Gast
> und nachdem ich diese Zeile im Softice nicht > als Breakpoint angeben kann gehe ich davon aus das der Compiler sie > wegoptimiert! Wenn Du einen Debug-Build machst, wird gar nichts wegoptimiert. Mal das Disassemblat angesehen?
hi also ich mach ein checked build was ja einen Debugbuild gleich kommen sollte! Muss ich für windows xp bzw server 2003 den Parameter IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, angeben? Weil eigentlich ist er optional oder kann ich ihn auf NULL setzen!? Weil egal ob er null oder eine Wert hat wird die Funktion PsCreateSystemThread nicht ausgeführt?! MFG Gast
hallo Habe Visual Studio 2005 drauf und winddk! Bin leider recht neu und würde daher gerne Fragen wie man sich das disassambly anschaut!??? Habe leider im internet nichts für mich brauchbares gefunden! MFG Gast
> würde daher gerne Fragen wie man sich das disassambly anschaut!???
a) dumpbin /disasm blafusel.sys
b) im Debugger. Das sollte Dein SoftICE ja wohl hinbekommen, daß da
nicht nur der C-Quelltext angezeigt wird.
Habe nun disasm über die Sys file laufen lassen und da zeigt er ja oben die Addressen für die jeweiligen funktionen an!? Dort zeigt er die Funktion PsCreateSystemThread gar nicht an!? Daher ist doch anzunehmen das er es wegotimiert oder? MFG Gast
Da der Compiler bei einem Debug-Build überhaupt nicht optimiert, wird auch nichts wegoptimiert. Da liegt ein anderes Problem vor. Der dumpbin-Disassembler ist recht primitiv, der ersetzt nicht die Adressen von System- oder Kernelaufrufen durch die passenden symbolischen Namen. Das aber kann resp. sollte können das von Dir verwendete SoftICE. Wenn Du das schon dazu bringst, in Deinem Code herumzusteppen, dann sollte es Dir auch möglich sein, nicht nur den C-Quelltext, sondern auch noch den zugehörigen Assemblercode bzw. eine Mischung aus beidem anzuzeigen.
Hi Ok werde es nochmals mit softice erkennen! Allerdings stellt sich mir die Frage wenn ich nun den assemblercode habe woran ich genau erkennen kann warum die eine Funktion nicht ausgeführt wird! MFG Gast
Du kannst ja erst mal versuchen, den zu den wenigen von Dir geposteten Zeilen gehörenden Assemblercode zu finden und in der Mischform (C-Source, Assembler) anzusehen. Da solltest Du den Aufruf der Funktion auch im Assemblercode sehen können. Du könntest ja auch o.g. Mischform hier mal posten, sofern es Dir möglich ist, SoftICE eine Textdatei zu entlocken.
Hallo HAbe die timer jetzt rausgehaut und stattdessen KeDelayExecutionThread() in Verwendung um eine Verzögerung von 20ms hinzubekommen! Wenn ich nun 20ms einstelle hat er aber eine Verzögerung von rund 30ms! Ist das normal? weil wenn ich 15ms einstelle geht es recht gut! Danke im vorhinein! MFG Harald
Hi Im unteren ms-Bereich sind die Windows-Timer nicht sehr genau. Also eher normal. MfG Spess
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.