Forum: PC-Programmierung Mutex und Timer


von Gast (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

Wie wäre es mit KillTimer und RealeaseMutex?

MfG Spess

von 3370 (Gast)


Lesenswert?

Da ist eine Funktionalitaet dahinter, nicht nur RAM. Dh zuerst die 
Funktionalitaet stoppen. wie Spess53 schon sagte.

von spess53 (Gast)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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.

von Gast (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Leider führt er die Zeile PsCreateSystemThread gar nicht aus!

Woran machst Du das fest? Wer ist "er"?

von Gast (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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?

von Gast (Gast)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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.

von Gast (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.