私は OS のカーネル ランドの初心者です。最近、カーネルランドでプログラムがどのように機能するかについて研究しています。
いくつかの Windows API 呼び出しは、カーネルランドのシステム コールの単なるラッパーであることを知っています。最後に syscall/sysret/sysenter を実行してカーネルランドに入り、カーネルランドのレシーバー (KiFastCallEntry など) がそれを受け取り、それを解析して処理するハンドラーにスローします。
しかし、私が知っているカーネルランドと通信するもう 1 つの方法は、DeviceIoControl() のような IOCTL です。これを使用して、カスタム デバイス ドライバーを通信しました。
私の質問は、syscall と DeviceIoControl() の違いは何ですか? Windowsでカーネルランドと通信するために2つ(またはそれ以上)の方法が利用可能/分割されているのはなぜですか? DeviceIoControl を呼び出さずに一連の syscall を使用して、カスタム デバイス ドライバーと通信することはできますか?
私の質問を読んでくれてありがとう。良い一日を過ごしてください :)