Главная страница
    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.043 c
1-1080033509
alk_none
2004-03-23 12:18
2004.04.11
creating add-ins for MS Office


3-1081435673
Wolferio
2004-04-08 18:47
2004.04.11
К предыдущему вопросу!!!


6-1079792117
Ihor
2004-03-20 17:15
2004.04.11
Delphi&amp;LAN


3-1081483877
Mery
2004-04-09 08:11
2004.04.11
Сумма в запросе


14-1082109682
Voland2000
2004-04-16 14:01
2004.04.11
Nokia 8110-forever





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский