6

アプリケーションがあり、安全な環境で実行されていることを確認しようとしています。まず、Windows が正規品かどうかを確認します。これにより、ユーザーが Windows を最新の状態に保つ可能性が高くなります。そうでない場合は、Windows を検証する必要があるため、リスクの可能性があることをユーザーに警告するメッセージを表示します。

では、もう少しやりたいと思います。また、ユーザーがウイルススキャナーをインストールしているかどうかも確認したいと思います。彼がインストールしている限り、私はどちらでもかまいません。次に、ファイアウォールがインストールされているかどうかを確認する場合も同じです。また、可能であれば、ユーザーが Windows/スキャナー/ファイアウォールを最後に更新したのがいつであるかを確認して、古すぎないことを確認したいと考えています。そう:

1) ウイルススキャナがインストールされているかどうかを確認するにはどうすればよいですか?
2) ウイルススキャナがいつ更新されたかを確認するにはどうすればよいですか?
3) ウィルススキャナが最後にシステム全体のチェックをいつ行ったかを検出する方法は?
4) ファイアウォールがインストールされ、アクティブになっているかどうかを検出するにはどうすればよいですか?
5) Windows が最新の更新プログラムをいつ受信したかを確認するにはどうすればよいですか?

基本的に、アプリケーションの起動時に、これらのいずれかに問題が発生した場合に備えて、警告付きの画面を (1 日に 1 回だけ) 表示したいと考えています。これは、私のアプリケーションが、ユーザーがクライアントから収集するあらゆる種類の機密情報を処理するためです。(銀行口座番号、パスポートの ID 番号、NAW+DOB、収入などが含まれます。) 基本的に、システムに問題がある場合、ユーザーはこれらの問題を認識していることを確認する必要があります。自分のシステムが安全でない可能性があることを知りながら続行した場合、私のアプリケーションから責任を負う可能性がなくなります...


そして言語?基本的に、WIN32 の例では C++ または Delphi、.NET の例では C# です。言語よりも.NET/Windows API/.NETに関するものです。

4

2 に答える 2

7

これのほとんどはWMI経由でできると思います

このようなもの:

ManagementObjectSearcher wmiData = new ManagementObjectSearcher(@"root\SecurityCenter", "SELECT * FROM AntiVirusProduct");
ManagementObjectCollection data = wmiData.Get();

foreach (ManagementObject virusChecker in data)
{
    // This is the virus checkers name.
    String virusCheckerName = virusChecker["displayName"];
}

[どの言語について言及しなかったので、上記のサンプルは C# ですが、WMI はほとんど何でも実行できます]

[編集: 同じことができますが、ファイアウォール情報の代わりに "FirewallProduct" を使用します。また、ウイルス対策については、結果の「productUptoDate」プロパティで最新かどうかを確認できます]

WMI リファレンスは、他のものを見つけるのに役立ちます。(1、2、3、および 4 は、WMI を介して利用できると確信しています。5 についてはよくわかりませんが、おそらくそうあるべきだと思います)

おそらく、 WMI Code Creatorは、使用する必要があるクエリ/オブジェクトをテストして把握するのに役立つでしょう。また、 ScriptomaticおよびWMI 管理ツールも役立つ場合があります。

于 2009-09-22T11:12:23.237 に答える
3

.NET に依存する方法ではなく C++ を探していたので、この回答とMSDN の例を混ぜ合わせました: Getting WMI Data from the Local Computer

AV 名を取得するために変更する必要があるコマンドは次のとおりです。

  • _bstr_t(L"ROOT\\CIMV2")_bstr_t(L"ROOT\\SecurityCenter2")これによると、SecurityCenter2 は Win 7、Vista SP2 以降用であることに注意してください。Vista SP2 未満では、SecurityCenterを使用する必要があります。
  • bstr_t("SELECT * FROM Win32_OperatingSystem")bstr_t("SELECT * FROM AntivirusProduct")
  • hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);hr = pclsObj->Get(L"displayName", 0, &vtProp, 0, 0);

この変更されたコードはチェック済みで、完全に機能しています。

より簡単な方法として、このアルゴリズムを常に繰り返し、名前で AV を探すことができます。

于 2015-03-05T08:53:31.893 に答える