Архив метки: C++

Получение значений счетчиков производительности

В данной статье хочу показать, как можно получить значение счетчиков производительности вашего компьютера, при небольшой модификации кода можно так же получать значения счетчиков других машин. Читать далее

Создание драйверов. Часть 5. Фильтр драйвер

В этой части цикла статей, рассматривается создание и тестирование фильтр драйвера – это драйвер, основной функцией которого является обработка проходящих через него IRP пакетов, это возможно благодаря многоуровневой модели драйверов Windows, где несколько драйверов можно выстроить в одну цепочку, соответственно добавляя новые возможности нижележащему драйверу. Читать далее

Создание драйверов. Часть 4. Обмен данными

В данной статье рассмотрены способы обмена данными между приложением и драйвером, при помощи рабочих процедур драйвера с IRP кодом IRP_MJ_READ, IRP_MJ_WRITE и IRP_MJ_DEVICE_CONTROL. Из второй части цикла статей и примеров по созданию и работе с драйверами, мы узнали, как отправлять драйверу IOCTL запросы, в зависимости от которых драйвер будет предпринимать те или иные действия. Читать далее

Создание драйверов. Часть 3. Просмотр состояния драйверов

В данном примере мне хотелось бы показать как с помощью интерфейса SCM(Service Control Manager) можно просмотреть состояние загруженных в системе драйверов. Для этой цели использовалась функция EnumServicesStatus, входящая в состав Advapi32.dll. Читать далее

Создание драйверов. Часть 2

Начинаем наращивать наш драйвер, будем использовать скелет, который мы создали в прошлой статье. В данном примере мне хотелось бы объяснить, как осуществляется «общение» с драйвером. Читать далее

Создание драйверов. Часть 1

В данной статье мне хотелось бы показать, как создавать драйвера, если Вам необходима теоретическая информация то советую прочесть книгу Дэвида Соломона и Марка Руссиновича «Внутреннее устройство Microsoft Windows 2000». Для начала мы сделаем простой драйвер для Windows 2000, который послужит нам каркасом для дальнейших экспериментов. Для работы понадобится «Windows 2000 Driver Development Kit», именно с помощью данного пакета создаются драйвера, в его состав входят компилятор, линкер, заголовочные файлы, lib-файлы, документация, полезные инструменты и конечно множество примеров. Читать далее

Неавторизованная отправка почты

В данном примере хочу Вам показать, как использовать неавторизованную отправку почты, то есть владелец электронного почтового ящика получает письмо от себя. Хочу сразу предупредить, что такой способ используют спамеры и это чревато проблемами с законодательством. Читать далее

Raw сокеты WinSocket C++

В данной статье – примере мне хотелось бы показать работу с простыми(raw) сокетами. Данные сокеты позволяют получить доступ к базовому протоколу передачи данных, это дает нам большие возможности создания таких сетевых утилит как Ping, Traceroute, а также для организации IP Spoofing, DDoS, ICMP-flood, и многого еще =) Рассматривать будем только протокол IP, так как большинство других протоколов вообще не поддерживают простые сокеты, разве только ATM. Читать далее

Как узнать, сколько памяти занимает процесс

#include <iostream>
#include <windows.h>
#include <psapi.h>//Psapi.lib
using namespace std;
 
int main()
{
 
        DWORD pid;
        PROCESS_MEMORY_COUNTERS pmc;
 
        cout<<"Enter process PID: ";cin>>pid;
 
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
        if(NULL != hProcess)
        {
                if(GetProcessMemoryInfo(hProcess,&pmc,sizeof(pmc)))
                {
                        cout<<pmc.cb<<endl;
                        cout<<pmc.PageFaultCount/1024<<endl;
                        cout<<pmc.PeakWorkingSetSize/1024<<endl;
                        cout<<pmc.WorkingSetSize/1024<<endl;
                        cout<<pmc.QuotaPeakPagedPoolUsage/1024<<endl;
                        cout<<pmc.QuotaPagedPoolUsage/1024<<endl;
                        cout<<pmc.QuotaPeakNonPagedPoolUsage/1024<<endl;
                        cout<<pmc.QuotaNonPagedPoolUsage/1024<<endl;
                        cout<<pmc.PagefileUsage/1024<<endl;  
                        cout<<pmc.PeakPagefileUsage/1024<<endl;
                }
        }
        CloseHandle( hProcess );
        return 0;
}