Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

Проверяем значение младшего номера устройства (должно быть равно 0) и режим открытия устройства (чтение/запись):

if (MINOR(inode->i_rdev) != 0) return -ENODEV;

if ((file->f_mode & 1) != 1) return -EBUSY;

Обнуляем структуру для хранения ключевой информации:

memset(&keys,0,sizeof(struct key_info));

Сбрасываем флаг наличия ключевой информации в БКИ:

key_enable = 0;

Устанавливаем счетчик использования модуля и выходим из функции:

    MOD_INC_USE_COUNT;

    return 0;

}

Функция записи в устройство

В процессе записи драйверу передается структура типа struct key_info, содержащая ключевую информацию.

static ssize_t write_gost(struct file *file, const char *buf, size_t count, loff_t *ppos)

{

Второй аргумент функции содержит блок данных, передаваемых драйверу для обработки. Третий аргумент – размер этого блока. Проверяем размер блока:

if (count!=sizeof(struct key_info)) return -EINVAL;

Считываем передаваемый блок данных в адресное пространство драйвера (в БКИ):

copy_from_user((char *)&keys,buf,count);

Поднимаем флаг наличия ключевой информации в БКИ и выходим из функции:

    key_enable = 1;

    return count;

}

Функция закрытия устройства

Данная функция только уменьшает счетчик использования драйвера:

static int close_gost(struct inode *inode, struct file *file)

{

    MOD_DEC_USE_COUNT;

    return 0;

}

Функция выгрузки драйвера

Выгружает драйвер команда rmmod. При этом вызывается функция cleanup_module:

void cleanup_module()

{

Восстанавливаем указатель на оригинальный системный вызов в таблице:

sys_call_table[SYS_gost]=orig_gost;

Обнуляем структуру, содержащую ключевую информацию:

memset(&keys,0,sizeof(struct key_info));

Снимаем регистрацию устройства:

    unregister_chrdev(GOST_MAJOR,"gost");

    return;

}

Функция own_gost

Функция own_gost, которая заменяет оригинальный системный вызов sys_gost, непосредственно выполняет операции криптографического преобразования блоков данных, переданных драйверу модулем взаимодействия МВ.

int own_gost(char *block, size_t count, int flag)

{

    int i;


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2016 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100