begin process at 2012 05 29 10:09:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

IRQ_NOT_LESS_OR_EQUAL ou Freez


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

IRQ_NOT_LESS_OR_EQUAL ou Freez

lundi 6 avril 2009 à 11:41:20 | IRQ_NOT_LESS_OR_EQUAL ou Freez

deck_bsd

Membre Club
Yop à tous,


Voila je suis en plain dans la conception d'un driver, tout vas nickel apart les évènement. En fait je veu que mon driver signal a mon processus en user-mode qu'il doit aller chercher des information. Hors voila , lorsque le driver envoie fait KeSetEvent(pkEvent,0,FALSE); soit j'ai un bel écran bleu avec IRQ_NOT_LESS_OR_EQUAL ou alors le pc bloque :s . Voici les partie de code intéressentante :

Application USER MODE :

#define

IOCTL_EVENT CTL_CODE(40000, 0x804, METHOD_NEITHER, FILE_ANY_ACCESS)

HANDLE hEvent;

/* Handle de l'évènement (est passer au driver). variable global*/

Création de l'event et envoie au driver :

BOOL MakeEvent(){

DWORD dwSize = 0;

hEvent = CreateEvent(NULL,FALSE,FALSE,

"dckApEvent");

if(hEvent == NULL){

return FALSE;

}

else{

char szBuffer[50];

wsprintf(szBuffer,

"Handle cree : %X",hEvent);

MessageBox(NULL,szBuffer,

"Handle",MB_OK);

}

if(DeviceIoControl( haDevice,IOCTL_EVENT,(LPVOID)hEvent,0,NULL,0,&dwSize, NULL))

{

OutputDebugString(

"(DeviceIoControl) Reussite envoie");

return TRUE;

}

CloseHandle(hEvent);

return FALSE;

}


DRIVER :
device extension :

typedef struct _my_device_extension{
 KEVENT kEvent;
 char cEvent;
 HANDLE hProcessId;
} MY_DEVICE_EXTENSION;

variables :
HANDLE hSend;
KEVENT kEventT;
MY_DEVICE_EXTENSION* pDeviceX;
OBJECT_HANDLE_INFORMATION objHandleInfo;

Référencement :

hSend = (HANDLE) IrpStackPointeur->Parameters.DeviceIoControl.Type3InputBuffer;
         KdPrint(("(Handle reçu) %X",hSend));
         pDeviceX = g_pDeviceDck->DeviceExtension;
         if(ObReferenceObjectByHandle(hSend,GENERIC_ALL,NULL/**ExEventObjectType*/,
                KernelMode,&kEventT,&objHandleInfo) != STATUS_SUCCESS){
          KdPrint(("(ObReferenceObjectByHandle) Error."));
         }else{
          KdPrint(("(ObReferenceObjectByHandle) OK."));
          pDeviceX->kEvent = kEventT;
          pDeviceX->cEvent = 1;
          KeClearEvent(&kEventT);
          if(KeReadStateEvent(&kEventT))
           KdPrint(("Ob (0) EVENT SIGNALED"));
 }

envoie event c'est quand ce bloc s'éxécute que ça "foire" :
MY_DEVICE_EXTENSION* pDeviceX;
 PKEVENT pkEvent;
 
 pkEvent = NULL;
 pDeviceX = g_pDeviceDck->DeviceExtension;

...

if(pDeviceX->cEvent){
   KdPrint(("\n dckAlarm - Envoie signal (SIM)"));
   pkEvent = &pDeviceX->kEvent;
   if(KeReadStateEvent(pkEvent))
    KdPrint(("dckAlarm (1) EVENT SIGNALED"));
   KeSetEvent(pkEvent,0,FALSE);
   KdPrint(("\n dckAlarm - KeSetEvent OK"));
   if(KeReadStateEvent(pkEvent))
    KdPrint(("dckAlarm (2) EVENT SIGNALED"));
   KeClearEvent(pkEvent);
   KdPrint(("\n dckAlarm - KeClearEvent OK"));
  }


Merci d'avance pour votre aide.
++
deck_bsd
___________________________________
[ [ Lien ]]
lundi 6 avril 2009 à 14:00:58 | Re : IRQ_NOT_LESS_OR_EQUAL ou Freez

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Tu as appelé KeInitializeEvent avant ton KeSetEvent ?

lundi 6 avril 2009 à 14:45:30 | Re : IRQ_NOT_LESS_OR_EQUAL ou Freez

deck_bsd

Membre Club
Non, mais aparement je n'en ai pas besoin vu que j'ai créé l'event dans l'application utilisateur et que j'utilise ObReferenceObjectByHandle . Faut-il tout de même l'utiliser ?

++
deck_bsd
___________________________________
[ [ Lien ]]
lundi 6 avril 2009 à 16:08:21 | Re : IRQ_NOT_LESS_OR_EQUAL ou Freez

rt15

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Ah pardon.

Deuxième éssai.

Le paramètre Object de ObReferenceObjectByHandle est un PVOID*, autrement dit un pointeur sur un pointeur.

typedef struct _KEVENT {
  DISPATCHER_HEADER  Header;
} KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;

Mais tu lui passe l'adresse d'un KEVENT, autrement dit, un PKEVENT. Alors que lui attend un PKEVENT*, l'adresse d'un pointeur sur un event. Bilan plus bas dans le code, ça fait n'importe quoi.

A ta place je changerais ma structure :

typedef struct _my_device_extension{
 KEVENT pkEvent;
 char cEvent;
 HANDLE hProcessId;

Et je la passerais directement, pas la peine de multiplier les copies :

if(ObReferenceObjectByHandle(hSend,GENERIC_ALL,NULL/**ExEventObjectType*/,
                KernelMode,&pDeviceX->pkEvent,&objHandleInfo) != STATUS_SUCCESS){

Et enfin, tout simplement :

if(pDeviceX->cEvent){
   KdPrint(("\n dckAlarm - Envoie signal (SIM)"));
   if(KeReadStateEvent(pDeviceX->pkEvent))

Toi aussi tu travailles sans filet sur les drivers ? Pas de débogueur ni rien ? Ca fait mal au fesse quand même hein ?
 kd faut deux PCs, SoftIce payant et extrèmement difficile à installer sous XP, rasta ring 0 que tu te demande si ça peut marcher... Mais j'aimerais quand même bien trouver une solution pour le prochain.
lundi 6 avril 2009 à 16:11:01 | Re : IRQ_NOT_LESS_OR_EQUAL ou Freez

rt15

Membre Club Administrateur CodeS-SourceS
Au fait, exemple ici.
lundi 6 avril 2009 à 16:11:39 | Re : IRQ_NOT_LESS_OR_EQUAL ou Freez

rt15

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Et erratum :

typedef struct _my_device_extension{
 PKEVENT pkEvent;
 char cEvent;
 HANDLE hProcessId;
lundi 6 avril 2009 à 16:33:42 | Re : IRQ_NOT_LESS_OR_EQUAL ou Freez

deck_bsd

Membre Club
Oulalaaaa bien joué le coup du pointeur de pointeur , je l'avait vraiment pas vu :s C'est rare ce genre de paramètre ^^ . Bon je peux pas tester la tout de suite car suis sous ubuntu et pas chez moi, mais dés que je rentre, je dit quoi :D

++
deck_bsd
___________________________________
[ [ Lien ]]
mardi 7 avril 2009 à 10:10:57 | Re : IRQ_NOT_LESS_OR_EQUAL ou Freez

deck_bsd

Membre Club
Yop,

Merci beaucoup c'était bien ça :p

++
deck_bsd
___________________________________
[ [ Lien ]]


Cette discussion est classée dans : handle, event, pkevent, kdprint, pdevicex


Répondre à ce message

Sujets en rapport avec ce message

Handle (enumwindows) [ par Quiske ] Bonjour tlm je voudrais que qqun face un programme disant le code de la fenetre a insere et ou je veux que son preogramme fasse une liste des fenetres le handle d'un control static? [ par blackwizzard ] comment connaitre le handle ou HWND d'une zone "Static" contenant une image en mode fenetré?merci d'avance! IMPORTANT !!!!! HANDLE [ par Sbiron ] J'aimerais savoir si il est possible d'avoir tous les types des applications , Comme en VB sa donne IEFrame pour IE, mais je veux faire sa en Cet j'ai HEEELLLLPPPP!!!!!!!!!!detruire un handle de com [ par mavric ] salut je fais un prog de com serie ds mon prog j'ouvre une com avec la fonction suivante :hcom=createfile("com2"...........puis je verifie si l'ouvert HEEELLLLPPPP!!!!!!!!!!detruire un handle de com [ par mavric ] salut je fais un prog de com serie ds mon prog j'ouvre une com avec la fonction suivante :hcom=createfile("com2"...........puis je verifie si l'ouvert Modification interactive d'une fenetre [ par DDway ] comment faire pour modifier le controle d'une fenetre (dont l'on a que le handle)ex : "transformer" une edit en richedit dans un programme en cours d' Récupérer le Handle de l'appli [ par Stoomm ] Bonjour,Explication :J'ai une classe D3Dapp qui crée la fenetre.Dans une autre classe (qui va servir a D3Dapp), j'aimerais récupérer le handle de la f lire un fichier [ par Toobad ] J'utilise GetFileSize pour me renvoyer la taille du fichier précédemment ouvert et ensuite j'appelle ReadFile en lui passant la valeur DWORD comme nbr Question : cmt récupérer le handle d'une fenêtre tty sous noyau NT ? [ par andros ] Je m'explique :........h1=FindWindow("tty","nom_de_la_fen");h2=GetWindow(h1,...);........==> ça marche sous 98 mais c'est tout on dirait.Le WinSight d handle et stdout [ par zoreol ] sa yest j'arrive a lancer le creatprocess(il fallait faire un memset).Bon bref en fait now je voudrai recuperer le stdout du handle.C possible?


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales