bonjour,
je recherche un éclaircissement sur le comportement suivant :
Je fait une recherche des répertoires partagés sur un réseau avec cette routine
et au moment de libérer le buffer shareinfo mon programme plante
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 procedure TForm13.Button4Click(Sender: TObject); const MAX_PREFERRED_LENGTH = -1; NERR_SUCCESS = 0; var ER : DWORD; // enries read TE : DWORD; // total entries ResHandle : DWORD; ShareInfo : PSHARE_INFO_1; p : pChar; fResult : NET_API_STATUS; i : Integer; z : DWord; hote : WideString; begin Hote:='\\'+host.Text; ResHandle := 0; fResult := NetShareEnum(PWideChar(Hote), 1, @ShareInfo, DWORD(MAX_PREFERRED_LENGTH), @ER, @TE, @ResHandle); if(fResult <> NERR_SUCCESS)then begin ShowMessage('raté'); Exit; end; p := Pointer(ShareInfo); for i := 0 to TE - 1 do begin z:=PSHARE_INFO_1(p).shi1_type; if z=0 then begin ListBox1.Items.Add(WideCharToString(PSHARE_INFO_1(p)^.shi1_remark)); ListBox1.Items.Add(WideCharToString(PSHARE_INFO_1(p)^.shi1_netname)+' '+IntToStr(z)); end; p := p + SizeOf(Share_info_1); end; NetApiBufferFree(@ShareInfo); end;
ceci dit , si je modifie le test sur z c'est a dire la codification suivante
tout se passe correctement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if PSHARE_INFO_1(p).shi1_type=0 then begin .... end;
une idée du pourquoi ? certainement une question de pointeur que des pros vont trouver évidente , mais là je sèche .
Question subsidiaire mais qui fera peut être l'objet d'un autre post
comment obtenir les informations de permissions sur un pc distant ?
car la lecture via netshareenum d'une structure SHARE_INFO_2 échoue
Partager