Bazislib |
Автор: admin Просмотров: 2825 Комментарии:
Добавлен: 28 февраля 2015
Обновлено: 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 сайты
Я уже пять лет не занимаюсь сайтом, так как работаю по 12 часов. Образование у меня среднее, и по этому нет нормальной работы. Если бы сайт приносил по 100$ в месяц, я бы добавлял по 50 статей каждый месяц. Если отправите пожертвования, я оставлю Ваши имена и фамилии в списке благодетелей !
Bitcoin: 1AP3JCZVFpHzZwcAyNztbrbFFiLdnKbY1j
Litecoin LfHXHz4k6LnDNNvCodd5pj9aW4Qk67KoUD
Dogecoin D9HHvKNFZxRhjtoh6uZYjMjgcZewwiUME9
Есть также другие кошельки.
Категория: Фреймворки
Комментарии |