Sdílet prostřednictvím


Úvod do kódů ovládacích prvků vstupně-výstupních operací

Kódy řízení vstupně-výstupních operací (IOCTLs) slouží ke komunikaci mezi aplikacemi v uživatelském režimu a ovladači nebo pro interní komunikaci mezi ovladači ve stohu. Řídicí kódy vstupně-výstupních operací jsou odesílány pomocí IRP.

Aplikace v uživatelském režimu odesílají IOCTLs ovladačům voláním funkce DeviceIoControl, která je popsána v dokumentaci k sadě Microsoft Windows SDK. Volání DeviceIoControl způsobí, že správce vstupně-výstupních operací vytvoří požadavek IRP_MJ_DEVICE_CONTROL a odešle ho do nejvyššího ovladače.

Kromě toho mohou ovladače vyšší úrovně odesílat IOCTL na ovladače nižší úrovně vytvořením a odesláním požadavků IRP_MJ_DEVICE_CONTROL nebo IRP_MJ_INTERNAL_DEVICE_CONTROL. Ovladače zpracovávají tyto požadavky v rutinách DispatchDeviceControl a DispatchInternalDeviceControl . (Aplikace v uživatelském režimu nemůžou odesílat IRP_MJ_INTERNAL_DEVICE_CONTROL žádosti.)

Některé knihovny IOCTLs jsou veřejné a některé jsou soukromé. Veřejné knihovny IOCTLs jsou obvykle definovány systémem a dokumentovány společností Microsoft, a to buď v sadě Windows Driver Kit (WDK) nebo v sadě Windows SDK. Mohou být odeslány s voláními komponenty uživatelského režimu do DeviceIoControl nebo mohou být odeslány z jednoho ovladače režimu jádra do jiného pomocí IRP_MJ_DEVICE_CONTROL nebo IRP_MJ_INTERNAL_DEVICE_CONTROL požadavků.

Soukromé IOCTLy jsou na druhou stranu určeny výhradně pro softwarové komponenty dodavatele k vzájemné komunikaci mezi sebou. Privátní IOCTLs jsou obvykle definovány v hlavičkovém souboru dodaném dodavatelem a nejsou veřejně dokumentovány. Podobně jako veřejné IOCTLs mohou být odesílány voláním komponenty uživatelského režimu na DeviceIoControl nebo mohou být zasílány z jednoho ovladače režimu jádra do jiného pomocí požadavků IRP_MJ_DEVICE_CONTROL nebo IRP_MJ_INTERNAL_DEVICE_CONTROL.

Mezi kódováním veřejných a privátních vstupně-výstupních adres (IOCTLs) není žádný rozdíl. Existují však rozdíly v interních kódech, které lze použít v IOCTL definovaných dodavatelem, ve srovnání s těmi, které se používají pro IOCTL definované systémem. Pokud dostupné veřejné knihovny IOCTL nevyhovují vašim potřebám, můžete definovat nové privátní knihovny IOCTL, které můžou vaše softwarové komponenty používat ke komunikaci s ostatními. Další informace najdete v tématu Definování kódů ovládacích prvků vstupně-výstupních operací.