Bonjour à tous,
Pour un projet, je dois émettre et recevoir des messages via une carte réseau en mode RAW.
J’ais un code en C qui fonctionne très bien qui me sers d’exemple.
J’arrive bien à communiquer avec le driver via les fonctions de l’API CreateFile + DeviceIoControl pour initialiser la carte.
Par contre, dès que j’essais de créer un événement (via la fonction CreateEvent l’API) pour ensuite l’utiliser avec la fonction DeviceIoControl comme en C, j’ais une erreur lors de l’utilisation.
Code C qui fonctionne correctement :
Code C# ou j’ais le problème:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 ReconEvent = CreateEvent(NULL, FALSE, FALSE, NULL); bReturn = DeviceIoControl(hDevice, DIOC_WAKE_ON_RECON, &ReconEvent, sizeof(PHANDLE), NULL, 0, &ReceivedByteCount, NULL); dwReturn = WaitForSingleObject(ReconEvent, INFINITE); ResetEvent(ReconEvent); if (dwReturn == WAIT_OBJECT_0) { uiRecon++; }
J’obtiens l’erreur suivante après l’appel de la fonction DeviceIoControl de l’API :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 IntPtr ReconEvent = winAPI.CreateEvent(IntPtr.Zero, false, false, null); bool bReturn; uint ReceivedByteCount = 0; bReturn = winAPI.DeviceIoControl(_hDevice, DIOC_WAKE_ON_RECON(), ReconEvent, (uint)Marshal.SizeOf(ReconEvent), IntPtr.Zero, 0, ref ReceivedByteCount, IntPtr.Zero); uint Return = winAPI.WaitForSingleObject(ReconEvent, new winAPI().INFINITE); winAPI.ResetEvent(ReconEvent); if (Return == new winAPI().WAIT_OBJECT_0) { _ReconCounter ++; }
Alors que j’ais bien une valeur de retour après la fonction CreateEvent.Tentative de référence à un jeton qui n'existe pas. (Exception de HRESULT : 0x800703F0)
Je coince sur le problème depuis plusieurs jours.
Merci d'avance pour vos réponses.
Partager