Ich muss meine vorherige Info leicht abändern - denn das Verhalten hat sich nicht mit Windows 8 geändert...
Das Verhalten gab es schon mit Windows Vista und auch mit Windows 7. Es dürfte also mehr Faktoren geben als nur dem Registry Key und eine aktivierte
UAC wann es sich so verhält wie du es bereits von Windows 8/8.1 kennst!
Ich würde jedenfalls davon abraten dem ganzen einem Windows 8 Check o.ä. zu verpassen.
Aus meiner Sicht arbeitet "WNetEnumResource" nach wie vor wie es sein soll (Es listet nämlich die Netzlaufwerke genauso auf wie es z.B.: ein TFileOpenDialog machen würde)
Anderes Szenario - gleiches Problem...
UserA ist kein Administrator, und er macht einen rechtsklick auf dein Programm -> "Als Administrator ausführen..." -> nun gibt er die Credentials von UserB (der Administrator ist) ein -> Das Programm startet mit den Rechten von UserB -> In dem Fall wirst du die Laufwerke von UserA ebenfalls nicht sehen - es sei denn du berücksichtigst exakt dieses Szenario.
Unabhängig von dem Problem, wirst du noch in ganz andere Probleme mit
UAC laufen wenn du nicht im vorhinein
UAC-Aware programmierst.
Falls du ausschließlich die Laufwerke des Benutzers anzeigen lassen willst (und nicht darauf mit dem Laufwerksbuchstaben zugreifen musst) könntest du folgende Quick&Dirty Routine verwenden:
Code:
procedure GetUserNetDrivesPerReg(var LaufWerke_Lokal: TStrings; LaufWerke_Remote: TStrings);
var i: Integer;
var Reg: TRegistry;
var ValidEntry: Boolean;
begin
Reg := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('Network',False) then begin
Reg.GetKeyNames(LaufWerke_Lokal);
Reg.CloseKey;
for i := Pred(LaufWerke_Lokal.Count) downto 0 do begin
ValidEntry := False;
if Reg.OpenKey('Network\'+LaufWerke_Lokal[i],False) then begin
if Reg.ValueExists('RemotePath') then begin
LaufWerke_Remote.Add(Reg.ReadString('RemotePath'));
LaufWerke_Lokal[i] := LaufWerke_Lokal[i]+':';
ValidEntry := True;
end;
Reg.CloseKey;
end;
if not ValidEntry then LaufWerke_Lokal.Delete(i);
end;
end;
finally
Reg.Free;
end;
end;