Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C]Piszemy Sterownik Do Windowsa O_O


Osama

Rekomendowane odpowiedzi

Opublikowano

No siema, pokaże wam dzisiaj jak napisać działający sterownik do windowsa. Jest to bardzo proste. Co będzie on robił? Tego się dowiecie dalej.

 

Po pierwsze, muszę wytłumaczyć wam jaka jest różnica między sterownikiem a plikiem wykonywalnym.

Sterowniki działają w trybie kernel, przez to mają większe możliwości zarządzania komputerem od użytkownika z prawami administratora. Praktycznie, nie ma rzeczy, której sterownik nie może. Oczywiście nie ma to samych plusów, gdzie jakiś program by się wywalił to w takiej samej sytuacji sterownik całkowicie scrashuje komputer i wywoła niebieski ekran śmierci :O.

 

Gdzie załadowane są sterowniki? No w takim miejscu żeby im nie przeszkadzać a dokładnie w pamięci pomiędzy adresami 0x80000000 i 0xFFFFFFFF, do tych adresów żaden użytkownik nie ma dostępu.

 

Dobra, koniec tego gadania, czas napisać sterownik, ale najpierw musicie ściągnąć WDK

 

http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=36a2630f-5d56-43b5-b996-7633f2ec14ff

 

Podczas instalacji nie zmieniajcie ścieżki, potem będzie wam łatwiej kompilować sterowniki.

 

 

Dobra, ogień.

 

Tworzymy sobie nasz sterownik. Niech nazywa się sterownik.c a znajduje w folderze src\sterowniki\1 w WDK czyli:

C:\WinDDK\7600.16385.1\src\sterowniki\1

 

Nie macie folderów sterowniki i 1 to je oczywiście stwórzcie.

 

sterownik.c

#include <ntddk.h>
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{ 
   DbgPrint("Sterownik poprawnie zaladowany\n");

return STATUS_SUCCESS;
}

 

Dobra już tłumaczę wszystko:

 

DriverEntery - funkcja podobna z działąnia do DllMain, wywoływana jest wtedy kiedy nasz sterownik zostaje załadowany, jednakże to co różni sterowniki od innych programów to to, że pomimo wykonania głównej funkcji nadal są włączone.

DriverObject to wskażnik na strukturę DRIVER_OBJECT, struktura danych jądra reprezentując załadowany sterownik(bla bla bla).

Reszta was nie interesuje na razie, jeżeli chcecie wiedzieć to piszcie na pw ewentualnie msdn obczajcie.

 

NTSTATUS, który jest zwracany przez naszą główną funkcję to 32bit'owa wartość, która może zawierać różne error cody i innego tego typu bzdety.

DbgPrint to funkcja działająca tak jak printf tylko, że wysyła wiadomość do debuggera.

STATUS_SUCCES oznacza, że wszystko jest ok, inne STATUS_XXXXXX oznaczają błędy.

 

kolejny pliczek, który musimy stworzyć to makefile(bez żadnego rozszerzenia, samo makefile)

Taka jest jego zawartość

!INCLUDE $(NTMAKEENV)\makefile.def

 

i jeszcze jeden pliczek, tym razem o nazwie sources(też bez roszerzenia)

TARGETNAME=sterownik
TARGETTYPE=DRIVER
TARGETPATH=obj


INCLUDES=..\..\inc

SOURCES = sterownik.c

 

Kompilacja jest banalnie prosta.

Włączamy kompilator, który był już w WDK

 

Start -> Wszystkie Programy -> Windows Drivers Kit -> WDK 7600.16385.1 - > Build Environments - > (twoj windows) - >(twoja architektura procesora) Checked Build Environment

 

Włączany to.Sprawdzamy czy działa, wpisujemy build. Powinno się co dziać, zajmie to kilka minut. Gdy się skończy to poleceniem cd przenosimy się do folderu 1. Gdy już tam jesteśmy, wpisujemy znowu build i mamy już nasz sterowniczek. W folderze 1 powinien zrobić się folder o dziwnej nazwie, wchodzimy w niego, potem w kolejny(tam jest tylko 1) i ku naszym oczom powinien ukazać się plik o jakże wymownej nazwie sterownik.sys kopiujemy go sobie na naszą wirtualną maszynę(np virtual box) bo tylko debil testowałby sterownik na normalnym kompie :D

 

Dobrze, gdy twój poziom ekscytacji opadnie możesz pobrać kolejne programy(lub napisać swoją wersję).

Potrzebujemy ładowarki(:O) sterowników i programu pokazującego jakie wiadomości przychodzą z jądra.

Tym pierwszym może być OSRLOADER, tym drugim DbgView. Oba darmowe.

 

Tutaj link do nich wraz ze sterownikiem skompilowanym przeze mnie gdyby komuś coś nie wychodziło.

Download:

http://www.multiupload.com/5EGY22QOML

 

I skanik oczywiście:

http://www.virustotal.com/file-scan/report.html?id=f92d58a4350562c1c846c6bcb30a67ac3aad93228ee4f5053d61a8a7d3dbec3e-1295628184

 

Czas załadować to cholerstwo.

Włączamy DbgView. W menu capture zaznaczamy wszystko oprócz log boot. I zostawiamy program na widoku.

Włączamy OSRLOADER, klikamy browse i szukamy naszego sterownika. Potem Register Service i Start Service.

W dbgview powinna pokazać się wiadomość, dobra teraz klikamy stop service. Ale co to!? Czemu to to nie chce się wyłączyć?

No bo nie napisałeś funkcji do wyłączania to się nie wyłącza, proste nie? Ale nie martw się, zaraz ją napiszemy.

 

sterownik.c

#include <ntddk.h>

void DriverUnload(PDRIVER_OBJECT pDriverObject)
{
   DbgPrint("Wylaczanie Sterownika\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
   DriverObject->DriverUnload = DriverUnload;

   DbgPrint("Zaladowano sterownik");

return STATUS_SUCCESS;

}

 

Kompilujemy i mamy wyłączający i włączający się sterownik, który wypisuje jakieś gówno. Co z tego, że jest bez użyteczny, nie w 1 dzień Rzym zbudowano.

Na zakończenie odsyłam was do msdn, hihihihi.

RAsfepN.png
Opublikowano

good job men.A mówiłeś że w C nic fajnego napisać się nie da i że on wolniejszy od C++ jest...

@down-nieważne...ale jak chcesz to ci moge pokazać gdzie tak napisałeś :P

Cytat

 

Orientacja seksualna polega na tym, że jeden mężczyzna lubi blondynki, drugi szatynki, że jedna pani woli umięśnionych mężczyzn a inna chudych intelektualistów. Homoseksualizm nie jest orientacją jest chorobą za którą homoseksualiści nie ponoszą odpowiedzialności. Pewna grupa ludzi rodzi się upośledzona fizycznie, na przykład bez ręki ale czy to znaczy, że wszystkim zdrowym powinniśmy też obcinać ręce? Nie, powinniśmy zapewnić im protezy. Obowiązkiem państwa jest zapewnienie homoseksualistom, jak wszystkim upośledzonym fizycznie czy psychicznie profesjonalnej opieki medycznej.

Opublikowano

To chyba z kimś mnie pomyliłeś. C i C++ mają taka samą szybkość. Sterowniki do windowsa można pisać też w c++.

RAsfepN.png
  • 6 miesięcy temu...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...