Сижу в DOSе. Второй винт(IDE,Primary,Slave) шумит со всех своих rpm. В BIOSе стоит shutdown, но там минимум 3 минуты ждать. Пол года терпел, ленился, потом набросал програмку. Проблема в том, что она отрубает оба винта, несмотря на начение в bl В доках есть только комментарий, bx=(02FFh for all attached secondary storage devices) Попробовал через GetPowerState(int 15,ax=530C) проверить девайсы в диапазоне 200-2FF и получил облом, CF=1 AH=09h(unrecognized device ID). Сам BIOS умеет отрубать винты "поштучно". Трейсить как он ето делает вроде как лень, подумал тут спросит. Версия powermanagmentа 1.1 Source тута, компилируется в .COM и как уже упоминалось, под DOS. .MODEL TINY .486 .CODE ORG 100h start: mov ax,5300h mov bx,00h int 15h ;в принципе нафиг не надо, так как на error я всеравно не проверяю(под дебуггером все ок) mov ax,5301h xor bx,bx int 15h ;говорим BIOSу подвинуца mov ax,530eh xor bx,bx mov cx,0101h int 15h ;говорим BIOSу что мы знаем его и его маму(в смысле до версии 1.1) ;смотрим с какими параметрами или их отсутствием нас запустили. ;В теории если запустиь прогу с параметром 0, SetPowerState будет вызван с bx=0200h(дебуггерер со мной вроде согласен). Соответственно с параметром 1, bx будет 0201h что вроде как должно соответствовать второму винту(нет, при значении 0202h всеравно вырубаются оба.). Ну а без параметров bx будет 02FFh, и оба винта засыпают, как и положено. mov ax,5307h mov bx,0200h mov bl,cs:[80h] test bl,bl jz ssetall mov bl,cs:[82h] sub bl,30h jmp zgib ssetall: xor bl,bl dec bl zgib: ;это типа skip mov cx,0003h int 15h ;и собственно Акшен! ;материмся потомучто BIOS отрубил Primary,Master заодно со рабом, тобиш Slave mov ax,5304h xor bx,bx int 15h ;отдаём BIOSу его любимые игрушки mov ah,4ch int 21h ;выходим в DOS наплевав на return code end start