{"id":1055,"date":"2026-02-19T23:16:52","date_gmt":"2026-02-19T22:16:52","guid":{"rendered":"https:\/\/trzykody.pl\/?p=1055"},"modified":"2026-02-19T23:16:53","modified_gmt":"2026-02-19T22:16:53","slug":"sterownik-windows-7-jako-element-architektury-jadra-i-modelu-sterownikow-wdm","status":"publish","type":"post","link":"https:\/\/trzykody.pl\/index.php\/2026\/02\/19\/sterownik-windows-7-jako-element-architektury-jadra-i-modelu-sterownikow-wdm\/","title":{"rendered":"Sterownik Windows 7 jako element architektury j\u0105dra i modelu sterownik\u00f3w WDM"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Model sterownik\u00f3w w Windows 7 opiera si\u0119 na rodzinie WDM (Windows Driver Model) oraz jego p\u00f3\u017aniejszych rozszerzeniach, w tym KMDF i UMDF. Na poziomie architektury sterownik jest modu\u0142em j\u0105dra (plik <code>.sys<\/code>), \u0142adowanym dynamicznie przez mened\u017cer I\/O. <strong>Sterownik Windows 7<\/strong> dzia\u0142a w trybie j\u0105dra (kernel mode), co oznacza bezpo\u015bredni dost\u0119p do pami\u0119ci i struktur systemowych. B\u0142\u0119dy w tym kodzie prowadz\u0105 do awarii ca\u0142ego systemu (BSOD), a nie tylko procesu u\u017cytkownika.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis Tre\u015bci<\/h2><nav><ol><li class=\"\"><a href=\"#sterownik-windows-7-w-kontekscie-cyklu-zycia-urzadzenia-plug-and-play-i-zarzadzania-energia\">Sterownik Windows 7 w kontek\u015bcie cyklu \u017cycia urz\u0105dzenia, Plug and Play i zarz\u0105dzania energi\u0105<\/a><\/li><li class=\"\"><a href=\"#sterownik-windows-7-jako-przyklad-interfejsu-miedzy-sprzetem-a-aplikacja-uzytkownika\">Sterownik Windows 7 jako przyk\u0142ad interfejsu mi\u0119dzy sprz\u0119tem a aplikacj\u0105 u\u017cytkownika<\/a><\/li><li class=\"\"><a href=\"#przyklady-kodu-i-wzorow-zwiazanych-z-komunikacja-sterownika-z-aplikacja-uzytkownika-w-srodowisku-windows-7\">Przyk\u0142ady kodu i wzor\u00f3w zwi\u0105zanych z komunikacj\u0105 sterownika z aplikacj\u0105 u\u017cytkownika w \u015brodowisku Windows 7<\/a><ol><li class=\"\"><a href=\"#uwagi-praktyczne-pulapki-bledy-i-ograniczenia-srodowiska-windows-7\">Sterownik Windows 7: pu\u0142apki, b\u0142\u0119dy i ograniczenia<\/a><\/li><\/ol><\/li><\/ol><\/nav><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Podstawowym zadaniem sterownika jest obs\u0142uga \u017c\u0105da\u0144 wej\u015bcia\/wyj\u015bcia (IRP \u2013 I\/O Request Packet). Ka\u017cde urz\u0105dzenie widoczne w systemie jest reprezentowane przez obiekt urz\u0105dzenia (<code>DEVICE_OBJECT<\/code>), do kt\u00f3rego do\u0142\u0105czony jest \u0142a\u0144cuch sterownik\u00f3w (stack): sterownik funkcjonalny (FDO), opcjonalnie sterowniki filtruj\u0105ce (upper\/lower filter) oraz sterownik magistrali (PDO). Komunikacja odbywa si\u0119 przez przekazywanie IRP w d\u00f3\u0142 lub w g\u00f3r\u0119 stosu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce model ten wprowadza kilka konsekwencji:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>silne powi\u0105zanie sterownika z wersj\u0105 j\u0105dra systemu,<\/li>\n\n\n\n<li>konieczno\u015b\u0107 obs\u0142ugi Plug and Play oraz zarz\u0105dzania energi\u0105,<\/li>\n\n\n\n<li>obowi\u0105zek zachowania rygorystycznych zasad synchronizacji (spinlocki, IRQL).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sterownik dla Windows 7 musi by\u0107 zgodny z interfejsem WDM\/KMDF dost\u0119pnym w tej wersji systemu. Nowsze API wprowadzone w Windows 8+ cz\u0119sto nie s\u0105 dost\u0119pne, co ogranicza mo\u017cliwo\u015bci portowania kodu wstecz.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sterownik-windows-7-w-kontekscie-cyklu-zycia-urzadzenia-plug-and-play-i-zarzadzania-energia\">Sterownik Windows 7 w kontek\u015bcie cyklu \u017cycia urz\u0105dzenia, Plug and Play i zarz\u0105dzania energi\u0105<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Obs\u0142uga cyklu \u017cycia urz\u0105dzenia obejmuje moment wykrycia sprz\u0119tu, inicjalizacj\u0119 sterownika, przej\u015bcia stan\u00f3w zasilania oraz bezpieczne usuwanie. W Windows 7 mechanizmy Plug and Play bazuj\u0105 na identyfikatorach sprz\u0119tu (Hardware ID, Compatible ID) dopasowywanych do wpis\u00f3w w plikach INF.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Proces wygl\u0105da w uproszczeniu nast\u0119puj\u0105co:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Mened\u017cer PnP wykrywa urz\u0105dzenie na magistrali (np. PCI, USB).<\/li>\n\n\n\n<li>System wyszukuje pasuj\u0105cy plik INF.<\/li>\n\n\n\n<li>Nast\u0119puje instalacja sterownika i rejestracja us\u0142ugi systemowej.<\/li>\n\n\n\n<li>J\u0105dro \u0142aduje plik <code>.sys<\/code> i wywo\u0142uje funkcje inicjalizacyjne sterownika.<\/li>\n\n\n\n<li>Sterownik tworzy obiekt urz\u0105dzenia i rejestruje procedury obs\u0142ugi IRP.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Zarz\u0105dzanie energi\u0105 polega na reagowaniu na zmiany stan\u00f3w zasilania (D0\u2013D3 dla urz\u0105dze\u0144, S0\u2013S5 dla systemu). Sterownik musi poprawnie obs\u0142u\u017cy\u0107 przej\u015bcie do stanu u\u015bpienia i powr\u00f3t, zwalniaj\u0105c i ponownie inicjalizuj\u0105c zasoby sprz\u0119towe. W Windows 7 brak obs\u0142ugi nowoczesnych mechanizm\u00f3w typu Modern Standby, co upraszcza model, ale wymusza r\u0119czn\u0105 obs\u0142ug\u0119 wielu przypadk\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Konsekwencje dla stabilno\u015bci:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>brak poprawnej obs\u0142ugi PnP skutkuje \u201emartwymi\u201d urz\u0105dzeniami po ponownym pod\u0142\u0105czeniu,<\/li>\n\n\n\n<li>niepoprawna obs\u0142uga zasilania prowadzi do losowych b\u0142\u0119d\u00f3w po wybudzeniu systemu,<\/li>\n\n\n\n<li>wycieki zasob\u00f3w w sterowniku s\u0105 kumulowane na poziomie j\u0105dra.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sterownik-windows-7-jako-przyklad-interfejsu-miedzy-sprzetem-a-aplikacja-uzytkownika\">Sterownik Windows 7 jako przyk\u0142ad interfejsu mi\u0119dzy sprz\u0119tem a aplikacj\u0105 u\u017cytkownika<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sterownik udost\u0119pnia aplikacjom przestrzeni u\u017cytkownika interfejs w postaci uchwytu do urz\u0105dzenia (<code>CreateFile<\/code> w WinAPI). Komunikacja odbywa si\u0119 najcz\u0119\u015bciej przez mechanizm IOCTL (Input\/Output Control), czyli niestandardowe kody polece\u0144 przekazywane do sterownika. Ten mechanizm przypomina wywo\u0142ania systemowe, ale jest specyficzny dla danego urz\u0105dzenia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Schemat przep\u0142ywu danych:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>aplikacja u\u017cytkownika otwiera uchwyt do urz\u0105dzenia,<\/li>\n\n\n\n<li>wywo\u0142uje operacj\u0119 I\/O (np. <code>DeviceIoControl<\/code>),<\/li>\n\n\n\n<li>\u017c\u0105danie trafia do sterownika w postaci IRP,<\/li>\n\n\n\n<li>sterownik interpretuje kod IOCTL i wykonuje operacj\u0119 na sprz\u0119cie,<\/li>\n\n\n\n<li>wynik wraca do aplikacji.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">W kontek\u015bcie projektowym istotne jest rozdzielenie odpowiedzialno\u015bci:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>logika sprz\u0119towa i krytyczna synchronizacja w sterowniku,<\/li>\n\n\n\n<li>walidacja danych wej\u015bciowych po stronie j\u0105dra,<\/li>\n\n\n\n<li>logika biznesowa po stronie aplikacji u\u017cytkownika.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Nieprawid\u0142owe projektowanie interfejsu IOCTL prowadzi do problem\u00f3w bezpiecze\u0144stwa (np. mo\u017cliwo\u015b\u0107 zapisu w dowolnym obszarze pami\u0119ci) lub do nieczytelnych protoko\u0142\u00f3w komunikacji mi\u0119dzy warstwami.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"przyklady-kodu-i-wzorow-zwiazanych-z-komunikacja-sterownika-z-aplikacja-uzytkownika-w-srodowisku-windows-7\">Przyk\u0142ady kodu i wzor\u00f3w zwi\u0105zanych z komunikacj\u0105 sterownika z aplikacj\u0105 u\u017cytkownika w \u015brodowisku Windows 7<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk \/ zapis<\/th><th>Przyk\u0142ad<\/th><\/tr><\/thead><tbody><tr><td>C (u\u017cytkownik \u2192 sterownik, WinAPI)<\/td><td>&#8222;`c\\n#include &lt;windows.h&gt;\\n#include &lt;stdio.h&gt;\\n\\nint main() {\\n HANDLE h = CreateFileA(&#8222;\\\\\\\\.\\\\MyDevice&#8221;, GENERIC_READ<\/td><\/tr><tr><td>C++ (u\u017cytkownik \u2192 sterownik)<\/td><td>&#8222;`cpp\\n#include &lt;windows.h&gt;\\n#include &lt;iostream&gt;\\n\\nint main() {\\n HANDLE h = CreateFileA(&#8222;\\\\\\\\.\\\\MyDevice&#8221;, GENERIC_READ<\/td><\/tr><tr><td>Python (ctypes, u\u017cytkownik \u2192 sterownik)<\/td><td><code>python\\nimport ctypes\\nfrom ctypes import wintypes\\n\\nCreateFile = ctypes.windll.kernel32.CreateFileW\\nDeviceIoControl = ctypes.windll.kernel32.DeviceIoControl\\nCloseHandle = ctypes.windll.kernel32.CloseHandle\\n\\nhandle = CreateFile(r\\\"\\\\\\\\.\\\\MyDevice\\\", 0xC0000000, 0, None, 3, 0, None)\\nif handle == -1:\\n raise RuntimeError(\\\"B\u0142\u0105d otwarcia urz\u0105dzenia\\\")\\n\\ninp = wintypes.DWORD(5)\\noutp = wintypes.DWORD(0)\\nret = wintypes.DWORD(0)\\n\\nDeviceIoControl(handle, 0x222000,\\n ctypes.byref(inp), ctypes.sizeof(inp),\\n ctypes.byref(outp), ctypes.sizeof(outp),\\n ctypes.byref(ret), None)\\n\\nprint(\\\"Wynik:\\\", outp.value)\\nCloseHandle(handle)\\n<\/code><\/td><\/tr><tr><td>Wz\u00f3r logiczny (schemat IRP)<\/td><td><code>IRP = (Kod_IOCTL, Bufor_wej\u015bciowy, Bufor_wyj\u015bciowy) \u2192 Sterownik \u2192 (Status, Dane_wyj\u015bciowe)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"uwagi-praktyczne-pulapki-bledy-i-ograniczenia-srodowiska-windows-7\">Sterownik Windows 7: pu\u0142apki, b\u0142\u0119dy i ograniczenia<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sterowniki dla Windows 7 s\u0105 silnie zale\u017cne od wersji j\u0105dra; binaria skompilowane dla nowszych wersji cz\u0119sto nie za\u0142aduj\u0105 si\u0119 w og\u00f3le.<\/li>\n\n\n\n<li>Brak nowoczesnych mechanizm\u00f3w bezpiecze\u0144stwa znanych z nowszych system\u00f3w zwi\u0119ksza ryzyko eskalacji uprawnie\u0144 przez b\u0142\u0119dy w IOCTL.<\/li>\n\n\n\n<li>Debugowanie sterownik\u00f3w wymaga \u015brodowiska j\u0105dra (debugger kernel-mode) i cz\u0119sto osobnej maszyny testowej lub maszyny wirtualnej.<\/li>\n\n\n\n<li>Nieaktualne sterowniki s\u0105 jedn\u0105 z cz\u0119stszych przyczyn niestabilno\u015bci starszych instalacji Windows 7.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Kr\u00f3tka uwaga ko\u0144cowa: praca ze sterownikami w Windows 7 ma dzi\u015b g\u0142\u00f3wnie znaczenie utrzymaniowe i edukacyjne, bo pokazuje klasyczny model interakcji j\u0105dra z urz\u0105dzeniami, bez nowszych abstrakcji i mechanizm\u00f3w bezpiecze\u0144stwa wprowadzonych w kolejnych wersjach systemu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Model sterownik\u00f3w w Windows 7 opiera si\u0119 na rodzinie WDM (Windows Driver Model) oraz jego p\u00f3\u017aniejszych rozszerzeniach, w tym KMDF i UMDF. Na poziomie architektury sterownik jest modu\u0142em j\u0105dra (plik .sys), \u0142adowanym dynamicznie przez mened\u017cer I\/O. Sterownik Windows 7 dzia\u0142a w trybie j\u0105dra (kernel mode), co oznacza bezpo\u015bredni dost\u0119p do pami\u0119ci i struktur systemowych. B\u0142\u0119dy w tym kodzie prowadz\u0105 do awarii ca\u0142ego systemu (BSOD), a nie tylko procesu u\u017cytkownika. Podstawowym zadaniem sterownika jest obs\u0142uga \u017c\u0105da\u0144 wej\u015bcia\/wyj\u015bcia (IRP \u2013 I\/O Request Packet). Ka\u017cde urz\u0105dzenie widoczne w systemie jest reprezentowane przez obiekt urz\u0105dzenia (DEVICE_OBJECT), do kt\u00f3rego do\u0142\u0105czony jest \u0142a\u0144cuch sterownik\u00f3w (stack): sterownik funkcjonalny (FDO), opcjonalnie sterowniki filtruj\u0105ce (upper\/lower filter) oraz sterownik magistrali (PDO). Komunikacja odbywa si\u0119 przez przekazywanie IRP w d\u00f3\u0142 lub w g\u00f3r\u0119 stosu. W praktyce model ten wprowadza kilka konsekwencji: Sterownik dla Windows 7 musi by\u0107 zgodny z interfejsem WDM\/KMDF dost\u0119pnym w tej wersji systemu. Nowsze API wprowadzone w Windows 8+ cz\u0119sto nie s\u0105 dost\u0119pne, co ogranicza mo\u017cliwo\u015bci portowania kodu wstecz. Sterownik Windows 7 w kontek\u015bcie cyklu \u017cycia urz\u0105dzenia, Plug and Play i zarz\u0105dzania energi\u0105 Obs\u0142uga cyklu \u017cycia urz\u0105dzenia obejmuje moment wykrycia sprz\u0119tu, inicjalizacj\u0119 sterownika, przej\u015bcia stan\u00f3w zasilania oraz bezpieczne usuwanie. W Windows 7 mechanizmy Plug and Play bazuj\u0105 na identyfikatorach sprz\u0119tu (Hardware ID, Compatible ID) dopasowywanych do wpis\u00f3w w plikach INF. Proces wygl\u0105da w uproszczeniu nast\u0119puj\u0105co: Zarz\u0105dzanie energi\u0105 polega na reagowaniu na zmiany stan\u00f3w zasilania (D0\u2013D3 dla urz\u0105dze\u0144, S0\u2013S5 dla systemu). Sterownik musi poprawnie obs\u0142u\u017cy\u0107 przej\u015bcie do stanu u\u015bpienia i powr\u00f3t, zwalniaj\u0105c i ponownie inicjalizuj\u0105c zasoby sprz\u0119towe. W Windows 7 brak obs\u0142ugi nowoczesnych mechanizm\u00f3w typu Modern Standby, co upraszcza model, ale wymusza r\u0119czn\u0105 obs\u0142ug\u0119 wielu przypadk\u00f3w. Konsekwencje dla stabilno\u015bci: Sterownik Windows 7 jako przyk\u0142ad interfejsu mi\u0119dzy sprz\u0119tem a aplikacj\u0105 u\u017cytkownika Sterownik udost\u0119pnia aplikacjom przestrzeni u\u017cytkownika interfejs w postaci uchwytu do urz\u0105dzenia (CreateFile w WinAPI). Komunikacja odbywa si\u0119 najcz\u0119\u015bciej przez mechanizm IOCTL (Input\/Output Control), czyli niestandardowe kody polece\u0144 przekazywane do sterownika. Ten mechanizm przypomina wywo\u0142ania systemowe, ale jest specyficzny dla danego urz\u0105dzenia. Schemat przep\u0142ywu danych: W kontek\u015bcie projektowym istotne jest rozdzielenie odpowiedzialno\u015bci: Nieprawid\u0142owe projektowanie interfejsu IOCTL prowadzi do problem\u00f3w bezpiecze\u0144stwa (np. mo\u017cliwo\u015b\u0107 zapisu w dowolnym obszarze pami\u0119ci) lub do nieczytelnych protoko\u0142\u00f3w komunikacji mi\u0119dzy warstwami. Przyk\u0142ady kodu i wzor\u00f3w zwi\u0105zanych z komunikacj\u0105 sterownika z aplikacj\u0105 u\u017cytkownika w \u015brodowisku Windows 7 J\u0119zyk \/ zapis Przyk\u0142ad C (u\u017cytkownik \u2192 sterownik, WinAPI) &#8222;`c\\n#include &lt;windows.h&gt;\\n#include &lt;stdio.h&gt;\\n\\nint main() {\\n HANDLE h = CreateFileA(&#8222;\\\\\\\\.\\\\MyDevice&#8221;, GENERIC_READ C++ (u\u017cytkownik \u2192 sterownik) &#8222;`cpp\\n#include &lt;windows.h&gt;\\n#include &lt;iostream&gt;\\n\\nint main() {\\n HANDLE h = CreateFileA(&#8222;\\\\\\\\.\\\\MyDevice&#8221;, GENERIC_READ Python (ctypes, u\u017cytkownik \u2192 sterownik) python\\nimport ctypes\\nfrom ctypes import wintypes\\n\\nCreateFile = ctypes.windll.kernel32.CreateFileW\\nDeviceIoControl = ctypes.windll.kernel32.DeviceIoControl\\nCloseHandle = ctypes.windll.kernel32.CloseHandle\\n\\nhandle = CreateFile(r\\&#8221;\\\\\\\\.\\\\MyDevice\\&#8221;, 0xC0000000, 0, None, 3, 0, None)\\nif handle == -1:\\n raise RuntimeError(\\&#8221;B\u0142\u0105d otwarcia urz\u0105dzenia\\&#8221;)\\n\\ninp = wintypes.DWORD(5)\\noutp = wintypes.DWORD(0)\\nret = wintypes.DWORD(0)\\n\\nDeviceIoControl(handle, 0x222000,\\n ctypes.byref(inp), ctypes.sizeof(inp),\\n ctypes.byref(outp), ctypes.sizeof(outp),\\n ctypes.byref(ret), None)\\n\\nprint(\\&#8221;Wynik:\\&#8221;, outp.value)\\nCloseHandle(handle)\\n Wz\u00f3r logiczny (schemat IRP) IRP = (Kod_IOCTL, Bufor_wej\u015bciowy, Bufor_wyj\u015bciowy) \u2192 Sterownik \u2192 (Status, Dane_wyj\u015bciowe) Sterownik Windows 7: pu\u0142apki, b\u0142\u0119dy i ograniczenia Kr\u00f3tka uwaga ko\u0144cowa: praca ze sterownikami w Windows 7 ma dzi\u015b g\u0142\u00f3wnie znaczenie utrzymaniowe i edukacyjne, bo pokazuje klasyczny model interakcji j\u0105dra z urz\u0105dzeniami, bez nowszych abstrakcji i mechanizm\u00f3w bezpiecze\u0144stwa wprowadzonych w kolejnych wersjach systemu.<\/p>\n","protected":false},"author":1,"featured_media":1056,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28],"tags":[],"class_list":["post-1055","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-windows"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1055"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1055\/revisions"}],"predecessor-version":[{"id":1057,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1055\/revisions\/1057"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media\/1056"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}