一般に、カーネルサービスを呼び出すためにユーザーモードコードがカーネルモードに移行するための古いディスパッチャーメカニズムは、によって実装されていましたint 2Eh(現在はに置き換えられていsysenterます)。またint 3、今日までブレークポイント用に予約されています。
基本的に、カーネルは特定の割り込みに対してトラップを設定し(ただし、すべてかどうかは覚えていません)、トラップコードに応じて、ユーザーモードの呼び出し元に対して何らかのサービスを実行します。それが不可能な場合は、アプリケーションが強制終了されます。特権操作。
詳細はとにかく、あなたが呼び出そうとしていた正確な割り込みに依存します。たとえば、関数DbgBreakPoint(ntdll.dll)とDebugBreak( )は、呼び出し(または実際には特定のオペコード)kernel32.dll以外は何もしません。int 3int3
編集1:新しいWindowsバージョン(XP SP2以降、IIRC)では、回答に書いたようにsysenter置き換えられます。int 2Eh終了する理由の1つとして考えられるのは、例外処理によってこれをキャッチできるはずですが、スタックで期待されるパラメーターを渡さないためです。基本的に、ネイティブAPIのusermode部分は、呼び出すシステムサービスのパラメーターをスタックに配置し、サービスの番号(システムサービスディスパッチテーブルのインデックス-SSDT、場合によってはSDT)を特定のレジスタに配置してから呼び出します。新しいシステムsysenterと古いシステムint 2Eh。