0

ここに私が持っているもの:

  • ユーザーアプリケーション-それはMSVCプロジェクト、サービスであり、小さなBoost&STLを使用してC ++で記述されています(アプリはフックを使用してユーザーのアクションを取得しています)
  • ドライバー-これはFSMinifilterドライバーであり、USBのマウント/アンマウントアクションとファイルの移動を監視します

問題:XPでは、この2人はうまく連携しますが、VistaおよびWin7システムに移植し始めたとき、問題はすぐに発生しました。

  • 署名されていないため、ドライバーはインストールされません
  • Vista以降では、サービスが別のセッションに配置され、ユーザーセッションと対話できないため(f * ck!)、フックが機能していません。
  • UAC-オンのときにアプリケーションからドライバーへのアクセスを許可しませんでした。

しかし:聞きたいのですが、VistaとWin7のドライバーとユーザーアプリケーションをUAC-is-onで接続することは本当に可能ですか?可能であれば、この対話を実行するための条件は何ですか(たとえば、ドライバーは署名された、または多分何か他のもの...)?

まことにありがとうございます!

4

2 に答える 2

2

ドライバーは、ユーザー モード アプリケーションが開いて対話するための仮想デバイスを公開する必要があります (多くの場合、IOCTL を介して)。

これは、既に使用しているファイルシステム デバイス レイヤーから完全に独立しています。

ドライバーがこの新しい仮想デバイスを作成すると、権限を設定して、すべてのユーザーが開くことを許可したり、昇格した管理者だけが開いたりすることができます。


最後に、あなたが言及したこと (マウント、アンマウント、および MoveFile の監視) は、既に Windows に組み込まれています。WM_DEVICECHANGE(マウント/アンマウントに) およびFindFirstChangeNotification/ReadDirectoryChangesWまたは NTFS ログを MoveFile 検出に使用できるのに、なぜドライバーを作成しているのかわかりません。

于 2011-05-19T14:14:49.420 に答える
0

起動時にオプションを設定すると、署名されていないドライバーをインストールできます (Google で調べましたが、その方法を思い出せません)。フックを使用してユーザーのアクションを取得することは、決して良い考えではありません。IPC を使用します。IIRC では、CreateService を呼び出すときにデスクトップ フラグ (SERVICE_INTERACTIVE_PROCESS) を設定して、サービスがデスクトップと対話できることを通知できます。USB マウント/umount に関する通知を受け取りたい場合は、システム イベントを使用しないのはなぜですか。 29.aspx)?

于 2011-05-19T14:15:28.583 に答える