Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Запрет доступа к диску


Автор: NikoLLa 8.1.2006, 11:33
Товарищи! Необходимо написать прогу, которая в назначенном сеансе запрещала бы доступ на заранее определенный диск. Т.е. если я нахожусь в сеансе, допустим, Иванов то я могу попасть на этот диск, а если в сеансе Петров - нет. Объясните пожалуйста как это делается, а то я даже не знаю с какой стороны к этой проге подойти. Заранее, огромное спасибо!

Автор: JoyEx 13.1.2006, 23:15
Может этот пример кода тебя выручит?!

Блокировка, например, “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;
}


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

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

файл будет "залочен" - это инструмент синхронизации процессов при обращении к общим ресурсам (файлу) но никак не инструмент контроля доступа.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)