【事件の表示】
　特願２００８−５２６９２２「モジュール内の実行アプリケーション・プログラムの安全性を検査するシステム、方法、及びコンピュータプログラム」拒絶査定不服審判事件〔平成１９年　２月２２日国際公開、ＷＯ２００７／０２１３２０、平成２１年　２月　５日国内公表、特表２００９−５０５２７５〕について、次のとおり審決する。
【結　論】
　本件審判の請求は、成り立たない。
【理　由】
１．手続の経緯 
　本願は、平成１８年３月２９日を国際出願日（優先権主張日：２００５年８月１５日、米国）とする出願であって、平成２３年６月２２日付けで拒絶理由通知がなされ、同年９月２０日付けで意見書の提出とともに手続補正がなされたが、平成２４年１月２６日付けで拒絶査定がなされ、これに対して平成２４年５月２４日付けで拒絶査定不服審判請求がなされるとともに同日付けで手続補正がなされ、平成２４年１１月１５日付けの当審の前置報告を引用した審尋に対して、平成２５年２月１９日に回答がなされたものである。 
 　 
２．平成２４年５月２４日付けの手続補正についての補正却下の決定  
 ［補正却下の決定の結論］  
 　平成２４年５月２４日付けの手続補正を却下する。  
 ［理　由］  
（１）補正後の本願発明  
　平成２４年５月２４日付けの手続補正（以下、「本件補正」という。）により、特許請求の範囲は、  
 本件補正前には、 
「　【請求項１】
　コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラム開発方法であって、
　コンパイル及びアセンブルされた実行アプリケーション・プログラムを前記コンピュータ・モジュール内に読み出す工程と、
　前記実行アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記コンピュータ・モジュール内に読み出された前記実行アプリケーション・プログラムに安全性検査実行コードを挿入する工程と、
　前記安全性検査実行コードを挿入された前記実行アプリケーション・プログラムを前記コンピュータ・モジュール内に記憶する工程と
を備え、
　安全性検査実行コードを挿入する前記工程は、
　　前記コンピュータ・モジュールに読み出されたプログラムに前記安全性検査実行コードを挿入するように構成された前記コンピュータ・モジュールのマシンコード安全化ツールを提供する工程と、
　　前記コンピュータ・モジュールに読み出された前記実行アプリケーション・プログラムに前記安全性検査実行コードを挿入するために、前記マシンコード安全化ツールを用いて前記コンピュータ・モジュールに読み出された前記実行アプリケーション・プログラムを処理する工程と
を含むことを特徴とするアプリケーション・プログラム開発方法。
　　【請求項２】
　前記アプリケーション・プログラム用のソースコードを記述及びデバッグする工程と、
　前記コンパイル及びアセンブルされた実行アプリケーション・プログラムを提供するために前記アプリケーション・プログラム用の前記ソースコードをコンパイル及びアセンブルする工程とが、コンパイル及びアセンブルされた実行アプリケーション・プログラムを前記コンピュータ・モジュール内に読み出す前記工程に先行することを特徴とする請求項１に記載の方法。
　　【請求項３】
　コンパイル及びアセンブルする前記工程は、前記実行アプリケーション・プログラムが利用できる前記コンピュータ・モジュールの組み込み関数に前記実行アプリケーション・プログラムをリンクする工程をさらに含むことを特徴とする請求項２に記載の方法。
　　【請求項４】
　安全性検査実行コードを挿入する前記工程は、前記安全性検査実行コードを挿入された前記実行アプリケーション・プログラムを再リンクする工程をさらに含むことを特徴とする請求項３に記載の方法。
　　【請求項５】
　前記安全性検査実行コードが挿入された前記実行アプリケーション・プログラムを記憶する前記工程の後に、前記安全性検査実行コードが挿入された前記実行アプリケーション・プログラムを前記中央演算処理ユニット上で実行する工程が処理されることを特徴とする請求項１乃至４の何れか１項に記載の方法。
　　【請求項６】
　安全性検査実行コードを挿入する前記工程は、
　　前記実行アプリケーション・プログラムによる前記コンピュータ・モジュールの前記指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを防止するために、前記コンピュータ・モジュール内に読み出された前記実行アプリケーション・プログラムに安全性検査実行コードを挿入する工程をさらに含むことを特徴とする請求項１乃至５の何れか１項に記載の方法。
　　【請求項７】
　前記コンピュータ・モジュールは揮発性メモリ及び不揮発性メモリを含み、
　安全性検査実行コードを挿入する前記工程は、
　　前記実行アプリケーション・プログラムによる、前記揮発性メモリの指定メモリ領域外への読み出し及び書き込みのうち少なくとも何れかと、前記不揮発性メモリの指定メモリ領域外へのジャンプと、のうち少なくとも何れかを制御するために、前記コンピュータ・モジュール内に読み出された前記実行アプリケーション・プログラムに安全性検査実行コードを挿入する工程を含むことを特徴とする請求項１乃至６の何れか１項に記載の方法。
　　【請求項８】
　前記コンピュータ・モジュールは前記中央演算処理ユニットによって制御される無線周波部を含み、
　前記実行アプリケーション・プログラムは前記無線周波部のための機能を提供するように構成されることを特徴とする請求項１乃至７の何れか１項に記載の方法。
　　【請求項９】
　請求項１乃至８の何れか１項に記載の方法を実行するように構成された、コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラムを開発するためのコンピュータプログラム。
　　【請求項１０】
　請求項１乃至８の何れか１項に記載の方法を実行するように構成されたアプリケーション開発環境。
　　【請求項１１】
　コンピュータ・モジュールであって、
　中央演算処理ユニットと、
　前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリと、
　前記中央演算処理ユニット上で直接実行されるように構成された前記メモリ内のマシンコード・アプリケーション・プログラムと、
　前記中央演算処理ユニット上で直接実行され、前記マシンコード・アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するように構成された前記メモリ内のマシンコード安全化ツールと
を備え、
　前記メモリは揮発性メモリ及び不揮発性メモリを含み、
　前記マシンコード安全化ツールは、前記マシンコード・アプリケーション・プログラムによる、前記揮発性メモリの指定メモリ領域外への読み出し及び書き込みのうち少なくとも何れかと、前記不揮発性メモリの指定メモリ領域外へのジャンプと、のうち少なくとも何れかを制御するために、前記マシンコード・アプリケーション・プログラムに安全性検査実行コードを挿入するように構成される
ことを特徴とするコンピュータ・モジュール。
　　【請求項１２】
　前記コンピュータ・モジュールは前記中央演算処理ユニットによって制御される無線周波部をさらに備え、
　前記マシンコード・アプリケーション・プログラムは前記無線周波部のための機能を提供するように構成されることを特徴とする請求項１１に記載のコンピュータ・モジュール。
　　【請求項１３】
　請求項１１又は１２に記載のマシンコード安全化ツールを提供するように構成された、コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラムを開発するためのコンピュータプログラム。
　　【請求項１４】
　コンピュータ・モジュールであって、
　中央演算処理ユニットと、
　前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリと、
　　前記中央演算処理ユニット上で直接実行し、
　　アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに安全性検査実行コードを挿入するように構成された前記メモリ内のマシンコード安全化ツールと、
　前記中央演算処理ユニット上で直接実行するように構成され、前記安全性検査実行コードを含む、前記メモリ内の１以上のアプリケーション・プログラムと
を備えるコンピュータ・モジュール。
　　【請求項１５】
　前記メモリは揮発性メモリ及び不揮発性メモリを含み、
　前記マシンコード安全化ツールは、
　　前記アプリケーション・プログラムによる、前記揮発性メモリの指定メモリ領域外への読み出し及び書き込みのうち少なくとも何れかと、前記不揮発性メモリの指定メモリ領域外へのジャンプと、のうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに前記安全性検査実行コードを挿入するように構成されることを特徴とする請求項１４に記載のコンピュータ・モジュール。
　　【請求項１６】
　前記コンピュータ・モジュールは前記中央演算処理ユニットによって制御される無線周波部をさらに備え、
　前記アプリケーション・プログラムは前記無線周波部のための機能を提供するように構成されることを特徴とする請求項１４又は１５に記載のコンピュータ・モジュール。
　　【請求項１７】
　請求項１４乃至１６の何れか１項に記載のマシンコード安全化ツールを提供するように構成された、コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラムを開発するためのコンピュータプログラム。」
 であったものが、 
「　【請求項１】
　コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラム開発方法であって、
　中央演算処理ユニットで直接実行されるようにコンパイル及びアセンブルされたマシンコードの実行アプリケーション・プログラムを前記コンピュータ・モジュール内に読み出す工程と、
　前記実行アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記コンピュータ・モジュール内に読み出された前記実行アプリケーション・プログラムに安全性検査実行コードを挿入する工程と、
　前記安全性検査実行コードを挿入された前記実行アプリケーション・プログラムを前記コンピュータ・モジュール内に記憶する工程と
を備え、
　安全性検査実行コードを挿入する前記工程は、
　　前記コンピュータ・モジュールに読み出されたプログラムに前記安全性検査実行コードを挿入するように構成された前記コンピュータ・モジュールのマシンコード安全化ツールを提供する工程と、
　　前記コンピュータ・モジュールに読み出された前記実行アプリケーション・プログラムに前記安全性検査実行コードを挿入するために、前記マシンコード安全化ツールを用いて前記コンピュータ・モジュールに読み出された前記実行アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換える工程と
を含むことを特徴とするアプリケーション・プログラム開発方法。
　　【請求項２】
　前記アプリケーション・プログラム用のソースコードを記述及びデバッグする工程と、
　前記コンパイル及びアセンブルされた実行アプリケーション・プログラムを提供するために前記アプリケーション・プログラム用の前記ソースコードをコンパイル及びアセンブルする工程と
　が、コンパイル及びアセンブルされた実行アプリケーション・プログラムを前記コンピュータ・モジュール内に読み出す前記工程に先行することを特徴とする請求項１に記載の方法。
　　【請求項３】
　コンパイル及びアセンブルする前記工程は、前記実行アプリケーション・プログラムが利用できる前記コンピュータ・モジュールの組み込み関数に前記実行アプリケーション・プログラムをリンクする工程をさらに含むことを特徴とする請求項２に記載の方法。
　　【請求項４】
　安全性検査実行コードを挿入する前記工程は、前記安全性検査実行コードを挿入された前記実行アプリケーション・プログラムを再リンクする工程をさらに含むことを特徴とする請求項３に記載の方法。
　　【請求項５】
　前記安全性検査実行コードが挿入された前記実行アプリケーション・プログラムを記憶する前記工程の後に、
　前記安全性検査実行コードが挿入された前記実行アプリケーション・プログラムを前記中央演算処理ユニット上で実行する工程
が処理されることを特徴とする請求項１乃至４の何れか１項に記載の方法。
　　【請求項６】
　安全性検査実行コードを挿入する前記工程は、
　　前記実行アプリケーション・プログラムによる前記コンピュータ・モジュールの前記指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを防止するために、前記コンピュータ・モジュール内に読み出された前記実行アプリケーション・プログラムに安全性検査実行コードを挿入する工程をさらに含むことを特徴とする請求項１乃至５の何れか１項に記載の方法。
　　【請求項７】
　前記コンピュータ・モジュールは揮発性メモリ及び不揮発性メモリを含み、
　安全性検査実行コードを挿入する前記工程は、
　　前記実行アプリケーション・プログラムによる、前記揮発性メモリの指定メモリ領域外への読み出し及び書き込みのうち少なくとも何れかと、前記不揮発性メモリの指定メモリ領域外へのジャンプと、のうち少なくとも何れかを制御するために、前記コンピュータ・モジュール内に読み出された前記実行アプリケーション・プログラムに安全性検査実行コードを挿入する工程
を含むことを特徴とする請求項１乃至６の何れか１項に記載の方法。
　　【請求項８】
　前記コンピュータ・モジュールは前記中央演算処理ユニットによって制御される無線周波部を含み、
　前記実行アプリケーション・プログラムは前記無線周波部のための機能を提供するように構成される
ことを特徴とする請求項１乃至７の何れか１項に記載の方法。
　　【請求項９】
　請求項１乃至８の何れか１項に記載の方法を実行するように構成された、コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラムを開発するためのコンピュータプログラム。
　　【請求項１０】
　請求項１乃至８の何れか１項に記載の方法を実行するように構成されたアプリケーション開発環境。
　　【請求項１１】
　コンピュータ・モジュールであって、
　中央演算処理ユニットと、
　前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリと、
　前記中央演算処理ユニット上で直接実行されるようにコンパイル及びアセンブルされた前記メモリ内のマシンコード・アプリケーション・プログラムと、
　前記中央演算処理ユニット上で直接実行され、前記マシンコード・アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するように構成された前記メモリ内のマシンコード安全化ツールと
を備え、
　前記メモリは揮発性メモリ及び不揮発性メモリを含み、
　前記マシンコード安全化ツールは、前記マシンコード・アプリケーション・プログラムによる、前記揮発性メモリの指定メモリ領域外への読み出し及び書き込みのうち少なくとも何れかと、前記不揮発性メモリの指定メモリ領域外へのジャンプと、のうち少なくとも何れかを制御するために、前記マシンコード・アプリケーション・プログラムに安全性検査実行コードを挿入し、前記マシンコード・アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換えるように構成される
ことを特徴とするコンピュータ・モジュール。
　　【請求項１２】
　前記コンピュータ・モジュールは前記中央演算処理ユニットによって制御される無線周波部をさらに備え、
　前記マシンコード・アプリケーション・プログラムは前記無線周波部のための機能を提供するように構成される
ことを特徴とする請求項１１に記載のコンピュータ・モジュール。
　　【請求項１３】
　請求項１１又は１２に記載のマシンコード安全化ツールを提供するように構成された、コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラムを開発するためのコンピュータプログラム。
　　【請求項１４】
　コンピュータ・モジュールであって、
　中央演算処理ユニットと、
　前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリと、
　　前記中央演算処理ユニット上で直接実行し、
　　アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに安全性検査実行コードを挿入し、前記アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換えるように構成された前記メモリ内のマシンコード安全化ツールと、
　前記中央演算処理ユニット上で直接実行するようにコンパイル及びアセンブルされ、前記安全性検査実行コードを含む、前記メモリ内の１以上のマシンコードのアプリケーション・プログラムと
を備えるコンピュータ・モジュール。
　　【請求項１５】
　前記メモリは揮発性メモリ及び不揮発性メモリを含み、
　前記マシンコード安全化ツールは、
　　前記アプリケーション・プログラムによる、前記揮発性メモリの指定メモリ領域外への読み出し及び書き込みのうち少なくとも何れかと、前記不揮発性メモリの指定メモリ領域外へのジャンプと、のうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに前記安全性検査実行コードを挿入するように構成される
ことを特徴とする請求項１４に記載のコンピュータ・モジュール。
　　【請求項１６】
　前記コンピュータ・モジュールは前記中央演算処理ユニットによって制御される無線周波部をさらに備え、
　前記アプリケーション・プログラムは前記無線周波部のための機能を提供するように構成されることを特徴とする請求項１４又は１５に記載のコンピュータ・モジュール。
　　【請求項１７】
　請求項１４乃至１６の何れか１項に記載のマシンコード安全化ツールを提供するように構成された、コンピュータ・モジュールの中央演算処理ユニット用のアプリケーション・プログラムを開発するためのコンピュータプログラム。」
　と補正された。  
　
　上記補正についてみると、
　本件補正後の請求項１では、本件補正前の請求項１に係る発明を特定するために必要な事項である「実行アプリケーション・プログラム」が、「中央演算処理ユニットで直接実行されるように」コンパイル及びアセンブルされた「マシンコード」であるとの限定を付加したものであり、また、同様に本件補正前の「前記コンピュータ・モジュールに読み出された前記実行アプリケーション・プログラムに前記安全性検査実行コードを挿入するために、前記マシンコード安全化ツールを用いて前記コンピュータ・モジュールに読み出された前記実行アプリケーション・プログラムを処理する工程」が、さらに「実行アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換える」処理を行うものであるとの限定を付加したものである。
　また、本件補正後の請求項１１では、本件補正前の請求項１１に係る発明を特定するために必要な事項である「マシンコード・アプリケーション・プログラム」が、中央演算処理ユニット上で直接実行されるように「コンパイル及びアセンブル」されるものであるとの限定を付加したものであり、また、同様に本件補正前の「マシンコード安全化ツール」がさらに「マシンコード・アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換える」処理を行うものであるとの限定を付加したものである。
　また、本件補正後の請求項１４では、本件補正前の請求項１４に係る発明を特定するために必要な事項である「アプリケーション・プログラム」が、中央演算処理ユニット上で直接実行するように「コンパイル及びアセンブル」されるものであって、「マシンコード」であるとの限定を付加したものであり、また、同様に本件補正前の「マシンコード安全化ツール」がさらに「アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換える」処理を行うものであるとの限定を付加したものである。
　よって、本件補正は、平成１８年法律第５５号改正附則第３条第１項によりなお従前の例によるとされる同法による改正前の特許法第１７条の２第４項第２号に掲げる特許請求の範囲の減縮を目的とするものに該当する。  
 　 
　そこで、本件補正後の上記請求項１４に記載された発明（以下、「本件補正発明」という。）が特許出願の際独立して特許を受けることができるものであるか（平成１８年法律第５５号改正附則第３条第１項によりなお従前の例によるとされる同法による改正前の特許法第１７条の２第５項において準用する同法第１２６条第５項の規定に適合するか）について以下に検討する。
 　  
（２）引用例  
（２−１）原査定の拒絶の理由に引用され、本願の優先日前の平成１３年９月１１日に出願公表された特表２００１−５１４４１１号公報（以下、「引用例１」という。）には、図面とともに以下の各記載がある。
（ａ）「【請求項７】
　ネイティブプロセッサと、
　メモリと、
　　　該ネイティブプロセッサと、
　　　該ネイティブプロセッサによって直接実行可能であるネイティブコードで書かれた信頼されないプログラムを実行するためのエミュレータと、
　　　オペレーティングシステムのインターフェースモジュールを使用することによって実行可能であるオペレーティングシステムと、
を有するコンピュータシステムであって、
エミュレータが、
　信頼されないプログラムをメモリの境界領域内にロードするためのロードモジュールと、
　メモリの境界領域の外で、信頼されないプログラムによるアクセスを制限するための信頼されないプログラム内に挿入可能なチェックコードと、
　オペレーティングシステムのインターフェースモジュールの対応するセットにアクセスするための信頼されないプログラムにリンク可能な変換コードモジュールのセットと、
を備える、コンピュータシステム。」
（ｂ）「【０００１】
　　【発明の属する技術分野】
　本発明は、電子的データ処理に関し、特に、信頼できないコードを包含する実行可能プログラムからのシステム損傷を回避することに関する。
　　　【０００２】
　　【従来の技術】
　インターネットブラウザの進歩は、ＷＷＷ（ワールドワイドウェブ：World Wide Web）の動的及びインタラクティブなページを作り出す。しかしながら、進歩はまた、ウェブページを単に見ることから発生する多くのコンピュータシステムセキュリティリスクを作り出す。インターネットブラウザは、プログラム又は、ウェブページに埋め込まれた他の実行可能なコードを自動的にダウンロードし、実行する。リモートコンピュータからプログラムをダウンロードし、実行する能力は、ホストコンピュータを種々のセキュリティリスクに曝す。例えばコンピュータシステム又は、コンピュータシステムのデータを修正する敵意のあるプログラムは、パスワード、銀行預金口座情報のようなユーザデータを盗み、ユーザにシステムリソースを利用できなくさせる。その結果、セキュリティの問題は、インターネットアプリケーションの開発において重要である。
　　　【０００３】
　ある従来技術のアプローチにより、Ｊａｖａアプレットとして知られる実行可能なコードの特定のフォームにセキュリティを設けた。実行可能なコードソースプログラムは、書き込まれ、プラットフォーム独立バイトコードに変換されダウンロードされる。プラットフォーム独立トークン化されたバイトコードは、実行可能コードがすることができる厳格な制限を配置する仮想マシーンで走る。従来技術のアプローチにおける実行可能なコードは、オペレーティングシステムへのアクセスが非常に制限されていた。従って、Ｊａｖａ言語はより強力になるので、オペレーティングシステムがすでに実行できる多くの関数を複製しなければならない。
　　　【０００４】
　ActiveXコントロールは、Javaの制限された能力を回避する実行可能なコードのフォームである。ActiveXは、ＯＬＥ（Object Linking and Embedding）及びＣＯＭ（Component Object Model）と呼ばれるマイクロソフト社の２つの技術の産物である。ActiveXは、それがインターネットを利用することができるという特徴をサポートする。例えば、ActiveXコントロールは、Webブラウザによって自動的にダウンロードされ、実行される。
　　　【０００５】
　ActiveXコントロールが、ネイティブコードで書かれるので、それらはオペレーティングシステムに十分にアクセスでき、コントロールが稼働するメモリを処理することができる。このアクセスは、コントロールが、スタンドアロンアプリケーションに対する拡張のようなきつく制御された環境で稼働するときに、強力である。しかしながら、ActiveXコントロールが、インターネットエクスプローラのようなウェブブラウザのようなアプリケーションによってインターネット上の知らない又は信用できないソースからダウンロードされるとき、オペレーティングシステムへの十分なアクセスは、深刻なセキュリティの問題を生ずる。ActiveXコントロールは、いかなるオペレーティングシステムのサービスにもアクセスするように設計される。敵意のあるActiveXコントロールは、ホストシステムのハードドライブのお情報を検索することができ、ウィルスを注入することができ、又は、ホストシステムを損傷させることができた。オペレーティングシステムに対するActiveXの無制限のアクセスによる問題は、無制限のアクセスが、セキュリティ違反に対するリスクにホストシステムを置くことである。
　　　【０００６】
　従って、ホストシステムのセキュリティを妥協することのない、ホストオペレーティングシステムのパワーにアクセスする能力を備えた実行可能なコードのフォームの必要性がある。
　　　【０００７】
　　【発明が解決しようとする課題】
　本発明は、ネイティブ、即ち直接実行可能なコードで書かれた信頼されたい実行可能なコードに関するセキュリティポリシーを実行する。実行可能なコードは、メモリの外側へのリファレンスが制限される予め割り当てられたメモリ範囲、即ちサンドボックス内にロードされる。実行中、実行可能なコードに追加されたチェック（「スニフコード（sniff code）」）は、これらの制限を強制する。信頼されないコードにおける在来のアプリケーションプログラムインターフェース（ＡＰＩ）コールは、ホストシステムのセキュリティの侵害を防止しながら、実行コードがホストオペレーティングシステムにアクセスすることができる変換コードモジュール（「サンク（thunks）」）で置換される。コントロール又はアプレットにおける静的リンクは、コールによってサンクモジュールに置換される。実行中にＡＰＩコールが作られるとき、コントロールはサンクに移送し、ＡＰＩコールがオペレーティングシステムで実行されることが許容されるべきか否か判断する。」
（ｃ）「【００１０】
　図１は、本発明が実施される適当な計算環境の簡単な一般的な説明を提供する。本発明は、以下において、他の環境でも可能であるが、パーソナルコンピュータ（ＰＣ）によって実行されるプログラムモジュールのようなコンピュータ実行可能な命令の一般的なコンテキストとして記載する。プログラムモジュールは、特定のタスクを実行し、特定の抽象データ型を実行するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを包含する。本発明が、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベース又はプログラム可能なカスタマエレクトロニック、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、などを包含する他のコンピュータシステムで実行されうることは、当業者には明らかであろう。本発明はまた、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散計算環境でも実行される。分散計算環境では、プログラムモジュールは、ローカルとリモートの両方のメモリ記憶装置に配置される。
　　　【００１１】
　図１は、本発明を実行するためのシステムの例を示す。それは従来のパーソナルコンピュータ２０のフォームにおいて、汎用のコンピュータデバイスを採用し、該コンピュータは、演算ユニット２１と、システムメモリ２２と、システムメモリ及び他のシステムコンポーネントを演算ユニット２１に接続するシステムバス２３とを含む。システムバス２３は、メモリバス又はメモリコントローラ、周辺バス、及び、ローカルバスを包含する種々のタイプのものであってよく、多数のバス構造を使用するものであってよい。システムメモリ２２は、ＲＯＭ２４とＲＡＭ２５を包含する。ＲＯＭ２４にストアされた基本入力／出力システム（ＢＩＯＳ）は、パーソナルコンピュータ２０のコンポーネントの間に情報を転送する基本ルーチンを包含する。ＢＩＯＳ２４はまた、システムのスタートアップルーチンを包含する。パーソナルコンピュータは更に、ハードディスク（図示せず）から読み出し、該ディスクに書き込むハードディスクドライブ２７と、リムーバブル磁気ディスク２９から読み出し、該ディスク２９に書き込む磁気ディスクドライブ２８と、ＣＤ−ＲＯＭ又は他の光学媒体のようなリムーバブル光ディスク３１から読み出し、該ディスク３１に書き込む光ディスクドライブ３０とを包含する。ハードディスクドライブ２７、磁気ディスクドライブ２８、及び、光ディスクドライブ３０は、ハードディスクドライブインターフェース３２と磁気ディスクドライブインターフェース３３と、光ディスクドライブインターフェース３４のそれぞれによってシステムバス２３に接続される。ドライブ及びそれらの関係するコンピュータ読み取り可能媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、及び、パーソナルコンピュータ２０に関する他のデータの不揮発的なストレージを提供する。ここで記載した例示的な環境は、ハードディスク、リムーバブル磁気ディスク２９及びリムーバブル光ディスク３１を採用するけれども、コンピュータによってアクセス可能なデータをストアすることができる他のタイプのコンピュータ読み取り可能媒体をまた具体的な操作環境に使用することもできることは当業者にとって明らかであろう。かかる媒体は、磁気カセット、フラッシュメモリカード、ディジタル汎用ディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭ及び同様なものを包含する。
　　　【００１２】
　プログラムモジュールは、ハードディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４、及びＲＡＭ２５にストアされうる。プログラムモジュールは、オペレーティングシステム３５と、１又はそれ以上のアプリケーションプログラム３６と、他のプログラムモジュール３７と、プログラムデータ３８とを包含しうる。ユーザは、ユーザは、キーボード４０及びポインティングデバイス４２のような入力デバイスを介してコマンド及び情報をパーソナルコンピュータに入力する。他の入力デバイス（図示せず）は、マイクロホン、ジョイスティック、ゲームパッド、衛生アンテナ（サテライト・ディッシュ）、スキャナ等を包含する。これら及び他の入力デバイスはしばしば、システムバス２３に接続されたシリアルポートインターフェース４６を介して演算ユニット２１に接続されるが、それらは、パラレルポート、ゲームポート、又はユニバーサルシリアルバス（ＵＳＢ）のような図１に示されていない他のインターフェースを介して接続されうる。モニタ４７又は他の表示デバイスまたは、ビデオアダプタ４８のようなインターフェースを介してシステムバス２３に接続されうる。モニタに加え、パーソナルコンピュータは典型的には、スピーカ及びプリンタのような楽しゅう偏出力デバイス（図示せず）を含む。」
（ｄ）「【００１５】
　本発明では、アプリケーションプログラム３６としてパーソナルコンピュータ２０で稼働する在来のウェブブラウザが、リモートコンピュータ４９からアプレットを自動的にダウンロードする。「アプレット」は短いプログラムであり、通常は単一の関数で実行され、他のアプリケーション内で実行されるように設計されている。アプレットは、それらが必要なときにリモートコンピュータからしばしばダウンロードされ、それらがプライマリアプリケーションによって実行された後、ローカルコンピュータからときどき消去されうる。
　　　【００１６】
　図２は、本発明における、アプレットを稼働するためのファシリティを含む殆どが在来の実行環境を示す。用語「アプレット」は、従来技術において正確に定義されていない。この用語は一般的には、単一の関数又は制限された範囲の関数を実行するための小さなプログラムと呼ばれるが、用語は本来は、プログラムのサイズ又はその関数の範囲を制限されない。アプレットは、特定の目的でＷＷＷページのようなオンラインソースからしばしばダウンロードされ、実際には、アプレットはダウンロードされるとすぐに実行され、ついで実行後削除される。以下に記載する好ましい実施形態では、用語「コントロール」又は「ActiveXコントロール」は、アプレットと同意語と考えて良い。ある場合では、発明それ自身が小さなプログラム、ダウンロードされたプログラム、又は、他のいかなるプログラムの特定のフォームで使用することを制限しない。本発明は、「信頼される」ことがないいかなるプログラムについても有用である、即ち、該プログラムとは、システムリソースに十分にアクセスしたならば、システムを損傷させるかも知れない、不確実な出所又は効果のプログラムである。
　　　【００１７】
　Windows95のようなオペレーティングシステム３５は、通常のアプリケーションプログラム３６をメモリ内にロードするためのローダモジュール３５１を採用する。プログラム３６は、ライン３６１によって表されるような演算ユニット２１に命令を直接送信することによって、オペレーティングシステム３５の制御下で実行する。プログラム３６は、アプリケーションプログラムインターフェース（ＡＰＩ）コード３５２−３５４のブロックを呼び出すことによって標準のＡＰＩファンクションを実行する。各ＡＰＩは、図１のディスプレィ４７にダイアログボックスを表示するように、特定のレベルのファンクションを実行するためのプロセッサ２１によって直接実行可能な命令を包含する。ＯＳ３５は、一般的に、数千の独立したＡＰＩを含んでおり、数ダースのダイナミックリンクライブラリ（ＤＬＬ）として通常パッケージングされており、Microsoft WindowsNTオペレーティングシステムでは、これらのDLLは、集合名詞的に「Win32」として知られている。
　　　【００１８】
　エミュレータプログラムによって、ある演算ユニット２１用に書かれたアプリケーションプログラムが、異なる命令セットを有する別の演算ユニットで実行される。ここで採用する特定のWx86VMエミュレータ３９は、インテル「ｘ８６」プロセッサ（８０３８６、８０４８６、ペンティアムなど）用に書かれたプログラムをDigital Equipment Corp.のAlpha及びIBMのPowerPCのようなプロセッサで実行するためにオリジナルに開発されたものである。それについては、出願中であるシリアル番号08/912、454及び08/904、057により詳細に記載してある。本目的に関して、Wx86VMと呼ばれるいくぶん修正されたバージョンは、殆どの修正されていない命令をx88プロセッサ２１に通すが、記載するようなその他をブロックし、変換する。Wx86VMは、「サンクコード」（又は単に「サンク」）３９１−３９３と呼ばれる変換モジュールによってＡＰＩを実行する際にWx86をまねるが、ここでのサンクコードの目的は、セキュリティを提供することであり、異なるプラットフォーム用に書かれたＡＰＩコードを実行するために、あるプラットフォームからAPIコールをすることができるというそれらの本来の目的ではない。
　　　【００１９】
　３６２のようなアプレットが実行されるとき、インターネットウェブブラウザのようなホストプログラム３６は、エミュレータ３９を呼び出す。エミュレータは、アプレットコードを所定のメモリ領域にロードするため、及びそれの使用のために別の所定のメモリ領域を割り当てるために、それ自身のローダモジュール３９６を採用する。これらの領域は、そのアプレットに関する「サンドボックス（sandbox）」と呼ばれる。アプレットの実行中、エミュレータ３９は、アプレットのコードを、サンドボックスの外側に存在するコンパイルされたキャッシュにコンパイルする。コンパイルプロセス中、エミュレータはまた、メモリスニフ（sniff）コード３９４をキャッシュ内に挿入する。
　　　【００２０】
　アプレット３６２は、それが書かれた同じプロセッサプラットフォーム２１で実行するので、エミュレータ３９は、ActiveXコントロールを実行するために（ライン３６３で表された）個々の命令を変換する必要がない。しかしながら、それは、セキュリティを提供する目的のためにそれらをフィルタリングし、変換する。例えば、ＡＰＩはオペレーティングシステム３５のカーネルを呼び出すために、ｘ８６割り込み（ＩＮＴ）命令を使用する。それ故、コントロールにおけるINT命令は、ＡＰＩサンク３９１−３９３及びスニフコード３９４をバイバスすることができ、カーネルを直接呼び出すことができる。それ故、エミュレータ３９は、この命令を無条件にブロックし、それは、ライン３６４に全く出力コードを生成しない。ライン３６３でのサブルーチンコール（CALL）及びリターン（RET）、無条件／条件付のジャンプ（JMP/Jxx）のような他の問題のある命令は、サブルーチンコールによってライン３６４に置換され、これらの命令のひとつがシミュレーションされたとき、既にコンパイルされたコードのキャッシュは、コール又はジャンプのキャッシュ内の宛先アドレスを判断するために検索される必要がある。
　　　【００２１】
　アプレット３６２からのＡＰＩコールは、APIコード３５２−３５４に直接処理されない。むしろ、サンクコード３９１−３９３はそれらをインターセプトし、それらで何をするか決定する。３９１でのようないくつかのコールは、サンク３９１によって対応するAPI３５２に直接通され、これらのコールは、システムに大混乱をもたらすことはなく、従って、セキュリティリスクが存在しない。３９２のような他のサンクは、その特定のコールの所定の特徴に依存して、それに対応するAPI353にコールを通すかどうか決定し、それをAPIに出す前にコールを修正することができる。３９３のようなあるサンクは、コールをそれらのAPI354に完全に認めず、これらのコールは、システムのセキュリティを犯し、信頼できないアプレット３６２によって許容されない。」
（ｅ）「【００２２】
　図３は、パーソナルコンピュータ２０で実行されるアプレットがパーソナルコンピュータのセキュリティを有しない全てのオペレーティングシステムサービスにアクセスすることができる発明のある実施形態の大まかなステップ４００を図示する。
　　　【００２３】
　ステップ４１０では、ウェブブラウザのようなホストアプリケーションがアプレットを割り当てられたメモリ範囲にロードする。割り当てられたメモリ範囲を、このアプリケーションではサンドボックスと呼ぶ。サンドボックスは、アプレットをストアするための最初のメモリセグメントと、アプレットを実行する間、ストレジをアドレス可能にするためのランタイムメモリセグメントとの両方を含み、これらは在来のいかなる手段でも割り当てられ得る。この実施形態では、OS35は、ステップ４１１でエミュレータ３９を呼び出す。ステップ４１２は、アプレット３６２のコードをストアするために、図１のＲＡＭ２２におけるアドレスの領域及び範囲を割り当て、ランタイムワーキングストレージを使用するためのアプレットに関する他の領域を割り当て、これらの２つの領域は、他のいかなるアプレット、アプリケーションプログラム、又は他のシステムのファシリティに影響を与えることなく、安全に実行することができるサンドボックスを一緒に構成する。それらは、各セキュリティドメインのためのひとつのXW86サンドボックスとなる、即ち同じセキュリティ設定を有する全てのコントロールが同じサンドボックスでプレイする。セキュリティ設定がウェブページのＵＲＬ（uniform resource locator）を含むので、各オープンウェブページは、少なくとも１つのサンドボックスを有する。通常、同じウェブページの全てのコントローラは、同じサンドボックスにある。それらのカスタムインターフェースが安全でないけれども、サンドボックス内でインターアプレットを実行することは許容される。
　　　【００２４】
　ステップ４２０は、実行のためにアプレットを準備する。
　　　【００２５】
　ステップ４２１は、リンクを備えるアプレットの静的リンクをサンクモジュールと置換する。即ち、エミュレータ３９は、アプレット３６２のコード内でAPI352-354に対する全てのコールを見つけ、それらを対応するサンク３９１−３９３に対するコールに変更する。静的リンクは、アプレットの実行中、一定を維持するリンクである。DLL即ちダイナミックリンクライブラリは、実行可能な関数のライブラリ、又は、Windowsアプリケーションによって使用することができるデータである。典型的には、DLLは、１又はそれ以上の特定の関数を提供し、DLLは、DLLに対する静的又は動的なリンクのいずれかを生成することによってアクセスされる。DLLは、最後に拡張子.dllを備える記述でファイルされる。サンクDLLは、サンドボックス内の安全なAPIである。サンクDLLは、安全であると考えられない多くのAPIをブロックし、制限する。例えば、CreateFileが知られたロケーションにだけ許容されうる。同様に、アプレットは、パスワードを記録するための他の処理を生成することができない。上述のように、いくつかのサンクは、対応するAPIにコントロールを単に通す。例えば、「CreateWindow」、「CreateDialog」、「CreateIcon」、「CreateCursor」と名付けられたWin32API及び同様な関数は、他のプロセスに影響せず、信頼できないコードを許容しうる。一方、所定の他のAPIは、信頼できないコードを完全に利用できなくさせなければならない。例えば、「CreateProcess」を許容することにより、信頼できないアプレットをサンドボックスの外側で別のプログラムを実行することができ、「ExitWindowsEx()」のようなオペレーションを完全にブロックすることができ、それにより、信頼できないコードは現在のユーザをログオフすることができず、コンピュータをオフにすることができない。３９３のようなサンクが、ライン３９５によって表示されたコントロールにエラーコードバックを戻すことによってAPIをブロックする。
　　　【００２６】
　いくつかのAPIはある条件下、又は所定の修正で許容されうる。この場合、３９２のようなサンクは、それが対応するAPI３５３を呼び出すか又はブロックするかのいずれかであった後、内部演算を実行し、修正されたパラメータをAPIに通す。例えば、「SendMessage()」は通常メッセージをウィンドウに送信する。SendMessageサンクにより、ActiveXコントロールがメッセージをそのコントロールによって生成されたウィンドウに送信することができる。しかしながら、サンクは、ウェブブラウザによって、又は他のアプリケーションプログラムによるそれ自身の全てのメッセージをブロックする。このことにより、コントロールが、他のプログラムに属するウィンドウによって実行されるべきであるキーストロークをまねるためにVM_CHARメッセージを送信することによってセキュリティを侵害することを防止する。
　　　【００２７】
　他の例は、メモリをどんな場所にも普通に割り当てる「GlobalAlloc」、「HeapCreate」のようなWin32APIを含む。これらのAPIに関するサンクは、対応するAPIの全体のコードを組み込み、サンドボックスメモリ内で完全に実行するようにリコンパイルし、サンドボックスの境界内のみでメモリを割り当てることができる。
　　　【００２８】
　次いで、ステップ４２２は、アプレットのコードを図２のエミュレータ３９によって実行されうるオブジェクトコードにコンパイルする。コードが要求されたものになったとき、コンパイルは直ちに又はパート毎に全て進行し、コンパイルされたコードは、サンドボックスの外側に配置された図４のコンパイルされたキャッシュ３５７に配置される。これらの方法におけるコンパイルは、在来のものであり、発明の本質には関係しない。
　　　【００２９】
　ステップ４２３は、認められないメモリリファレンスに対する禁止を強化するためにアプレット自身のコードにチェックコードを挿入する。「スニフ（sniff）コード」と呼ばれるこのチェックコードは、アプレットのコードによって全てのメモリの読み書きを調べ、その結果からそれらを許可し、又は許可しない。アプレットがサンドボックスの外側のメモリにアクセスするのを防止することにより、アプレットのセキュリティは向上する。予め割り当てられた範囲からだけのアプレットに対して全てのメモリを提供することにより、スニフコードオーバーヘッドを低減させ、その結果、メモリ範囲の効率的なチェックを生じる。更なる最適化技術が、基本のブロックレベルでコードをコンパイルすることによって追加される。例えば、種々のメモリリファレンスが同じレジスタを使用するアプレットによってなされるならば、コンパイラは、各アクセスに関するスニフコードに対する別々のコールを生成するのではなく、一回だけそのレジスタによってアドレス可能な全体の範囲をチェックすることができる。詳細な例を図４と一緒に示す。基本的には、スニフコードによって、割り当てられたサンドボックス内と、システムを損傷しない所定の他のメモリ内とだけで、アプレットがＲＡＭアドレスを参照することができる。（エミュレータ３９がサンドボックスの外側でメモリを参照することができないが、それはサンドボックスにメモリ領域を割り当てるための能力を有する。デバイス独立ビットマップイメージのような目的に関して、余分のスニフコードオーバーヘッドは労力より小さく、さもなければ最初のサンドボックス領域内にイメージをコピーするように要求される。）
　ステップ４３０は、アプレットを実行する。ステップ４３１は、命令シーケンスに続く。
　　　【００３０】
　現在の命令がAPIに対するコールであるならば、ステップ４２１によって配置されたリンクは、コールがステップ４３２で完全にブロックされ、ステップ４３３で実行され、ステップ４３４で更に処理され、次いで、ブロックされ又は許可されうるかどうか判断する。
　　　【００３１】
　現在の命令が、LOAD又はSTOREのようなメモリリファレンス命令であるならば、ステップ４３５によって、命令がそのサンドボックス内のアドレスを参照するならば、ステップ４３６がその命令を実行することができる。もしそうでなければ、ステップ４３７は、リファレンスがさもなければ許容されるかどうか判断する。もしそうならば、ステップ４３５はそれを実行し、さもなければ、ステップ４３８はアクセスをブロックし、エラーを返す。スニフコードはこれらのステップを実行する。他のX86命令は、ステップ４３６によって直接実行される。各命令の後、コントロールはステップ４３１に戻る。プロセス４００は、ホストアプリケーションがそれを終了するまで、続く。」
（ｆ）「【００３３】
　図４は、本発明に関するそれらの領域のみを示すシステムＲＡＭ２５のメモリマップである。予め割り当てられた範囲２５１は、サンドボックスを形成する。それは、アプレット３６２と、アプレットの実行中に、アドレス可能なワーキングストレージに関するランタイムメモリセグメント２５２と、変換コードサンク３９１−３９３（ここではサンク３９１としてだけ示す）をストアするためのセグメントと、をストアするための最初のメモリセグメントを包含する。サンドボックス２５１の外側のメモリ２２は、ここでは３５２によって表されるＡＰＩDLLと、カーネル32３５５とを包含する。他のワーキングメモリ領域は、３５６として表される。コンパイルされたキャッシュ３５７はまた、サンドボックス２１５の外側に配置される。セキュリティポリシーが実際に実行されることがここであるので、サンドボックス２１５の外側のWHKRNL32３２５の位置は、特に重要であり、それがサンドボックスの内側にあるならば、ルージュアプレットが、それを修正することによってセキュリティを妥協することができうる。」
（ｇ）「【００４２】
　アプレットの実行は、必要とされるコードをコンパイルし、コードをコンパイルされたキャッシュに置くことにより始まる。コンパイルされたコードは、メモリ読み書きオペレーションが安全なオペレーションであることを確認するためにそれにおいてスニフチェックを有する。アクセスされるメモリが、所定のサンドボックス領域の外側であるならば、メモリにアクセスする試みのオペレーションは失敗する。例えば、アプレットfoo.ocxが命令MOV EAX、[ESI+4]を包含するならば、コンパイラは、命令が安全であることを確認するためのMOV命令の前にスニフコードを挿入する。以下の命令：
　　　MOV EAX、[ESI+4]
は、スニフコードが挿入された後に、
　　　LEA ECX、[ESI+4]
　　　CALL SNIFFREAD4.ECX
　　　MOV EAX、[ECX]
となる。」
   　
　ここで、上記（ａ）乃至（ｇ）の記載について検討する。
（ア）上記（ｂ）によると、引用例１の課題は、ネイティブ即ち直接実行可能なコードで書かれたActiveXコントロールに対するセキュリティの確保であって、また、「実行可能なコードは、メモリの外側へのリファレンスが制限される予め割り当てられたメモリ範囲、即ちサンドボックス内にロードされる。実行中、実行可能なコードに追加されたチェック（「スニフコード（sniff code）」）は、これらの制限を強制する。」と記載されているように、該直接実行可能なコードのメモリへのアクセス制限を行うことである。
（イ）上記（ｃ）によると、引用例１の対象とするシステムは、パーソナルコンピュータ２０のフォームにおいて、演算ユニット２１と、システムメモリ２２を備えており、該システムメモリ２２のＲＡＭに各種プログラムが記憶され、また、該プログラムは上記演算ユニット２１により実行されるものであることは明らかであるから、ここには、
　「演算ユニット２１と、該演算ユニット２１により実行されるプログラムを記憶するシステムメモリ２２を備えたシステム」
　が記載されているといえる。
（ウ）上記（ｄ）の第【００１６】段落に「アプレットは、特定の目的でＷＷＷページのようなオンラインソースからしばしばダウンロードされ、実際には、アプレットはダウンロードされるとすぐに実行され、ついで実行後削除される。以下に記載する好ましい実施形態では、用語「コントロール」又は「ActiveXコントロール」は、アプレットと同意語と考えて良い。ある場合では、発明それ自身が小さなプログラム、ダウンロードされたプログラム、又は、他のいかなるプログラムの特定のフォームで使用することを制限しない。本発明は、「信頼される」ことがないいかなるプログラムについても有用である、即ち、該プログラムとは、システムリソースに十分にアクセスしたならば、システムを損傷させるかも知れない、不確実な出所又は効果のプログラムである。」と記載されているように、対象とするプログラムは、ActiveXコントロールを含む直接実行可能なコードであるアプレットであり、また、その他システムを損傷させるかも知れない、不確実な出所又は効果のプログラムである。
（エ）上記（ｄ）の第【００１９】段落の「エミュレータは、アプレットコードを所定のメモリ領域にロードするため、及びそれの使用のために別の所定のメモリ領域を割り当てるために、それ自身のローダモジュール３９６を採用する。これらの領域は、そのアプレットに関する「サンドボックス（sandbox）」と呼ばれる。アプレットの実行中、エミュレータ３９は、アプレットのコードを、サンドボックスの外側に存在するコンパイルされたキャッシュにコンパイルする。コンパイルプロセス中、エミュレータはまた、メモリスニフ（sniff）コード３９４をキャッシュ内に挿入する。」との記載、また、上記（ｅ）の第【００２９】段落の「ステップ４２３は、認められないメモリリファレンスに対する禁止を強化するためにアプレット自身のコードにチェックコードを挿入する。「スニフ（sniff）コード」と呼ばれるこのチェックコードは、アプレットのコードによって全てのメモリの読み書きを調べ、その結果からそれらを許可し、又は許可しない。アプレットがサンドボックスの外側のメモリにアクセスするのを防止することにより、アプレットのセキュリティは向上する。」との記載、及び上記（ｇ）の記載によると、エミュレータ３９は、アプレットにサンドボックス（sandbox）と呼ばれる所定のメモリ領域を割り当ててロードし、アプレットの実行によりサンドボックスの外側のメモリにアクセスするのを防止するために、アプレット自身のコードにメモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ（sniff）コードと呼ばれるチェックコードをコンパイルプロセス中に挿入してキャッシュに記憶するものである。
　なお、上記エミュレータ３９自体は、上記（イ）の演算ユニット２１で直接実行されるものであり、また、システムメモリ２２に記憶されるものであることは、当業者であれば自明な事項である。
　そうするとここには、
「演算ユニット２１で直接実行され、
　アプレットの実行により、該アプレットに割り当てられたメモリ領域であるサンドボックスの外側のメモリにアクセスするのを防止するために、アプレット自身のコードにメモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ（sniff）コードと呼ばれるチェックコードを挿入してキャッシュに記憶するように構成されたシステムメモリ２２に記憶されるエミュレータ３９」
が記載されているといえる。
（オ）上記（ａ）の記載、また、上記（ア）及び（ウ）で述べたように、アプレットは演算ユニット２１で直接実行可能なネイティブコードで書かれており、また、上記（エ）で述べたように、エミュレータ３９によりアプレットのコードにスニフ（sniff）コードと呼ばれるチェックコードが挿入されてキャッシュに記憶される。なお、該キャッシュは上記（ｆ）に示されるようにシステムメモリ２２内のＲＡＭ２５に配置されるものである。
　そうするとここには、
「演算ユニット２１で直接実行可能なネイティブコードで書かれ、メモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ（sniff）コードと呼ばれるチェックコードが挿入され、システムメモリ２２に記憶されたアプレット」
が記載されているといえる。
  　
　以上、（ア）乃至（オ）によれば、引用例１には以下の発明（以下、「引用発明」という）が記載されていると認められる。
「演算ユニット２１と、
　該演算ユニット２１により実行されるプログラムを記憶するシステムメモリ２２と、
　前記演算ユニット２１で直接実行され、
　アプレットの実行により、該アプレットに割り当てられたメモリ領域であるサンドボックスの外側のメモリにアクセスするのを防止するために、アプレット自身のコードにメモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ（sniff）コードと呼ばれるチェックコードを挿入してキャッシュに記憶するように構成されたシステムメモリ２２に記憶されるエミュレータ３９と、
　前記演算ユニット２１で直接実行可能なネイティブコードで書かれ、メモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ（sniff）コードと呼ばれるチェックコードが挿入され、システムメモリ２２に記憶されたアプレットと
を備えたシステム」
（２−２）原査定の拒絶の理由に引用され、本願の優先日前の平成１６年９月１６日に出願公開された特開２００４−２５８７２８号公報（以下、「引用例２」という。）には、図面とともに以下の記載がある。
（ｈ）「【０００８】
図１は、本発明の適用対象システム構成の一例を示す図である。本システムは、第２実行プログラム１１を実行し、その実行時間を測定するコンピュータであるプログラム実行マシン１と、プログラムを開発し、ソースプログラム２１を実行形式または中間コードの第１実行プログラム２３に変換するコンピュータである開発機２と、第１実行プログラム２３に実行時間測定のための監視コードを追加し第２実行プログラム１１を生成するコンピュータであるプログラム操作機３と、それらを接続するネットワーク４とからなる。
・・・（省略）・・・
【００１８】
次に監視コード追加部３２は、ステップＳ２５およびステップＳ２７で前記監視コード追加に伴い監視コード自体および第１実行プログラム２３の解析結果にＪａｖａバイトコードレベルでのジャンプ先番地変更等の必要があるか否かを判断し、監視コードの修正の必要があれば、ステップＳ２６で監視コードの修正を行い、第１実行プログラム２３の修正の必要があれば、ステップＳ２８で第１実行プログラム２３の修正を行う。ステップＳ２８における第１実行プログラム２３の修正は、例えば、後述する図４のＪａｖａソースプログラム第８行目および第１９行目のｔｒｙ節、ｆｉｎａｌｌｙ節の追加が該当する。」
　そうすると、引用例２には以下の技術事項（以下、「引用例２記載事項」という）が記載されていると認められる。
「実行プログラムに実行時間測定のための監視コードを追加した際に、前記監視コード追加に伴いジャンプ先番地変更等の必要があるか否かを判断して実行プログラムの修正を行うこと」
（２−３）原査定の拒絶の理由に周知技術として引用された「真島馨、ツールを使ってボトルネックを突き止めよう、日経ソフトウエア、日経ＢＰ社、２０００年３月２４日、第３巻、第４号、ｐ．９８−１０５」には、特に第１０１頁左欄第１１行乃至第１８行に以下の記載がある。
（ｊ）「Quantifyは、前述したように対象となるアプリケーションの実行ファイル（ｅｘｅ）さえあれば、パフォーマンス分析できる。これは、アプリケーションのバイナリ・コードに直接チェック命令を挿入して、メモリー・アクセスを監視する方法によるもので、開発元の米Rational Softwareでは、ＯＣＩ（Object Code Insertion）技術と呼んでいる。」
     　
（３）対比  
　そこで、本件補正発明と引用発明とを対比する。
（３−１）引用発明における「演算ユニット２１」及び「該演算ユニット２１により実行されるプログラムを記憶するシステムメモリ２２」は、本件補正発明の「中央演算処理ユニット」及び「前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリ」に相当することは明らかであり、また、引用発明のシステムも、特定の処理を実行するコンピュータそのものであって、コンピュータ・モジュールであると言える。
　そうすると、本件補正発明と引用発明は、
「コンピュータ・モジュールであって、中央演算処理ユニットと、前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリ」
を備える点で一致する。
（３−２）引用発明の「エミュレータ３９」と、本件補正発明の「マシンコード安全化ツール」を比較すると、引用発明の「アプレット」は一種のアプリケーション・プログラムであるから本件補正発明の「アプリケーション・プログラム」に相当し、また、引用発明の「サンドボックス」は本件補正発明の「前記コンピュータ・モジュールの指定メモリ領域」に相当し、また、引用発明の「アプレットの実行により、該アプレットに割り当てられたメモリ領域であるサンドボックスの外側のメモリにアクセスするのを防止するために、アプレット自身のコードにメモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ（sniff）コードと呼ばれるチェックコードを挿入」することは、本件補正発明の「アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに安全性検査実行コードを挿入し」に相当するものと認められる。
　また、引用発明の「エミュレータ３９」は「演算ユニット２１で直接実行され」、「システムメモリ２２に記憶される」ものであり、本件補正発明の「マシンコード安全化ツール」も「中央演算処理ユニット上で直接実行し」、「メモリ内」に置かれる点で一致している。
　そうすると、本件補正発明と引用発明は、
「前記中央演算処理ユニット上で直接実行し、アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに安全性検査実行コードを挿入するように構成された前記メモリ内のツール」
である点で共通するものである。
（３−３）引用発明の「アプレット」は「演算ユニット２１で直接実行可能なネイティブコードで書かれ」ており、本件補正発明の「アプリケーション・プログラム」も「中央演算処理ユニット上で直接実行するように」なっている点で共通しており、また、引用発明の「アプレット」は「メモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ（sniff）コードと呼ばれるチェックコードが挿入され、システムメモリ２２に記憶され」ており、本件補正発明の「アプリケーション・プログラム」も「 前記安全性検査実行コードを含む、前記メモリ内の１以上」記憶される点で共通しているものと認められる。
　そうすると、本件補正発明と引用発明は、
「前記中央演算処理ユニット上で直接実行され、前記安全性検査実行コードを含む、前記メモリ内の１以上のアプリケーション・プログラム」
である点で共通するものである。
（３−４）以上のことから、本件補正発明と引用発明とは、
「コンピュータ・モジュールであって、
　中央演算処理ユニットと、
　前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリと、
　　前記中央演算処理ユニット上で直接実行し、
　　アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに安全性検査実行コードを挿入するように構成された前記メモリ内のツールと、
　前記中央演算処理ユニット上で直接実行され、前記安全性検査実行コードを含む、前記メモリ内の１以上のアプリケーション・プログラムと
を備えるコンピュータ・モジュール。」
　である点で一致し、以下の点で相違する。  
　　
　　［相違点１］ 
　本件補正発明の「マシンコード安全化ツール」では、「前記アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換えるように構成」されているのに対し、引用発明ではそのようになっていない点。
　　［相違点２］　
　本件補正発明の「アプリケーション・プログラム」は、「中央演算処理ユニット上で直接実行するようにコンパイル及びアセンブル」されたものであるのに対し、引用発明の「アプレット」は「演算ユニット２１で直接実行可能なネイティブコードで書かれ」てはいるものの、「コンパイル及びアセンブル」されたものであるか否かが不明である点。
　　［相違点３］　
　本件補正発明の「アプリケーション・プログラム」は、「マシンコード」であるのに対し、引用発明の「アプレット」はどのようなコードとされているのか不明である点。
 　 
（４）当審の判断  
　上記相違点について検討する。  
（４−１）［相違点１］について
　この点について、上記引用例２には「実行プログラムに実行時間測定のための監視コードを追加した際に、前記監視コード追加に伴いジャンプ先番地変更等の必要があるか否かを判断して実行プログラムの修正を行うこと」（引用例２記載事項）が記載されており、また、一般にプログラムのパッチ修正時にコードの挿入・削除に伴う飛び先アドレスの補正は周知の技術（例えば、特開平５−１８９２２５号公報等参照）である。
　そして、引用発明においても「アプレット」に「メモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ（sniff）コードと呼ばれるチェックコード」を追加挿入すれば、各コードのアドレスにずれが生じ、ジャンプ先アドレスの変更等が必要になる場合があることは当業者ならば自明であるから、該アドレスのずれに対処するために上記周知技術を採用し上記相違点１に係る構成とすることは当業者であれば容易に想到しえたことである。
　したがって、この［相違点１］には格別の技術的進歩性はない。
（４−２）［相違点２］について
　一般に、プログラムの作成にコンパイラやアセンブラを使用して最終的に直接実行可能ないわゆるマシンコードを生成することは技術常識であるから、引用発明の「アプレット」についても「コンパイル及びアセンブル」されたものであることは当業者であれば自明である。
　したがって、この［相違点２］には格別の技術的進歩性はない。
（４−３）［相違点３］について
　引用発明における「エミュレータ３９」について、上記（２−１）（ｅ）には「【００２８】次いで、ステップ４２２は、アプレットのコードを図２のエミュレータ３９によって実行されうるオブジェクトコードにコンパイルする。コードが要求されたものになったとき、コンパイルは直ちに又はパート毎に全て進行し、コンパイルされたコードは、サンドボックスの外側に配置された図４のコンパイルされたキャッシュ３５７に配置される。これらの方法におけるコンパイルは、在来のものであり、発明の本質には関係しない。」と記載されており、アプレットのコードをエミュレータ３９によって実行されうるオブジェクトコードにコンパイルするとの記載があるものの、ここでいうオブジェクトコードがどのようなコードであるのかは不明である。
　しかしながら、「アプレット」はそもそも演算ユニット２１で直接実行可能なネイティブコードで書かれているのであるから、これをわざわざ別のコードに変換し、これをエミュレータ３９が例えばインタープリタで解釈実行するというのは技術常識からして少々無理がある。
　また、上記（２−１）（ｄ）の「【００１８】・・・ここで採用する特定のWx86VMエミュレータ３９は、インテル「ｘ８６」プロセッサ（８０３８６、８０４８６、ペンティアムなど）用に書かれたプログラムをDigital Equipment Corp.のAlpha及びIBMのPowerPCのようなプロセッサで実行するためにオリジナルに開発されたものである。それについては、出願中であるシリアル番号08/912、454及び08/904、057により詳細に記載してある。
本目的に関して、Wx86VMと呼ばれるいくぶん修正されたバージョンは、殆どの修正されていない命令をx88プロセッサ２１に通す
アプレット３６２は、それが書かれた同じプロセッサプラットフォーム２１で実行するので、エミュレータ３９は、ActiveXコントロールを実行するために（ライン３６３で表された）個々の命令を変換する必要がない。
他のX86命令は、ステップ４３６によって直接実行される。
　また、さらに上記（２−３）（ｊ）で示したように、アプリケーションのバイナリ・コードに直接チェック命令を挿入して、メモリー・アクセスを監視することは周知の技術であることも考え合わせれば、そもそも直接実行可能なアプレットに対して、メモリ読み書きオペレーションが安全なオペレーションであることを確認するためのスニフ（sniff）コードと呼ばれるチェックコードを挿入したアプレットも、演算ユニット２１で直接実行可能なマシンコードとすることは、当業者であれば容易に想到しえたことである。
　したがって、この［相違点３］には格別の技術的進歩性はない。
（４−４）結論
　したがって、上記［相違点１］乃至［相違点３］に係る本件補正発明の構成は、引用発明、引用例２記載事項及び周知技術に基づいて当業者が容易に発明をすることができたものである。
　そして、本件補正発明の作用効果も、引用発明、引用例２記載事項及び周知技術から当業者が予測できる範囲のものである。  
　
（５）むすび  
　以上のとおり、本件補正発明は、引用発明、引用例２記載事項及び周知技術に基づいて当業者が容易に発明をすることができたものであるから、特許法第２９条第２項の規定により、特許出願の際独立して特許を受けることができないものである。  
　したがって、本件補正は、平成１８年法律第５５号改正附則第３条第１項によりなお従前の例によるとされる同法による改正前の特許法第１７条の２第５項で準用する同法第１２６条第５項の規定に違反するものであるから、同法第１５９条第１項で読み替えて準用する同法第５３条第１項の規定により却下すべきものである。  
　　
３．本願発明について  
　平成２４年５月２４日付けの手続補正は上記のとおり却下されたので、本願の請求項１４に係る発明（以下、「本願発明」という。）は、平成２３年９月２０日付け手続補正書の特許請求の範囲の請求項１４に記載された、次のとおりのものである。  
「【請求項１４】
　コンピュータ・モジュールであって、
　中央演算処理ユニットと、
　前記中央演算処理ユニット上で実行されるプログラムを記憶するように構成されたメモリと、
　　前記中央演算処理ユニット上で直接実行し、
　　アプリケーション・プログラムによる前記コンピュータ・モジュールの指定メモリ領域外への読み出し、書き込み、及びジャンプのうち少なくとも何れかを制御するために、前記アプリケーション・プログラムに安全性検査実行コードを挿入するように構成された前記メモリ内のマシンコード安全化ツールと、
　前記中央演算処理ユニット上で直接実行するように構成され、前記安全性検査実行コードを含む、前記メモリ内の１以上のアプリケーション・プログラムと
を備えるコンピュータ・モジュール。」
 　  
（１）引用例  
　原査定の拒絶の理由で引用された引用例及びその記載事項は、前記「２．（２）」に記載したとおりである。  
 　  
（２）対比・判断  
　本願発明は、前記「２．（１）」で検討した本件補正発明の発明特定事項である「アプリケーション・プログラム」が、中央演算処理ユニット上で直接実行するように「コンパイル及びアセンブル」されるものであって、「マシンコード」であるとの限定を省き、また、「マシンコード安全化ツール」がさらに「アプリケーション・プログラム内の分岐命令及びジャンプ命令のアドレスを置き換える」処理を行うものであるとの限定を省いたものに相当するものである。
　そうすると、本願発明の発明特定事項を全て含み、更に他の限定事項を付加したものに相当する本件補正発明が前記「２．（４）」に記載したとおり、引用発明、引用例２記載事項及び周知技術に基づいて当業者が容易に発明をすることができたものであるから、本件補正発明から上記限定事項を省いた本願発明も、同様の理由により、引用発明、引用例２記載事項及び周知技術に基づいて当業者が容易に発明をすることができたものである。
 　 
（３）むすび 
　以上のとおり、本願発明は、引用発明、引用例２記載事項及び周知技術に基づいて、当業者が容易に発明をすることができたものであるから、その余の請求項について検討するまでもなく、特許法第２９条２項の規定により特許を受けることができない。
　よって、結論のとおり審決する。