www.mikrocontroller.net

Forum: PC-Programmierung Mutex und Timer


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wie wäre es mit KillTimer und RealeaseMutex?

MfG Spess

Autor: 3370 (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Danke für die Antworten!

Start des Timers schaut bei mir folgendermassen aus:
PKTIMER* unloadTimer = (PKTIMER*)ExAllocatePoolWithTag(NonPagedPool, sizeof(PKTIMER), 111);
KeInitializeTimerEx((PKTIMER)unloadTimer, SynchronizationTimer);

bzw. Mutex:
pDevice->send_mutex = (PRKMUTEX*)ExAllocatePoolWithTag(NonPagedPool, sizeof(PRKMUTEX), 117);
KeInitializeMutex((PRKMUTEX)pDevice->send_mutex, 0);

Aber laut winddk doku gibt es für Timer und Mutex keine Destroy funktion 
oder ähnliches?

MFG Gast

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi
Danke für die Hilfe!

Habe noch ein Problem mit Threads. Erstelle einen Thread 
folgendermassen:
HANDLE ThreadHandle = NULL;
  NTSTATUS status_thread  = STATUS_SUCCESS;
  
  status_thread = PsCreateSystemThread(&ThreadHandle ,(ACCESS_MASK)0,
                     NULL, (HANDLE)0, NULL, (void)(gl_pDevice->send), NULL);
  if(!NT_SUCCESS(status_thread))
    T.Trace(TraceInfo, __FUNCTION__"++. Send Thread not successful created.\n");
  status_thread = ZwClose(ThreadHandle);
  if(!NT_SUCCESS(status_thread))
    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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Im unteren ms-Bereich sind die Windows-Timer nicht sehr genau. Also eher 
normal.

MfG Spess

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.