begin process at 2012 02 12 13:32:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Driver

 > 

Requêtes IRPs


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

Requêtes IRPs

mardi 19 juin 2007 à 19:45:35 | Requêtes IRPs

Taron31

Membre Club
Bonjour, j'aimerais savoir comment il est possible d'envoyer des IRPs à un driver avec IOCallDriver. Je sais qu'il faut spécifier le PDEVICE_OBJECT contenant le driver object du driver en question, mais comment "sélectionner" la fonction driver que l'on souhaite appeler ? avec la structure IRP ?

Par exemple, avec le driver de système de fichier NTFS, IOCallDriver appelle ce driver avec un certain IRP, contenant entre autre le FILE_OBJECT dont on souhaite récupérer un handle, mais comment appeler spécifiquement la fonction NtfsFsdCreate ? (afin de récupérer le handle) ?

Et aussi, comment définir ces fonctions dans le driver, faut-il encore les spécifier dans DriverObject->MajorFunctions ??

Merci.



vendredi 19 septembre 2008 à 16:46:10 | Re : Requêtes IRPs

moulefrite

Oui c'est a specifier dans ta fonction driverEntry, tu défini tes callback, mais c'est le ressourceManager qui se charge de t'envoyer les différents IRPs.

Tu peu interagir sur tes IRP, en ajoutant dans driverEntry le callBack suivant :

DriverObject->MajorFunction [IRP_MJ_DEVICE_CONTROL] = functionCtrl;

ou
DriverObject->MajorFunction [IRP_MJ_DEVICE_INTERNAL_CONTROL] = functionIoctl;

Par la suite si tu veu faire appel à ces callBack :

Exemple d'IOCTL :

#define IOCTL_SEND_DEVICE_INT    CTL_CODE(FILE_DEVICE_UNKNOWN,1003,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA)


tu peu prendre l'exemple suivant :

sendIrp(PDEVICE_OBJECT)
{

NTSTATUS   ntStatus;
IO_STATUS_BLOCK   ioStatus;
KEVENT   event;
PIO_STACK_LOCATION   irpNextStack;

// On crée un IRP
        irp = IoBuildDeviceIoControlRequest(
            IOCTL_SEND_DEVICE_INT, // Tu specifie l'IOCTL à utiliser
            SlotConnected,  // type PDEVICE_OBJECT ( driver de niveau inférieur)
            BufferLocalInterrupt, // data à transmettre  
            LengthLocal, // longueur Data
            BufferLocalInterrupt, // Buffer en sortie
            LengthLocal,      // Longueur en sortie
            FALSE,
            &event,
            &ioStatus
            );

// On récupère le contenu du pointeur sur la pile suivante
irpNextStack = IoGetNextIrpStackLocation(Irp);

// On précise quelle fonction callBack est visé.
irpNextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;

// On envoi au driver de niveau inférieur
ntStatus = IoCallDriver(SlotConnected, Irp);

//  ....     Traitemen retour etc....

return ntstatus;
}

Ensuite coté fonction callback :

NTSTATUS
functionIoctl(
PDEVICE_OBJECT DeviceObject,
PIRP                           Irp
)
{

    PIO_STACK_LOCATION irpStack;
    NTSTATUS                           ntStatus;

// Récupere le contenu du pointeur sur la pile courrante
IrpStack = IoGetCurrentIrpStackLocation(Irp);

switch ( irpStack->Parameters.DeviceIoControl.IoControlCode)
{
    case IOCTL_SEND_DEVICE_INT: // On retrouve l'IOCTL crée au dessus et pour lequel on souhaite effectuer                                                                   //un traitement

          break;

    default :
       Irp->IoStatus.Information = 0;

       break;
}

END:

IoCompleteRequest (Irp, IO_NO_INCREMENT);

return ntStatus;

}


Voila j'espere que c'est assez claire.

            


Cette discussion est classée dans : driver, requêtes, object, irps, iocalldriver


Répondre à ce message

Sujets en rapport avec ce message

URGENT : Infos sur " Device Driver Kits (DDK et SDK) "??????? [ par irokoy ] Je cherche a developper un driver de port serie virtuel.D'apres les infos que j'ai trouve, il faut creer un fichier ".vxd" qui va gerer le flux de don Comment ça marche un driver ? [ par Xaviou ] Salut.Je suis à la recherche d'un code permettant de créer un driver pour une imprimante "virtuelle".Je cherche an fait à créer une telle imprimante p driver sous windows [ par punch95 ] j'ai besoin d'un exemple de driver sous windows car je veux faire un driver pour une liaison i2c merci de me l'envoyer .oliviervernet95@hotmail.com un exemple de driver de webcam [ par ludou ] ben voilà je voulais juste savoir si quelqu'un pouvait me donner un exemple de code tout simple de driver de webcam ou un site qui en propose.bien à v manipuler les graphes et requêtes Sql,Oracls [ par bebeco ] Bonjour, je voudrai ci possible des codes sources qui effectuent toutes les opérations concernant les graphes. Par ailleurs je souhaiterai avoir Comment activer et desactiver un driver sous builder [ par kelsey ] Je cherche divrses methode pourb activer et desactiver le driver d'une carte!Merci d'avance! Developpement driver imprimante reseau DDK VC++ 6.0 Win 2000 Pro [ par samuelm ] Bonjour,J'aimerais avoir des info sur comment créer un driver d'imprimante pour Win 2000 avec le DDK et VC++ 6.0- Je pense partir de l'exemple genprin Récupérer un event d'un object activex [ par Bilock ] Bonjour,J'ai un projet win32 dans lequel j'ai intégré un object activeX (flash.ocx) à l'aide de la fonction #import...Aujourd'hui, j'ai des difficulté Comment dois-je faire ? [ par michelmt ] Salut ,je voudrais demandé a mon prog.. de vérifier si il y a une object (classe"CTable")a l'endoit ou il va dessiné et si ouiboujé le nouvelle object pilote pour Scanner [ par othland ] salut!pouverz vous me donner un lien ou je trouve le driver du scanner VUEGO 310s (un Driver qui marche) parec que j'ai trouvé un lien, mais j'ai pas


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,484 sec (4)

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