Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.029 c
1-1080138321
HydraMarat
2004-03-24 17:25
2004.04.11
Как получить указатель на public свойства/методы


7-1080203192
ламерламер
2004-03-25 11:26
2004.04.11
динамическое создание формы


7-1075581226
V10
2004-01-31 23:33
2004.04.11
не открываются новые окна в IE


3-1081478539
Лоднев Дмитрий
2004-04-09 06:42
2004.04.11
Как сработать с БД SQL-сервера если сервер не запущен?


14-1079088621
Странник Вселенной
2004-03-12 13:50
2004.04.11
О выздоровлении от РАКА