2011-10-18 12 views
2

私はC++で大学の試験ソフトウェアを実装しています。実行した後に誰かがそれを閉じることを防止したいと思います。その目的は、ユーザーがソフトウェアをコピーしたり、画面を印刷したり、保存したりするのを防ぐことです。ソフトウェアを終了する可能性はありますか?

私が最初にCTRL無効化の方法を考えていた - ALT - デルALT + F4ALT + タブ、および他のキーの組み合わせを、どうやらこれを、次のアプローチはWindows XPの後のバージョンでは特に簡単ではありません。

私の問題を解決するための実行可能なアプローチは何と思いますか?

+0

おそらく、押されたすべてのキーをチェックする小さなTSRを書くのは良いかもしれません。あなたが言及したような組み合わせを検出すると、割り込みチェーンを破るだけです。 – BlackBear

+0

あなたが説明していることは、ユーザーモードアプリケーションの範囲内では不可能です。これを可能にするカーネルドライバを書こうと思ったら、基本的にはルートキットを作ったことをお祝いします。 – Benj

+3

@BlackBear DOS TSR ???ワオ!!!おそらく私はまだ私のサイドキックのコピーを持っています! – xanatos

答えて

5

もちろん、あなたのアプリケーションを(おそらくパスワードが与えられていない限り)閉じることを拒否するすべての通常の手順を踏む必要があります。そのため、私は誰もが強制的に許可することを望まないそれを閉じてください。

1つの解決策は、あなたのアプリケーションをWindowsシェルにすることです。

もう1つ解決策は、現在ログインしているユーザーにアプリケーションをシャットダウンする権限がないようにコンピュータをセットアップすることです。

そして、正式にサポートされていない、汚れたあなたは私から聞いていなかったハッキン​​グされ、これを行うことで、最終的な解決策、:

public static class Utility 
{ 
    [DllImport("ntdll.dll", SetLastError = true)] 
    private static extern void RtlSetProcessIsCritical(UInt32 v1, UInt32 v2, UInt32 v3); 

    public static void BsodIfProcessEnds() 
    { 
     Process.EnterDebugMode(); 
     RtlSetProcessIsCritical(1, 0, 0); 
    } 

    public static void NoFireworksIfProcessEnds() 
    { 
     RtlSetProcessIsCritical(0, 0, 0); 
    } 
} 

警告:BsodIfProcessEndsそれは錫で言うまさにません。

+2

Hehe、試験をやっている学生が、テストを終わらせようとすると、即座にBSODが提示されるという考えが好きです... ;-) – Benj

+0

多くのありがとう。 2番目の選択肢は、大学のコンピュータの設定を変更するよう説得する必要があるため、実際には可能ではありません。私はWindowsシェルのアイデアとあなたのコードをチェックします。しかし、まず私はコードを理解しようとする:)多くのありがとう。 – Louis

+1

@Louis: 'RtlSetProcessIsCritical'は、Windowsがそれ自身のいくつかのプロセスをクリティカルなものとしてマークするためにWindowsが使用する文書化されていない関数呼び出しです(BSODもあります。 – Jon

3

制限されたユーザーアカウントのみをマシンに与え、アプリケーションを強制終了する権限をユーザーに与えないでください。

他の制限についても同じ操作を行い、アプリを作成する必要はありません。

ユーザーが管理者として実行されるようにするには、あなたが求めているものは不可能です。

+0

あなたの提案をありがとうございますが、コンピュータが大学のコンピュータであるため、これは実際には可能ではありません。コンピュータの設定を変更するために部門を派遣するのは簡単な選択肢ではありません:) – Louis

0

2つのアプリを作成することがあります。 あなたのアプリが稼動しているか常に確認しています 稼働していない場合は起動してください。これはサービス(単純なユーザーの場合は見つけにくい)です。

あなたもNTFSの許可で楽しいことがあります。 たとえば、ユーザーがアクセス権を持たない上位ディレクトリを作成し(コンテンツを表示しなくても)、ユーザーが読み取り権限を持つフォルダの下に作成します。 ユーザーが良いガウスを知っていない限り、アプリを見つけるのが少し難しくなります。

しかし、彼はtaskmanagerを起動することができましたが、おそらくそれに対してポリシーがあります。 ポリシーでは、制限されているため、他のアプリではなくアプリを実行することができます(そのため、コピーしたり、アプリを他のアプリに使うことはできません)。

関連する問題