Bonjour à toutes et tous !
Dans un programme tout simple écrit en Virtual Pascal, j'énumère tous les ports et, pour chacun d'entre eux, j'affiche les informations disponibles sur le service correspondant.
J'utilise pour cela la fonction GetServByPort, qui renvoie un pointeur vers une structure SERVENT :
Voici la déclaration de la structure SERVENT dans la MSDN : http://msdn.microsoft.com/library/de.../servent_2.asp
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 Type tTabAlias = Array [0..255] of pChar; pTabAlias = ^tTabAlias; Var pServData : pServEnt; ... Procedure AFFICHAGE_DONNEES_SERVICE (p : pServEnt); Var pAlias : pTabAlias; (* Adresses des alias *) i : Byte; (* Indice dans pAlias^ *) Begin WriteLn('Port n'#176' ',NtoHS(p^.s_Port)); WriteLn(' Nom du service : ',p^.s_Name); WriteLn(' Protocole de transport : ',p^.s_Proto); <--- PLANTAGE !!! Write(' Alias : '); pAlias := pTabAlias(p^.s_Aliases); if pAlias^[0] <> Nil then begin WriteLn(pAlias^[0]); i := 1; while (i <= 255) and (pAlias^[i] <> Nil) do begin WriteLn(' : ',pAlias^[i]); Inc(i); end; end else WriteLn; End; ... (* PROGRAMME PRINCIPAL *) ... for IntPort := 0 to 65535 do begin pServData := GetServByPort(HtoNS(IntPort),Nil); if pServData <> Nil then begin AFFICHAGE_DONNEES_SERVICE(pServData); ReadLn; end; end;
Voici sa déclaration dans l'unité WinSock de Virtual Pascal :
Presque tout fonctionne très bien : n° de port, nom du service, différents alias... sauf le nom du protocole de transport, dont l'adresse se trouve dans le champ s_Proto de la structure SERVENT.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 PServEnt = ^TServEnt; TServEnt = packed record s_name: PChar; s_aliases: ^PChar; s_port: Smallint; s_proto: PChar; end;
Lorsque j'essaye d'afficher ce nom, une violation d'accès se produit à tous les coups. Pourtant, je teste bien que le champ ne vaut pas NIL.
Je ne trouve pas ce qui peut déclencher cette exception.
Merci à celles et ceux qui voudront bien se pencher sur la question !
P.S.1. Je pose ma question d'abord sur le forum Pascal car je crains qu'il s'agisse d'un problème spécifique à ma syntaxe.
P.S.2. La syntaxe étendue est activée, l'erreur ne vient pas de là
Partager