| Bazislib | 
Обновлено: 28.02.2015 - 22:09
Мультиплатформенная системная библиотека, которая предоставляет API для разработки определённых системных служб и приложений низкого уровня для WinXP kernel mode, Win32 и WinCE, а также для Linux.
Это объектно-ориентированный фреймворк для создания драйверов Windows (с пропатченым STLPort), набор стандартных интерфейсов ядра и сервисов уровня пользователя и набор классов для упрощения некоторых пользовательских задач, таких как работа с файлами или управление службами Windows. Многие open source проекты от SysProgs, такие как WinCDEmu, основаны на BazisLib.
Вот простой пример PnP драйвера виртуального диска. Задача, которая обычно занимает килобайты кода решается оставив всю рутинную работу фреймворку BazisLib:
#include <bzsddk/bzsddk.h>
#include <bzsddk/crossplatform/crossvol.h>
#define RAMDISK_SECTOR_SIZE 512
namespace BazisLib
{
class RamDisk : public IBasicDisk
{
protected:
ULONGLONG m_SectorCount;
ULONGLONG m_TotalSize;
char *m_pBuffer;
public:
unsigned GetSectorSize() {return RAMDISK_SECTOR_SIZE;}
void Dispose();
RamDisk(unsigned MegabyteCount)
{
m_SectorCount = MegabyteCount * (1024 * 1024 / RAMDISK_SECTOR_SIZE);
m_TotalSize = MegabyteCount * 1024 * 1024;
m_pBuffer = (char *)bulk_malloc((unsigned)m_TotalSize);
}
~RamDisk()
{
if (m_pBuffer)
bulk_free(m_pBuffer, m_TotalSize);
}
virtual ULONGLONG GetSectorCount() override {return m_SectorCount; }
virtual unsigned Read(ULONGLONG ByteOffset, void *pBuffer, unsigned Length) override
{
if (!m_pBuffer)
return 0;
LONGLONG MaxSize = m_TotalSize - ByteOffset;
if (MaxSize < 0)
MaxSize = 0;
if (Length > MaxSize)
Length = MaxSize;
memcpy(pBuffer, m_pBuffer + ByteOffset, Length);
return Length;
}
virtual unsigned Write(ULONGLONG ByteOffset, const void *pBuffer, unsigned Length) override
{
if (!m_pBuffer)
return 0;
LONGLONG MaxSize = m_TotalSize - ByteOffset;
if (MaxSize < 0)
MaxSize = 0;
if (Length > MaxSize)
Length = MaxSize;
memcpy(m_pBuffer + ByteOffset, pBuffer, Length);
return Length;
}
virtual LPGUID GetStableGuid() override {return NULL;}
virtual bool DeviceControl(unsigned CtlCode, void *pBuffer, unsigned InSize,
unsigned OutSize, unsigned *pBytesDone) override
{
return false;
}
virtual bool Initialize() override {return true;}
};
using namespace DDK;
class RamDiskDriver : public Driver
{
public:
RamDiskDriver() : DDK::Driver(true)
{
}
virtual NTSTATUS AddDevice(IN PDEVICE_OBJECT PhysicalDeviceObject) override
{
UniversalVolume *pVol = new UniversalVolume(new RamDisk(256), true);
if (!pVol)
return STATUS_NO_MEMORY;
NTSTATUS st = pVol->AddDevice(this, PhysicalDeviceObject);
if (!NT_SUCCESS(st))
return st;
return STATUS_SUCCESS;
}
virtual ~RamDiskDriver()
{
}
};
DDK::Driver *_stdcall CreateMainDriverInstance()
{
return new RamDiskDriver();
}
}
------------------------
Восстановление сайтов из Вебархива
Размещение по доскам объявлений России
ТРИО теплый пол отзыв
Заработок на сокращении ссылок
Earnings on reducing links
Код PHP на HTML сайты
Категория: Фреймворки
| Комментарии | 


 Финансы
 Финансы 
 Планирование
 Планирование  Офисные пакеты
 Офисные пакеты  Наука и производство
 Наука и производство  Математика
 Математика  Общество
 Общество  Религии
 Религии  Образование
 Образование  Программирование
 Программирование  Сеть
 Сеть  Безопасность
 Безопасность  Администрирование
 Администрирование Игры
 Игры  Рабочий стол
 Рабочий стол  Компьютерные советы
 Компьютерные советы Другие темы
 Другие темы Добавить статью
 Добавить статью Контакты и Отказ от ответственности
 Контакты и Отказ от ответственности О нас
 О нас 
  Просмотров: 3054
 Просмотров: 3054        Комментарии:
 Комментарии:      
 Добавлен: 28 февраля 2015
 Добавлен: 28 февраля 2015     
    
 
      