Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизEnable disk / Disable disk в Device Manager. HELP!! Найти похожие ветки
← →
незнайка © (2004-02-04 12:13) [40]ВО!! Все получилось :)) разгребусь с состальнм и кину кусок программы если интересно.. :)
← →
Незнайка © (2004-02-05 13:57) [41]Ну вот функция по отключению диска.. немного коряво, но.. :)
procedure TMainForm.DisableHDD(str: string);
var
PSP_DevInfoData : TSPDevInfoData ;
devInfoData : TSPDeviceInterfaceData ;
DeviceInterfaceDetailData : PSPDeviceInterfaceDetailData ;
pcp : TSPPropChangeParams ;
DevHandle : THandle ;
DeviceInterfaceData : TSPDeviceInterfaceData ;
BytesReturned : dword ;
hInfo : HDEVINFO ;
pClassGuid : Pointer ;
Required : DWORD ;
devIndex : DWORD ;
Success, Success1 : LongBool ;
ID : pchar ;
position : integer ;
const DISK_DRIVE_GUID : TGUID = "{53f56307-b6bf-11d0-94f2-00a0c91efb8b}" ;
const IDSize : DWORD = 512 ;
begin
if not LoadSetupAPI then exit;
DevIndex := 0;
pClassGuid := @DISK_DRIVE_GUID;
hInfo := SetupDiGetClassDevs(pClassGuid,Nil,0,DIGCF_PRESENT OR DIGCF_DEVICEINTERFACE);
repeat
devInfoData.cbSize := SizeOf(TSPDeviceInterfaceData);
Success := SetupDiEnumDeviceInterfaces(hInfo,nil,DISK_DRIVE_GUID,DevIndex,devInfoData);
if Success then
begin
DeviceInterfaceDetailData := nil;
BytesReturned := 0;
Success1 := SetupDiGetDeviceInterfaceDetail(hInfo,@devInfoData,nil,0,@BytesReturned,nil);
if (BytesReturned <> 0) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then
begin
DeviceInterfaceDetailData := AllocMem(BytesReturned);
DeviceInterfaceDetailData.cbSize := sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A);
PSP_DevInfoData.cbSize := sizeof(SP_DEVINFO_DATA);
Success1 := SetupDiGetDeviceInterfaceDetail(hInfo, @devInfoData, DeviceInterfaceDetailData, BytesReturned, @BytesReturned, @PSP_DevInfoData);
end;
if not Success1 then
begin
ShowMessage("Ошибка при получении InterfaceDetailData");
FreeMem(DeviceInterfaceDetailData);
Exit;
end;
GetMem(ID,IDSize);
setupDiGetDeviceInstanceId(hInfo,@PSP_DevInfoData,ID,IDSize,@BytesReturned);
// Т.к. получаю путь к диску(str) через NativeAPI то приходиться менять символы "\" на "#"
while pos("\",ID) <> 0 do
begin
position := pos("\",ID);
ID[position-1] := "#";
end;
// Если str и HardwareID, полученные через SetupDi* совпадают, то отключаем диск
if pos(UpperCase(ID),UpperCase(str)) <> 0 then
begin
PSP_DevInfoData.cbSize := sizeof(SP_DEVINFO_DATA);
pcp.ClassInstallHeader.cbSize := sizeof(SP_CLASSINSTALL_HEADER);
pcp.ClassInstallHeader.InstallFunction := DIF_PROPERTYCHANGE;
pcp.StateChange := DICS_DISABLE;
pcp.Scope := DICS_FLAG_CONFIGSPECIFIC;
pcp.HwProfile := 0;
if SetupDiSetClassInstallParams(hInfo,@PSP_DevInfoData,@pcp.ClassInstallHeader,sizeof(pcp)) then
SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hInfo,@PSP_DevInfoData);
end;
FreeMem(ID);
end;
Inc(DevIndex);
FreeMem(DeviceInterfaceDetailData);
until not Success;
SetupDiDestroyDeviceInfoList(hInfo);
end;
← →
незнайка © (2004-02-05 14:24) [42]To Alex Konshin:
> Ну я не знаю, что там должно быть, но если ты ожидаешь что-то
> вроде "\Device\Ide\IdeDeviceP1T0L0", то опять-таки это легко
> достается через Native API, собственно это и есть значение
> того симлинка из "\GLOBAL??".
Кстати говоря.. попытался я это значение("\Device\Ide\IdeDeviceP1T0L0") вытащить.. неполучилось :) К полям Name и Type без проблем, а вот значение....
← →
Alex Konshin © (2004-02-06 01:17) [43]Ну давно это было, но я не помню каких-то проблем.
Как пытался?
Страницы: 1 2 вся ветка
Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.049 c