Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Kody kontroli we/wy (IOCTLs) są używane do komunikacji między aplikacjami i sterownikami trybu użytkownika lub do komunikacji wewnętrznej między sterownikami w stosie. Kody sterowania we/wy są wysyłane przy użyciu żądań IRP.
Aplikacje w trybie użytkownika wysyłają listy IOCTLs do sterowników, wywołując metodę DeviceIoControl, która została opisana w dokumentacji zestawu Microsoft Windows SDK. Wywołania do DeviceIoControl powodują, że menedżer we/wy tworzy żądanie IRP_MJ_DEVICE_CONTROL i wysyła je do najwyższego sterownika.
Ponadto sterowniki wyższego poziomu mogą wysyłać żądania IOCTL do sterowników niższego poziomu, tworząc i wysyłając żądania IRP_MJ_DEVICE_CONTROL lub IRP_MJ_INTERNAL_DEVICE_CONTROL. Sterowniki przetwarzają te żądania w procedurach DispatchDeviceControl iDispatchInternalDeviceControl . (Aplikacje w trybie użytkownika nie mogą wysyłać IRP_MJ_INTERNAL_DEVICE_CONTROL żądań).
Niektóre IOCTLs są publiczne, a niektóre są prywatne. Publiczne listy IOCTL są zwykle definiowane przez system i udokumentowane przez firmę Microsoft w zestawie Windows Driver Kit (WDK) lub zestawie Windows SDK. Mogą one być wysyłane za pomocą wywołań składnika trybu użytkownika do deviceIoControl lub mogą być wysyłane z jednego sterownika trybu jądra do innego przy użyciu IRP_MJ_DEVICE_CONTROL lub IRP_MJ_INTERNAL_DEVICE_CONTROL żądań. Przykłady publicznych IOCTL obejmują kody sterowania we/wy dla portów SCSI i wewnętrzne żądania sterowania urządzeniem dla myszy I8042prt.
Z drugiej strony prywatne IOCTLs mają być używane wyłącznie przez składniki oprogramowania dostawcy do komunikowania się ze sobą. Prywatne listy IOCTL są zwykle definiowane w pliku nagłówkowym dostarczonym przez dostawcę i nie są publicznie udokumentowane. Podobnie jak publiczne IOCTL, mogą być wysyłane z wywołaniami składnika trybu użytkownika do DeviceIoControl, lub mogą być wysyłane z jednego sterownika trybu jądra do innego przy użyciu żądań IRP_MJ_DEVICE_CONTROL lub IRP_MJ_INTERNAL_DEVICE_CONTROL.
Nie ma różnicy między kodowaniem publicznych i prywatnych IOCTLs. Istnieją jednak różnice w kodach wewnętrznych, które mogą być używane w zdefiniowanych przez dostawcę listach IOCTL, w porównaniu z tymi, które są używane dla zdefiniowanych przez system list IOCTL. Jeśli dostępne publiczne listy IOCTL nie spełniają Twoich potrzeb, możesz zdefiniować nowe prywatne listy IOCTLs, których składniki oprogramowania mogą używać do komunikowania się ze sobą. Aby uzyskać więcej informacji, zobacz Definiowanie kodów kontrolnych I/O.