Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет доступа к диску, Запрет доступа к диску 
:(
    Опции темы
NikoLLa
Дата 8.1.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 13.9.2005
Где: Челябинск

Репутация: нет
Всего: нет



Товарищи! Необходимо написать прогу, которая в назначенном сеансе запрещала бы доступ на заранее определенный диск. Т.е. если я нахожусь в сеансе, допустим, Иванов то я могу попасть на этот диск, а если в сеансе Петров - нет. Объясните пожалуйста как это делается, а то я даже не знаю с какой стороны к этой проге подойти. Заранее, огромное спасибо!
PM MAIL   Вверх
JoyEx
Дата 13.1.2006, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: нет
Всего: 12



Может этот пример кода тебя выручит?!

Блокировка, например, “E” диска
Код

    TCHAR DiscLetter = (TCHAR)'E';//диск, который надо блокировать

    HANDLE hDevice = WowFsLock(DiscLetter, TRUE);

    if(hDevice){

        TCHAR msg[50] = TEXT("");
        StringCbPrintf(msg, 50 * sizeof(TCHAR), TEXT("Диск \xab%c\xbb блокирован"), DiscLetter);
        ::MessageBox (0, msg, TEXT(""), MB_OK);
        
        //CloseHandle (hDevice);
    }


Моя ф. WowFsLock
Код

#include "strsafe.h"
#include "Winioctl.h"

HANDLE WowFsLock (TCHAR DiscLetter, BOOL bLockVolume)
{
    TCHAR device[7] = TEXT("");

    StringCbPrintf(device, 7 * sizeof(TCHAR), TEXT("\\\\.\\%c:"), DiscLetter);

    HANDLE hDevice = ::CreateFile (device, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

    if(hDevice != INVALID_HANDLE_VALUE) 
    {
        DWORD dwIoControlCode = (bLockVolume ? FSCTL_LOCK_VOLUME : FSCTL_UNLOCK_VOLUME);
        DWORD dwResult = 0;

        if(!DeviceIoControl (hDevice, dwIoControlCode , NULL, 0, NULL, 0, &dwResult, NULL)){

            CloseHandle (hDevice);
            hDevice = NULL;
        }

        return hDevice;
    }

    return NULL;
}




--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
adonin
Дата 25.1.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.12.2005
Где: Новочеркасск Рост овская обл.

Репутация: 1
Всего: 5



Надёжнее всего использовать средства разграничения доступа файловой системы NTFS. Установите разрещения на диск для различных пользователей. Для этого есть АПИ (На изусть не помню, но если нужно, гляну). При этом Windows будет сама контроллировать доступ к диску гораздо надёжнее чем любой прикладной код. Установить разрешения можно и в свойствах диска.
Добавлено @ 13:14
ИМХО, если делать
Код

DeviceIoControl (hDevice, dwIoControlCode , NULL, 0, NULL, 0, &dwResult, NULL)

файл будет "залочен" - это инструмент синхронизации процессов при обращении к общим ресурсам (файлу) но никак не инструмент контроля доступа.
--------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0609 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.