>;
>//И зарезервируем переменную для хранения объема памяти карточки
>UINT dwSize;
>//Вспомогательная внутренняя функция OpenByName будет пытаться связаться с
>//драйвером.
>HANDLE OpenByName(void) {
> // вызов API.
> return CreateFile(sLinkName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
> //Функция возвращает NULL, если не удалось подключится к драйверу и хэндл
> //на него в противном случае.
>}
>//Далее – функция DllMain:
>BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
> //Определяем, почему была вызвана функция:
> switch (ul_reason_for_call) {
> //Приложение подключает библиотеку. Ничего не делаем.
> case DLL_PROCESS_ATTACH: {
> break;
> }
> case DLL_THREAD_ATTACH: {
> break;
> }
> //Приложение отключает библиотеку.
> case DLL_THREAD_DETACH: {
> //Закрыть хэндл драйвера
> if (hDevice != INVALID_HANDLE_VALUE) CloseHandle(hDevice);
> hDevice = INVALID_HANDLE_VALUE;
> break;
> }
> case DLL_PROCESS_DETACH: {
> //Закрыть хэндл драйвера
> if (hDevice != INVALID_HANDLE_VALUE) CloseHandle(hDevice);
> hDevice = INVALID_HANDLE_VALUE;
> break;
> }
> } //Все операции завершились успешно. Вернем true.
> return TRUE;
>}
>//Эта внешняя функция будет вызываться приложением, которое захочет установить
>//связь с драйвером. Функция вернет true в случае успеха и false при неудаче.
>EXPORT bool IsDriverPresent(void) {
> //Попытаемся открыть хэндл драйвера
> hDevice=OpenByName();
> if (hDevice == INVALID_HANDLE_VALUE)
> //неудача
> return(false);
> else
> //Успех.
> return(true);
>};
>//Внешняя функция, производящая чтение памяти устройства. Char* data – буфер для
>//данных, int len – число 32-битных слов для чтения. Функция вернет число
>//прочитанных слов.
>EXPORT int ReadMem(char *data, int len) {
> unsigned long rd=0; //Количество прочитанных слов
> ReadFile(hDevice, data, len, &rd, NULL); //Системный вызов чтения данных из
> //файла. В данном случае – из нашего устройства
> //len – количество запрашиваемых слов
> //rd – количество прочитанных слов.
> data[len*4+1]=0; //Установить последний байт в 0 – признак конца строки.
> return(rd); //Вернуть количество прочитанных слов.
>}
>//Внешняя функция, производящая запись в память. Практически аналогична
>//предыдущей.
>EXPORT int WriteMem(char *data, int len) {
> unsigned long nWritten=0;
> WriteFile(hDevice, data, len, &nWritten, NULL);
> //len – количество запрашиваемых слов
> //nWritten – количество прочитанных слов.
> return nWritten;
>}
>//Эта функция возвращает количество памяти устройства, байт.