USB Mass Storage без прав админа
От: Mhael Беларусь  
Дата: 05.01.10 16:01
Оценка:
Дано устройство usb mass storage. Ему нужно подавать нестандартные команды, типа зашифровать и т.п. Пока реализовал через spti IOCTL_SCSI_PASS_THROUGH .
Уже создавал тут ветку по этому устройству, но тема была другая — как с ним вообще работать. Теперь работать я с ним умею, встали другие вопросы.
Вопросы к знающим людям :
1) IOCTL_SCSI_PASS_THROUGH не требует права администратора, но CreateFile на букву диска требует. Есть ли вероятность, что на имя типа \PhysicalDrive%x или \\?\storage#removablemedia#7&176630d9&0&rm#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b} (к примеру) CreateFile не понадобятся админские права? Сам попробую проверить в ближ. дни, но ответы специалистом с пояснениями очень не помешали бы.
2) Если spti все-таки нужны админские права в любом случае и никакие извращения тут не помогут, то на что мне перейти, чтобы не писать драйвер и была более-менее приличная скорость (пару метров в сек. минимум)?
3) В windows seven была запущена моя программа (общение через spti) и под правами пользователя вполне успешно пообщались с устройством. Что там такого в семерке произошло?
4) Можно ли программно отформатировать диск (например с нашего устройства), не выводя никаких сообщений юзеру? Апишных функций я пока не нашел, есть какая-то из шелла, но она, судя по описанию, вызывает стандартное окно форматирования диска
Re: USB Mass Storage без прав админа
От: ononim  
Дата: 05.01.10 16:23
Оценка:
M>Дано устройство usb mass storage. Ему нужно подавать нестандартные команды, типа зашифровать и т.п. Пока реализовал через spti IOCTL_SCSI_PASS_THROUGH .
M>Уже создавал тут ветку по этому устройству, но тема была другая — как с ним вообще работать. Теперь работать я с ним умею, встали другие вопросы.
M>Вопросы к знающим людям :
M>1) IOCTL_SCSI_PASS_THROUGH не требует права администратора, но CreateFile на букву диска требует. Есть ли вероятность, что на имя типа \PhysicalDrive%x или \\?\storage#removablemedia#7&176630d9&0&rm#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b} (к примеру) CreateFile не понадобятся админские права? Сам попробую проверить в ближ. дни, но ответы специалистом с пояснениями очень не помешали бы.
Модель безопасности NT предусматривает security check'и token vs SD только при открытии хэндла на объект. Когда хэндл получен — он имеет granted access mask и далее с ним можно делать все что в ней указано, независимо от того кто пользуется хэндлом. Так что можно к примеру открыть файл на запись из под админа, и затем передать DuplicateHandle'ом хэндл гостевому процессу и он сможет писать в этот файл пользуясь хэндлом с грантованным правом на запись.

M>2) Если spti все-таки нужны админские права в любом случае и никакие извращения тут не помогут, то на что мне перейти, чтобы не писать драйвер и была более-менее приличная скорость (пару метров в сек. минимум)?

Зачем драйвер? Сервис напишите.

M>3) В windows seven была запущена моя программа (общение через spti) и под правами пользователя вполне успешно пообщались с устройством. Что там такого в семерке произошло?

CreateFile'ом можно было открыть диск под полный доступ из под не админа? Этож п..ц. Такого не может быть.

M>4) Можно ли программно отформатировать диск (например с нашего устройства), не выводя никаких сообщений юзеру? Апишных функций я пока не нашел, есть какая-то из шелла, но она, судя по описанию, вызывает стандартное окно форматирования диска

typedef BOOLEAN (__stdcall *PFMIFSCALLBACK)(
    DWORD Command,
    DWORD SubAction,
    PVOID ActionInfo ); 

typedef VOID (__stdcall *tFormatEx)( PWCHAR DriveRoot,
               DWORD MediaFlag, PWCHAR Format,
               PWCHAR Label, BOOL QuickFormat,
               DWORD ClusterSize, PFMIFSCALLBACK Callback); 


BOOLEAN __stdcall FormatCallback(DWORD Command,
                                    DWORD SubAction,
                                    PVOID ActionInfo )
{
    printf("FormatCallback(0x%x, 0x%x)\n", Command, SubAction);
    return TRUE;
}

int _tmain(int argc, _TCHAR* argv[])
{
    HINSTANCE dll = ::LoadLibrary(L"fmifs.dll");
    if (!dll)
    {
        printf("fmifs.dll load error %u\n", GetLastError());
        return GetLastError();
    }

    tFormatEx pFormatEx = (tFormatEx)
        ::GetProcAddress(dll, "FormatEx");
    if (!pFormatEx)
    {
        printf("FormatEx ptr error %u\n", GetLastError());
        return GetLastError();
    }

    if (argc!=5)
    {
        printf("Usage: formatex drive fs label cluster\n");
        return -1;
    }

    printf("Begin formatting...\n");
    pFormatEx(argv[1], 0, argv[2], argv[3], TRUE, _ttoi(argv[4]), FormatCallback);
    printf("Complete\n");

    return 0;
}
Как много веселых ребят, и все делают велосипед...
Re[2]: USB Mass Storage без прав админа
От: Mhael Беларусь  
Дата: 06.01.10 09:58
Оценка:
Спасибо за ответ.

Здравствуйте, ononim, Вы писали:

O>CreateFile'ом можно было открыть диск под полный доступ из под не админа? Этож п..ц. Такого не может быть.


Сам проверял. Семерка конечно пиратская, поставленная только для проверки, может там какие глюки.. хз Но факт имеет место быть.

Что вы можете мне сказать про aspi и подойдет ли он мне в данном случае? Есть еще какие-нибудь технологии, сторонние библиотеки?
Re[3]: USB Mass Storage без прав админа
От: ononim  
Дата: 06.01.10 11:48
Оценка:
M>Что вы можете мне сказать про aspi и подойдет ли он мне в данном случае? Есть еще какие-нибудь технологии, сторонние библиотеки?
хз — не юзал
Как много веселых ребят, и все делают велосипед...
Re[4]: USB Mass Storage без прав админа
От: Mhael Беларусь  
Дата: 06.01.10 12:08
Оценка:
Здравствуйте, ononim, Вы писали:

M>>Что вы можете мне сказать про aspi и подойдет ли он мне в данном случае? Есть еще какие-нибудь технологии, сторонние библиотеки?

O>хз — не юзал
Ясно. А scsi port и scsi miniport ? Нашел статью Криса Касперского, где он анализировал защиту дисков в WindowsNT, так вроде и указывается, что через них можно достучаться до устройства, но потом говорится, что у автора не получилось из-за неких ограничений.. Не понятно
Re[2]: USB Mass Storage без прав админа
От: pfinkelshtein Израиль http://www.truscont.com
Дата: 13.01.10 14:47
Оценка:
Здравствуйте, ononim, Вы писали:

M>>Дано устройство usb mass storage. Ему нужно подавать нестандартные команды, типа зашифровать и т.п. Пока реализовал через spti IOCTL_SCSI_PASS_THROUGH .

M>>Уже создавал тут ветку по этому устройству, но тема была другая — как с ним вообще работать. Теперь работать я с ним умею, встали другие вопросы.
M>>Вопросы к знающим людям :
M>>1) IOCTL_SCSI_PASS_THROUGH не требует права администратора, но CreateFile на букву диска требует. Есть ли вероятность, что на имя типа \PhysicalDrive%x или \\?\storage#removablemedia#7&176630d9&0&rm#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b} (к примеру) CreateFile не понадобятся админские права? Сам попробую проверить в ближ. дни, [/ccode]

1. SPTI всегда требует прав админа. Под висту и выше также блокируется SCSIOP_WRITE* команды в случае если volume не залочен. Смотри сюда http://support.microsoft.com/kb/942448
2. Можешь сервис сделать который будет принимать твои данныe через пайп и слать их в SPTI. Можно и драйвер.
3. Семерка и виста разрешают работать с SPTI но фильтруют опкоды в CDB
4. Можно, но сложно. Изучай стоение ФАТ и НТФС, научись создавать образ пустой ФС и записывай хоть через WriteFile поблочно.
Peter Finkelshtein, skype: pfinkelshtein
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.