[Drivers/C++]Spontane reset bij aanroep Createfile

Pagina: 1
Acties:

  • superboer
  • Registratie: September 2001
  • Laatst online: 15-08 23:39
Wij zijn bezig met de ontwikkeling van een WDM/NDIS-driver >:)

Om via createfile een handle te krijgen naar de driver heb ik een named device object en een symbolic link aangemaakt via NdisMRegisterDevice. Na het aanroepen van CreateFile vindt er een spontane reset plaats. :?
(Dus zodra de code deze statement bereikt zal de PC resetten)
code:
1
Adapter=CreateFile("\\\\.\\Drivernaam", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0);

Iemand enig idee hoe dit probleem veroorzaakt word en opgelost kan worden ?
Logischerwijs lijkt me het probleem in de driver te zitten, maar waar ? en hoe ?

Geen fan van ............. ! Zelfs geen voetbalfan ! Dus kappe nou ....... !


Verwijderd

ook op andere PC's?

  • superboer
  • Registratie: September 2001
  • Laatst online: 15-08 23:39
Op dinsdag 04 juni 2002 13:26 schreef fladder het volgende:
ook op andere PC's?
We hebben maar 1 'Test'-PC tot de beschikking, we hebben dit
euvel dus nog niet op andere PC's getest.
Maar omdat dit probleem zich alleen voordoet bij onze driver, lijkt mij dat het niet aan de PC ligt!
Stel we zouden iets doen als :
code:
1
adapter=CreateFile("\\\\.\\COM1 ...............blabla);

Dan doet ie het wel gewoon !

Geen fan van ............. ! Zelfs geen voetbalfan ! Dus kappe nou ....... !


  • Belgar
  • Registratie: Januari 2002
  • Laatst online: 17-08 22:31

Belgar

Archmaster ranzige code..

illegale tekens in de drivernaam? meer dan 8 characters? Zou een simpel probleem kunnen zijn.

...Als het maar werkt


Verwijderd

Het lijkt me dat er in dat geval een fout zit in de routine die het systeem aanroept in je driver zodra CreateFile() wordt aangeroepen?
Ik weet niet precies hoe dat zit bij WDM drivers, maar 't zal vast lijken op 't oude NT systeem. Bij het aanmaken van je device object geef je een tabel mee met dispatchers voor IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_CREATE en dat soort dingen. Het systeem roept die aan, en als je daar wat fout in doet krijg je inderdaad mooie blauw gekleurde schermen of spontane reboots...

  • superboer
  • Registratie: September 2001
  • Laatst online: 15-08 23:39
Op dinsdag 04 juni 2002 13:53 schreef Belgar het volgende:
illegale tekens in de drivernaam? meer dan 8 characters? Zou een simpel probleem kunnen zijn.
Dit is het in elk geval ni ! (ik bedoel illegale tekens en > 8 chars, niet dat het geen simpel probleem kan zijn :) )
Het lijkt me dat er in dat geval een fout zit in de routine die het systeem aanroept in je driver zodra CreateFile() wordt aangeroepen?
Ik weet niet precies hoe dat zit bij WDM drivers, maar 't zal vast lijken op 't oude NT systeem. Bij het aanmaken van je device object geef je een tabel mee met dispatchers voor IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_CREATE en dat soort dingen. Het systeem roept die aan, en als je daar wat fout in doet krijg je inderdaad mooie blauw gekleurde schermen of spontane reboots...
In onze dispatch routine (dus de routine die wordt aangeroepen bij een CreateFile aanroep) return ik gewoon STATUS_SUCCESS, gewoon om te testen. Ik weet niet eens of dit uberhaupt wel mag (lijkt me wel).

:'(

Geen fan van ............. ! Zelfs geen voetbalfan ! Dus kappe nou ....... !


Verwijderd

Uit de DDK documentatie:
Many device and intermediate drivers merely set STATUS_SUCCESS in the I/O status block of the IRP and complete the create request.
Je zult dus iets meer moeten doen dan alleen STATUS_SUCCESS returnen. Je krijgt de IRP binnen en het systeem wil er van af. Je zult het systeem dus moeten vertellen dat je er klaar mee bent door de IRP te completen.

Je zult dus in ieder geval de volgende code moeten toevoegen aan je dispatcher:
code:
1
2
3
4
// Complete the request with success status
//
Irp->IoStatus.Status = STATUS_SUCCESS;
IoCompleteRequest(Irp, IO_NO_INCREMENT);

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 06-09 22:39
Ik zou zeggen, hang je debugger aan het testsysteem en debuggen maar. Met deze info( of liever gebrek aan info ) is niet te zeggen waar de fout zit.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1