т.е. был вызов Код (Text): invoke DefineDosDevice, DDD_RAW_TARGET_PATH, addr Path, $CTA0("\\Device\\MyDriver") где Path - имя диска ('D:',0) Все корректно создалось, ну и работает дальше. В какой-то момент понадобилось получить это самое название диска (Path = 'D:',0), зная '\Device\MyDriver'. Т.е., совсем по-идиотски выражаясь, как по третьему параметру DefineDosDevice() получить второй? Известно, что для одного драйвера создается только один диск. Жду любой помощи.
Эх, я дурак. Разобрался. Сделал перебор от 'A' до 'Z' (можно конечно и используя GetLogicalDrives, но да не в том суть), для каждой буквы вызываю QueryDosDevice, где первый параметр соответственно диск (A:, B:, ...), второй буфер. Если функция отработала успешно, то сравниваю содержимое буфера с нужной мне строкой. Вот и все. Если есть варианты лучше, то готов их выслушать
Ну, суть таже. только у меня намного короче DRIVER_TARGET - что-то из '\Device\' На выходе в al - буква диска или 0 Код (Text): GetUsedDriveLetter proc LOCAL buff[1024] : BYTE LOCAL dn[4] : BYTE mov dword ptr [dn], 00003A41H ; 'A:',0,0 @@GUDL_loop: invoke QueryDosDevice, addr dn, addr buff, 1024 .IF (eax != 0) invoke szCmp, addr buff, addr DRIVER_TARGET .IF (eax != 0) ; нашел диск mov al, byte ptr [dn] ;return(eax) ret .ENDIF .ENDIF lea eax, dn inc byte ptr [eax] cmp byte ptr [eax], 'Z' jna @@GUDL_loop return(0) GetUsedDriveLetter endp