Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
14-1081918872
New_user
2004-04-14 09:01
2004.04.11
Изменение работы кнопки "Пуск"


1-1079822293
НерВ
2004-03-21 01:38
2004.04.11
Автозагрузка приложения


1-1082748935
Demi
2004-04-23 23:35
2004.04.11
Проблема с типом PAnsiChar.


1-1080308930
Dysan
2004-03-26 16:48
2004.04.11
avi из ресурса


7-1079357186
DuchmanSoft
2004-03-15 16:26
2004.04.11
Приоритет приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский