Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 4
Всего онлайн: 4
Зарегистрировано юзеров: 6872
Комментариев на сайте: 651
Новый юзер: RavBroaft



Последние комментарии
c
Rodneyhef прокомментировал "Урок 53 - Потоки в Delphi, (часть 1/3)":
Zauważże, czym cechują się kredyty na sześcdziesięciu dni. Jako co zwrócić uwagę podczas asortymentu oferty? Które firmy użyczają chwilówek za taki czas? Sprawdź! [url=https://chwilowki-pozyczka.pl/]chwilówki[/url] [url=https://chwilowki-pozyczka.pl/chwilowki-online]chwilówki online[/url] [url=https://chwilowki-pozyczka.pl/pozyczki-na-raty]pożyczki ratalne[/url] [url=https://chwilowki-pozyczka.pl/kredyty-gotowkowe]kredyty gotówkowe[/url] Zdecydowana większość pożyczek krótkoterminowych udzielana jest od okres nie zaakceptować dłuższy niźli dwa miesiące. Krótki słowo spłaty wydaje się być charakterystyczny na rzecz tego rodzaju wytworów finansowych. Firmy pożyczkowe wprowadziły także zastrzeżenia, skutkujące tym, że nie każdy klient będzie mógł momentalnie zaciągnąć wzięcie pożyczki na 60 dni. W poniższym artykule podpowiadamy, na jak zwrócić uwagę, postanawiając się pod ten typ dofinansowania, na czym polegają opisane ograniczenia, oraz pokazujemy, które obecne na rynku firmy użyczają pożyczek dzięki 60 dni. chwilowki-pozyczka.pl Termin kredyty jest jednym z kluczowych składników mających bezpośredni wpływ jako całkowite koszty zobowiązania. Alternatywa krótszego czy dłuższego sezonu ma przełożenie na wysokość RRSO, innymi słowy rzeczywistej rocznej stopy oprocentowanie informującej nas w stosunku procentowym o kosztach związanych z pożyczką. Jest to pierwszy element, na który trzeba zwrócić szczególną uwagę w chwili wyboru możliwości. Drugim elementem jest uważna ocena spersonalizowanych możliwości kredytowych, co koniecznie musi towarzyszyć zaciąganiu jakiegokolwiek zobowiązania. Być może będziemy potrzebować produktu finansowego, którego spłata wydaje się znacznie dłuższa. Wówczas winniśmy zdecydować się jako pożyczki od raty. Warto również stwierdzić o aplikowanych przez spółki pożyczkowe ograniczeniach, wynikających spośród realizacji strategii ryzyka. Ochraniając się zanim niewypłacalnością pożyczkobiorców, instytucje finansowe przedłożyły szereg wielu ograniczeń, oddanych w szczególności dla osób nowych odbiorców. Ci pożyczkobiorcy, którzy zaciągają chwilówkę na raz 1 w podanej firmie, niejednokrotnie nie mogą liczyć na termin dłuższy niźli 30 dni. Poza tym wiążą ograniczenia szczególne dla kredytów krótkoterminowych. Przemówienie między innymi na temat weryfikacji petentów w charakteryzujących się ogromną popularnością rejestrach dłużników, ukończenie 21. roku egzystencji czy identyfikacja maksymalnej poziomie pożyczki. Pożądane byłoby podkreślić, hdy znaczna część przedsiębiorstw nie udziela pożyczek o dłuższym okresie w ogóle, co ponadto nie jest rezultatem wprowadzenia ograniczeń, a wynika po prostu wraz z oferty.
dealrattKi прокомментировал "Урок 3 - Конструкция IF...THEN...ELSE":
Это действительно радует меня. --- Бесподобное сообщение скачать fifa, скачать фифа а также [url=http://15fifa.ru/novosti-fifa-15]fifa 15 последние новости[/url] скачать фифа

Слежение за процессами

На первый взгляд, задача кажется малорешаемой. На второй - после поиска в MSDN - понимаешь, что она не решаема в User-mode в том смысле, что нет соответствующих API. А впрочем, когда это было проблемой для настоящих программистов?

В режиме ядра задача решается тривиально - в драйвере регистрируешь callback функцией PsSetCreateProcessNotifyRoutine и он будет вызван при создании/удалении процесса. Но нам нужна реализация в user-mode...

Ограничимся тем, что будем отлавливать создание процессов. Первое, что приходит на ум, это следующий алгоритм:

получить список процессов
просмотреть его на предмет появления новых процессов
переход на 1)
Реализуем его с помощью NATIVE API.

Отступление: Native API - это набор API, не документированный Microsoft (или документированный частично). С его помощью можно сделать все то же что можно сделать с помощью обычных API и многое другое. Мне в Native API нравится его структура, например с помощью одной функции ZwQuerySystemInformation можно получить очень большое количество информации (перечислить хэндлы, получить информацию о процессе и многое другое).

Для Delphi порт заголовочных файлов существует в нескольких вариантах, наиболее распространен вариант JEDI. Только, при использовании JEDI, придется все Zw-функции заменить на их Nt-аналоги. Впрочем, в режиме пользователя эти функции абсолютно идентичны.


	program process_seeker;

	{$APPTYPE CONSOLE}

	uses
	  SysUtils, windows, tintlist;

	type
	  NTStatus = cardinal;
	  PVOID    = pointer;
	  USHORT = WORD;
	  UCHAR = byte;
	  PWSTR = PWideChar;

	CONST  //Статус константы

	  STATUS_SUCCESS              = NTStatus($00000000);
	  STATUS_ACCESS_DENIED        = NTStatus($C0000022);
	  STATUS_INFO_LENGTH_MISMATCH = NTStatus($C0000004);

	const SystemProcessesAndThreadsInformation = 5;

	type
	PClientID = ^TClientID;
	TClientID = packed record

	 UniqueProcess:cardinal;
	 UniqueThread:cardinal;
	end;

	PUnicodeString = ^TUnicodeString;
	  TUnicodeString = packed record
	    Length: Word;
	    MaximumLength: Word;
	    Buffer: PWideChar;
	end;

	PVM_COUNTERS = ^VM_COUNTERS;
	VM_COUNTERS = packed record
	   PeakVirtualSize,
	   VirtualSize,
	   PageFaultCount,
	   PeakWorkingSetSize,
	   WorkingSetSize,
	   QuotaPeakPagedPoolUsage,
	   QuotaPagedPoolUsage,
	   QuotaPeakNonPagedPoolUsage,
	   QuotaNonPagedPoolUsage,
	   PagefileUsage,
	   PeakPagefileUsage: dword;
	  end;

	PIO_COUNTERS = ^IO_COUNTERS;
	IO_COUNTERS = packed record

	   ReadOperationCount,
	   WriteOperationCount,
	   OtherOperationCount,
	   ReadTransferCount,
	   WriteTransferCount,
	   OtherTransferCount: LARGE_INTEGER;
	  end;

	PSYSTEM_THREADS = ^SYSTEM_THREADS;
	SYSTEM_THREADS = packed record
	  KernelTime,
	  UserTime,
	  CreateTime: LARGE_INTEGER;
	  WaitTime: dword;
	  StartAddress: pointer;
	  ClientId: TClientId;
	  Priority,
	  BasePriority,
	  ContextSwitchCount: dword;
	  State: dword;
	  WaitReason: dword;
	 end;

	PSYSTEM_PROCESSES = ^SYSTEM_PROCESSES;
	SYSTEM_PROCESSES = packed record
	   NextEntryDelta,
	   ThreadCount: dword;
	   Reserved1 : array [0..5] of dword;
	   CreateTime,
	   UserTime,
	   KernelTime: LARGE_INTEGER;
	   ProcessName: TUnicodeString;
	   BasePriority: dword;
	   ProcessId,
	   InheritedFromProcessId,
	   HandleCount: dword;
	   Reserved2: array [0..1] of dword;
	   VmCounters: VM_COUNTERS;
	   IoCounters: IO_COUNTERS; // Windows 2000 only

	   Threads: array [0..0] of SYSTEM_THREADS;
	  end;

	Function ZwQuerySystemInformation(ASystemInformationClass: dword;
	                                  ASystemInformation: Pointer;
	                                  ASystemInformationLength: dword;
	                                  AReturnLength:PCardinal): NTStatus;
	                                  stdcall;external 'ntdll.dll';


	{ Получение буфера с системной информацией }
	Function GetInfoTable(ATableType:dword):Pointer;
	var
	 mSize: dword;
	 mPtr: pointer;
	 St: NTStatus;
	begin
	 Result := nil;
	 mSize := $4000; //начальный размер буфера

	 repeat
	   mPtr := VirtualAlloc(nil, mSize, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
	   if mPtr = nil then Exit;
	   St := ZwQuerySystemInformation(ATableType, mPtr, mSize, nil);
	   if St = STATUS_INFO_LENGTH_MISMATCH then

	      begin //надо больше памяти
	        VirtualFree(mPtr, 0, MEM_RELEASE);
	        mSize := mSize * 2;
	      end;
	 until St <> STATUS_INFO_LENGTH_MISMATCH;
	 if St = STATUS_SUCCESS
	   then Result := mPtr
	   else VirtualFree(mPtr, 0, MEM_RELEASE);

	end;

	var info, info2: PSystem_Processes;
	    i, j, k: integer;
	    t, t1: LARGE_INTEGER;
	    process_id: tintegerlist;
	begin
	  process_id := TIntegerList.Create;

	  //СОЗДАЕМ СПИСОК ПРОЦЕССОВ НА МОМЕНТ СОЗДАНИЯ НАШЕГО ПРОЦЕССА
	    info := GetInfoTable(SystemProcessesAndThreadsInformation);
	    info2 := info;

	    while (info2^.NextEntryDelta <> 0) do

	    begin
	      if (process_id.IndexOf(info2^.ProcessId)=-1)
	        then process_id.Add(info2^.ProcessId);

	      info2 := Pointer(dword(info2)+info2^.NextEntryDelta);
	    end;

	    VirtualFree(info, 0, MEM_RELEASE);

	    //А теперь смотрим что добавилось

	  while true do
	  begin
	    Sleep(200);
	    info := GetInfoTable(SystemProcessesAndThreadsInformation);
	    info2 := info;

	    while (info2^.NextEntryDelta <> 0) do

	    begin
	      if (process_id.IndexOf(info2^.ProcessId)=-1)
	        then
	          begin
	            writeln(info2^.ProcessId, ' - created');
	            process_id.Add(info2^.ProcessId);
	          end;
	      info2 := Pointer(dword(info2)+info2^.NextEntryDelta);
	    end;
	    VirtualFree(info, 0, MEM_RELEASE);
	  end;

	end.
	

Вот и всё, Удачи!

http://snuppy.ru/catalog/putin
Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 20 Ноября 2016
Просмотров: 3047


Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.