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.
Sterownik urządzenia może używać następujących żądań sterowania urządzeniami do synchronicznego oceniania metod kontroli zdefiniowanych w przestrzeni nazw ACPI urządzenia:
-
To żądanie ocenia metodę sterowania, która jest bezpośrednim obiektem podrzędnym w przestrzeni nazw ACPI urządzenia, do którego jest wysyłane żądanie.
-
To żądanie synchronicznie ocenia metodę sterowania obsługiwaną przez urządzenie lub obiekt podrzędny należący do urządzenia, do którego jest wysyłane żądanie.
Sterownik Windows ACPI, Acpi.sys, obsługuje te żądania w imieniu urządzeń określonych w tabelach opisu systemu w ACPI BIOS. Te żądania mogą być używane przez sterowniki urządzeń pracujące w trybie jądra, które spełniają wymagania Kernel-Mode Driver Framework (KMDF) lub Windows Driver Model (WDM). Począwszy od systemu Windows 8 sterowniki urządzeń w trybie użytkownika, które spełniają wymagania User-Mode Driver Framework (UMDF) mogą używać tych żądań.
Na przykład sterownik WDM wykonuje następującą sekwencję operacji, aby użyć jednego z tych poleceń IOCTL:
Wywołuje IoBuildDeviceIoControlRequest w celu skompilowania żądania.
Wywołuje IoCallDriver w celu przekazania żądania w dół stosu urządzenia.
Czeka na sygnał od menedżera wejścia/wyjścia do sterownika, że sterowniki niższego poziomu ukończyły żądanie.
Sprawdza stan żądania.
Sprawdza poprawność argumentów wyjściowych.
Przetwarza argumenty wyjściowe, które są zwracane do sterownika.
Wykonuje żądanie.
Aby utworzyć żądanie, sterownik wywołuje IoBuildDeviceIoControlRequest i dostarcza następujące parametry:
IoControlCode jest ustawiony na IOCTL_ACPI_EVAL_METHOD lub IOCTL_ACPI_EVAL_METHOD_EX.
DeviceObject jest ustawiony na wskaźnik do fizycznego obiektu urządzenia (PDO).
InputBuffer jest ustawiona na wskaźnik do struktury buforu wejściowego, która zależy od typu argumentów wejściowych, które mają być przekazywane do metody sterującej. Sterownik ACPI obsługuje metody, które nie przyjmują argumentów wejściowych, które przyjmują pojedynczą liczbę całkowitą, która pobiera ciąg ASCII lub pobiera niestandardową tablicę argumentów wejściowych. Aby uzyskać więcej informacji na temat obsługiwanych struktur buforu wejściowego, zobacz Control Method Input Buffer Structures.
InputBufferLength jest ustawiona na rozmiar w bajtach buforu wejściowego dostarczanego przez InputBuffer.
OutputBufferLength dostarcza rozmiar w bajtach buforu wyjściowego dostarczanego przez OutputBuffer.
InternalDeviceIoControl jest ustawiona na wartość FALSE.
zdarzenie jest ustawione na wskaźnik do obiektu zdarzenia przydzielonego i zainicjowanego przez wywołującego. Sterownik czeka, aż menedżer we/wy sygnalizuje to zdarzenie, co wskazuje, że sterowniki niższego poziomu zakończyły żądanie.
OutputBuffer dostarcza wskaźnik do struktury ACPI_EVAL_OUTPUT_BUFFER zawierającej argumenty wyjściowe z metody sterującej. Argumenty wyjściowe są specyficzne dla danej metody sterującej. Aby sterownik zwracał wszystkie dane wyjściowe, musi przydzielić bufor, który jest wystarczająco duży, aby przechowywać wszystkie argumenty wyjściowe.
IoStatusBlock jest ustawiona na strukturę IO_STATUS_BLOCK. Spowoduje to zwrócenie stanu żądania ustawionego przez sterowniki niższego poziomu.
Aby zapoznać się z przykładem kodu oceniania metody sterującej, która nie pobiera argumentów wejściowych, zobacz Ocena metody sterującej bez argumentów wejściowych.
Aby zapoznać się z przykładem kodu, w jaki sposób oceniać metodę sterowania, która przyjmuje argumenty wejściowe, zobacz Ocena metody sterującej, która przyjmuje argumenty wejściowe.