Простой вопрос по USB в win32

Тема в разделе "WASM.WIN32", создана пользователем mutate, 20 мар 2006.

  1. mutate

    mutate New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2006
    Сообщения:
    5
    Всем привет.

    На асме кодил лет 8 назад последний раз.

    С виндовыми API соответственно знаком плохо.

    Но думаю если толкнете в нужном направлении, то разберусь.



    Стоит такая задача:

    Необходимо средствами виндовых API (в asm-е) правильно определить USB устройство (его код или букву устройства) затем форматнуть его и залить на него некий файл.
     
  2. kelz

    kelz New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2006
    Сообщения:
    13
    Адрес:
    Армавир
    Что значит определить? У устройства есть имя, формируемое из VID и PID производителя. Узнать его можно через Setup API. В хелпе Win32 SDK этого нет. Смотреть нужно в MSDN. Сейчас не могу сказать конкретно, потому что вчера пил холодную водку и понятное дело "простудился", а завтра дам кусок исходника, который получает имя устройства и далее работает с ним как файлом.
     
  3. mutate

    mutate New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2006
    Сообщения:
    5
    мерси! буду очень ждать

    пробовал накорябать через такую функцию:
    Код (Text):
    1.  
    2. mov ah,48h
    3. int 13h
    4.  

    Код (Text):
    1.  
    2. вот описание:
    3. NT 13 - IBM/MS INT 13 Extensions - GET DRIVE PARAMETERS
    4.         AH = 48h
    5.         DL = drive (80h-FFh)
    6.         DS:SI -> buffer for drive parameters (see #00273)
    7. Return: CF clear if successful
    8.             AH = 00h
    9.             DS:SI buffer filled
    10.         CF set on error
    11.             AH = error code (see #00234)
    12. BUGS:   several different Compaq BIOSes incorrectly report high-numbered
    13.           drives (such as 90h, B0h, D0h, and F0h) as present, giving them the
    14.           same geometry as drive 80h; as a workaround, scan through disk
    15.           numbers, stopping as soon as the number of valid drives encountered
    16.           equals the value in 0040h:0075h
    17.         Dell machines using PhoenixBIOS 4.0 Release 6.0 fail to correctly
    18.           handle this function if the flag word at DS:[SI+2] is not 0000h
    19.           on entry
    20. SeeAlso: AH=08h,AH=41h,AH=49h,MEM 0040h:0075h
    21.  
    22. Format of IBM/MS INT 13 Extensions drive parameters:
    23. Offset  Size    Description     (Table 00273)
    24.  00h    WORD    (call) size of buffer
    25.                     (001Ah for v1.x, 001Eh for v2.x, 42h for v3.0)
    26.                 (ret) size of returned data
    27.  02h    WORD    information flags (see #00274)
    28.  04h    DWORD   number of physical cylinders on drive
    29.  08h    DWORD   number of physical heads on drive
    30.  0Ch    DWORD   number of physical sectors per track
    31.  10h    QWORD   total number of sectors on drive
    32.  18h    WORD    bytes per sector
    33. ---v2.0+ ---
    34.  1Ah    DWORD   -> EDD configuration parameters (see #00278)
    35.                 FFFFh:FFFFh if not available
    36. ---v3.0 ---
    37.  1Eh    WORD    signature BEDDh to indicate presence of Device Path info
    38.  20h    BYTE    length of Device Path information, including signature and this
    39.                   byte (24h for v3.0)
    40.  21h  3 BYTEs   reserved (0)
    41.  24h  4 BYTEs   ASCIZ name of host bus ("ISA" or "PCI")
    42.  28h  8 BYTEs   ASCIZ name of interface type
    43.                 "ATA"
    44.                 "ATAPI"
    45.                 "SCSI"
    46.                 [b]"<span class='searchlite'>USB</span>"[/b]
    47.                 "1394" IEEE 1394 (FireWire)
    48.                 "FIBRE" Fibre Channel
    49.  30h  8 BYTEs   Interface Path (see #00275)
    50.  38h  8 BYTEs   Device Path (see #00276)
    51.  40h    BYTE    reserved (0)
    52.  41h    BYTE    checksum of bytes 1Eh-40h (two's complement of sum, which makes
    53.                   the 8-bit sum of bytes 1Eh-41h equal 00h)
    54. Note:   if the size is less than 30 on call, the final DWORD will not be
    55.           returned by a v2.x implementation; similarly for the Device Path info
    56. SeeAlso: #00277,#03196
    57.  


    он у меня ломается, с ошибкой "01", что такой функции нет.
     
  4. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    mutate

    во первых, винда такова не потерпит (int13h, вызванный в коде win32 приложения), что касается дос или его эмуляции, то ... в голом досе это должно работать, если биос поддерживает расширенный сервис int13h, если в эмуляции, то кто вам сказал, что ntvdm подсистема позволит на ура работать с int13h ???
     
  5. mutate

    mutate New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2006
    Сообщения:
    5
    я усе понял..

    выкрутился таким вызовом:
    Код (Text):
    1.  
    2. .data
    3. slpRootPathName db "A:\",0
    4. .code
    5. ......
    6.   invoke GetDriveType, offset slpRootPathName
    7.   mov dword ptr hDrive,eax
    8. .....
    9.  




    т.е. DRIVE_REMOVABLE я нахожу легко.

    подскажите как одной комндой его форматнуть или снести все файлы с подкаталогами, причем должно работать от win98 до XP?

    такую химеру не предлагать:

    command.com /C echo Y | format.com U: /v:AnyLabel

    т.к. бывает диск открыт,тогда так ругнется:

    ALL OPENED HANDLES TO THIS VOLUME WOULD THEN BE INVALID.

    Would you like to force a dismount on this volume? (Y/N) Cannot lock the drive. The volume is still in use.



    (не хочу возиться с FirstFile -> NextFile - DeleteFile)



    т.е. что-то типа:

    HANDLE WINAPI OpenPartition(

    HANDLE hStore,

    LPCTSTR szPartitionName

    );



    BOOL WINAPI FormatPartition(

    HANDLE hPartition

    );

    только это все для winCE и .NET =(