![]() |
SetupApi Problem mit SetupDiGetClassDevs
Ich würde gerne folgenden Code testen (Quelle:
![]() Leider erhalte ich beim Aufruf von SetupDiGetClassDevs immer einen Zugriffsfehler bei 00000000. Die Funktion ist in SetupApi deklariert. Bei der Recherche für die Ursache des Problems habe ich ein Posting gefunden, wo jemand empfiehlt eine ganz, ganz alte Version der SetupApi von Jedi zu nehmen, da dort das Problem nicht besteht. Nun habe ich aber diese alte Version nicht gefunden und auch erschließt sich mir nicht, was das Problem in der normalen bzw. aktuellen Version sein könnte. Könnte bitte jemand den Code ausprobieren und mir sagen, was das Problem sein könnte bzw. wie man das behebt? Vielen Dank.
Delphi-Quellcode:
unit test;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, SetupAPI; const GUID_DEVCLASS_NET: TGUID = '{4D36E972-E325-11CE-BFC1-08002BE10318}'; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function StateChange(NewState, SelectedItem: cardinal; hDevInfo: HDEVINFO): boolean; var PropChangeParams: SP_PROPCHANGE_PARAMS; DeviceInfoData: SP_DEVINFO_DATA; begin DeviceInfoData.cbSize := SizeOf(SP_DEVINFO_DATA); // Get handle to selected item if not SetupDiEnumDeviceInfo(hDevInfo, SelectedItem, DeviceInfoData) then begin Result := False; Exit; end; // Set the PropChangeParams structure for this item PropChangeParams.ClassInstallHeader.InstallFunction := DIF_PROPERTYCHANGE; PropChangeParams.ClassInstallHeader.cbSize := SizeOf(SP_CLASSINSTALL_HEADER); PropChangeParams.Scope := DICS_FLAG_GLOBAL; PropChangeParams.StateChange := NewState; if not SetupDiSetClassInstallParams(hDevInfo, @DeviceInfoData, PSPCLASSINSTALLHEADER(@PropChangeParams), SizeOf(PropChangeParams)) then begin Result := False; Exit; end; // Call the ClassInstaller and perform the change if not SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, @DeviceInfoData) then begin Result := False; Exit; end; Result := True; end; // ------------------------------------------------------------------------ function DisableNetAdapter: boolean; var hdi: HDEVINFO; begin hdi := SetupDiGetClassDevs(@GUID_DEVCLASS_NET, 0, 0, DIGCF_PRESENT); if cardinal(hdi) = INVALID_HANDLE_VALUE then begin Result := False; end else begin Result := StateChange(DICS_DISABLE, 0, hdi); SetupDiDestroyDeviceInfoList(hdi); end; end; // ------------------------------------------------------------------------ function EnableNetAdapter: boolean; var hdi: HDEVINFO; begin hdi := SetupDiGetClassDevs(@GUID_DEVCLASS_NET, nil, 0, DIGCF_PRESENT); if cardinal(hdi) = INVALID_HANDLE_VALUE then begin Result := False; end else begin Result := StateChange(DICS_ENABLE, 0, hdi); SetupDiDestroyDeviceInfoList(hdi); end; end; // ------------------------------------------------------------------------ procedure TForm1.Button1Click(Sender: TObject); begin EnableNetAdapter; end; // ------------------------------------------------------------------------ procedure TForm1.Button2Click(Sender: TObject); begin DisableNetAdapter; end; // ------------------------------------------------------------------------ end. |
AW: SetupApi Problem mit SetupDiGetClassDevs
Liste der Anhänge anzeigen (Anzahl: 1)
Hi, try this.
|
AW: SetupApi Problem mit SetupDiGetClassDevs
Danke, das eigentliche Problem bestand wohl darin, dass ich LoadSetupAPI vorher noch ausführen muss.
Wirklich weiter bin ich damit aber nicht. Ich müsste noch die GUID des Itnerfaces angeben, das verändert werden soll. In Deinem angehängten Projekt wird das ja irgendwie anhand der ausgelesenen Reihenfolge gemacht. Das hilft mit leider nicht sonderlich, da ich eben eine Möglichkeit brauche, ein Interface direkt mit seiner GUID anzusteuern. Da hab ich jetzt die letzten paar Stunden gesucht und experimentiert. Leider vergeblich. Kann sich das bitte jemand anschauen, und mir sagen, was ich ergänzen muss? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz