DooD ну почему же не сделать? Всё можно, для этого надо изучить большую кучку исходников винды. И шагать от mciSendString и далее и так до ядра, а там до драйвера и там уже поглядеть что в какой порт пишется
спомощью 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 помещаещь номер совего сидюка