Pascal открытие дисковода

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Sind-blog, 24 Oct 2011.

  1. Sind-blog

    Sind-blog Хэш-крякер

    Joined:
    4 May 2011
    Messages:
    455
    Likes Received:
    114
    Reputations:
    32
    Помогите написать прогу на паскале которая открывает и закрывает дисковод
     
  2. DooD

    DooD Moderator

    Joined:
    30 Sep 2010
    Messages:
    1,173
    Likes Received:
    437
    Reputations:
    288
    насколько я помню из под доса этого не сделать.
     
    _________________________
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,704
    Likes Received:
    1,224
    Reputations:
    455
    DooD ну почему же не сделать?
    Всё можно, для этого надо изучить большую кучку исходников винды. И шагать от mciSendString и далее и так до ядра, а там до драйвера и там уже поглядеть что в какой порт пишется
     
  4. DooD

    DooD Moderator

    Joined:
    30 Sep 2010
    Messages:
    1,173
    Likes Received:
    437
    Reputations:
    288
    разве что на встроеном асме,но уж никак не на паскале.
     
    _________________________
    2 people like this.
  5. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    спомощью ioctl запрсов вполне можно сделать:
    Code:
    type
     DWORD=array [0..1] of word;
     TReqHdr=record
     Size :byte;
     SubUnit :byte;
     Command :byte;
     Status :word;
     Reserved :array[0..7] of byte;
     end;
     TIOCTL=record
     ReqHdr :TReqHdr;
     MediaDescriptor :byte;
     TransferAddress :pointer;
     DataSize :word;
     StartSector :word;
     VolID :dword;
     end;
    var
     IOCTL :^TIOCTL;
     FunctionCode :byte;
    begin
     New(IOCTL);
     FunctionCode:=0;
     With IOCTL^ do
     begin
     ReqHdr.Size:=SizeOf(TIOCTL);
     ReqHdr.SubUnit:=0;
     ReqHdr.Command:=12;
     MediaDescriptor:=0;
     TransferAddress:=@FunctionCode;
     DataSize:=1;
     StartSector:=0;
     longint(VolID):=0;
     end;
     asm
     mov ax,1510h
     mov cx,4
     mov bx,word ptr IOCTL+2
     mov es,bx
     mov bx,word ptr IOCTL
     int 2Fh
     end;
     Dispose(IOCTL);
    end.
    
    вместо 4-х в cx помещаещь номер совего сидюка
     
    #5 realcoder, 24 Oct 2011
    Last edited: 24 Oct 2011
Loading...