Mutex und Timer

Gast #941434
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
Gast #942014
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
Persönliche Seite #942057
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.
Gast #942127
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
Gast #942279
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
Gast #942508
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
Gast #943154
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
Persönliche Seite #943194
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.
Gast #943201
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
Persönliche Seite #943258
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.
Gast #952959
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren