Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выполнять корректно несколько раз

46K
13 февраля 2010 года
xaka
16 / / 25.11.2009
Здравствуйте, как можно сделать что бы следующий код можно было корректно выполнять не сколько раз( а то он работает корректно только один раз)
Код:
#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>
#include <winioctl.h>
#include <winbase.h>
#include <iomanip>
#include <typeinfo>
using namespace std;
#define MAX_SZ  0x69
HANDLE hDevice;DWORD lpBytesReturned;
void LockDiska(char disk)
{
    string d="\\\\.\\"; d+=disk; d+=":";
    const char *p; p=d.c_str();
   
    hDevice = CreateFile (p,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
    if (DeviceIoControl(hDevice,FSCTL_LOCK_VOLUME,NULL,0, NULL,0,&lpBytesReturned,0)) cout <<"Диск" <<disk <<"защищен\n";
    else cout << "Не удалось защитить\n";
    }
void UnLockDisk()
{
        if (DeviceIoControl(hDevice,FSCTL_UNLOCK_VOLUME,NULL,0, NULL,0,&lpBytesReturned,0)) cout <<"Защита снята\n";
}
int main()
{
    char d; cin>> d; //ВВодим имя диска
    LockDiska(d); // Защищаем
    UnLockDisk(); // Снимаем защиту
    return 0;
}


Спасибо.
307
14 февраля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: xaka
Здравствуйте, как можно сделать что бы следующий код можно было корректно выполнять не сколько раз( а то он работает корректно только один раз)
Код:
#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>
#include <winioctl.h>
#include <winbase.h>
#include <iomanip>
#include <typeinfo>
using namespace std;
#define MAX_SZ  0x69
HANDLE hDevice;DWORD lpBytesReturned;
void LockDiska(char disk)
{
    string d="\\\\.\\"; d+=disk; d+=":";
    const char *p; p=d.c_str();
   
    hDevice = CreateFile (p,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
    if (DeviceIoControl(hDevice,FSCTL_LOCK_VOLUME,NULL,0, NULL,0,&lpBytesReturned,0)) cout <<"Диск" <<disk <<"защищен\n";
    else cout << "Не удалось защитить\n";
    }
void UnLockDisk()
{
        if (DeviceIoControl(hDevice,FSCTL_UNLOCK_VOLUME,NULL,0, NULL,0,&lpBytesReturned,0)) cout <<"Защита снята\n";
}
int main()
{
    char d; cin>> d; //ВВодим имя диска
    LockDiska(d); // Защищаем
    UnLockDisk(); // Снимаем защиту
    return 0;
}


Спасибо.



в смысле несколько раз? для разных дисков?

46K
14 февраля 2010 года
xaka
16 / / 25.11.2009
да, не обязательно для разных можно и для одного.
46K
15 февраля 2010 года
xaka
16 / / 25.11.2009
Здравствуйте ещё раз, вот нашел решение на свой вопрос. Что бы данный код выполнялся корректно нужно было добавить следующее CloseHandle(hDevice); И тогда код будет выглядеть следующим образом:
Код:
#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>
#include <winioctl.h>
#include <winbase.h>
#include <iomanip>
#include <typeinfo>
using namespace std;
#define MAX_SZ  0x69
HANDLE hDevice;
void LockDiska(char disk)
{
    DWORD lpBytesReturned;
    string d="\\\\.\\"; d+=disk; d+=":";
    const char* p; p=d.c_str();
    hDevice = CreateFile (p,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
    if (DeviceIoControl(hDevice,FSCTL_LOCK_VOLUME,NULL,0, NULL,0,&lpBytesReturned,0)) cout <<"Диск" <<disk <<"защищен\n";
    else cout << "Не удалось защитить\n";

}
void UnLockDisk()
{
   
    DWORD lpBytesReturned; 
    if (DeviceIoControl(hDevice,FSCTL_UNLOCK_VOLUME,NULL,0, NULL,0,&lpBytesReturned,0)) cout <<"Разблокирован диск\n";
    CloseHandle(hDevice);
   
}
int main()
{
    char disk; cin>>disk;
    LockDiska(disk);
    UnLockDisk();
    cin>>disk;
    LockDiska(disk);
    UnLockDisk();
   
    return 0;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог