5

Windows ミニフィルターを含むプロトタイプを開始しています。私は自分の環境をセットアップしました:

  • ターゲット仮想マシン (実際には 3: Windows 7、8、および 8.1)
  • ホスト開発マシン (Visual Studio 2013 および HyperV VM をホストする)

ようやくテスト用のミニフィルターをターゲット マシンに展開できましたが、問題は次のとおりです。

ターゲット マシンのカーネルを壊すことができません。

ビルドを作成して Visual Studio Debugger から開始すると、次の結果が得られます。

    -----------------------------------------------------------------------
-----------------------------------------------------------------------
                  Starting New Debugger Session         
-----------------------------------------------------------------------
-----------------------------------------------------------------------

Microsoft (R) Windows Debugger Version 6.3.9600.16384 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

MONTLUC\pascal (npipe WinIDE_01CED6303D19BD92) connected at Thu Oct 31 12:56:31 2013

Microsoft (R) Windows Debugger Version 6.3.9600.16384 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

Waiting for pipe \\montlucw81x64\pipe\dbg
Waiting to reconnect...
[12:56:32:860]: Removing any existing files from the remote driver folder
[12:56:33:121]: Removing any existing files from test execution folder

te.exe "%SystemDrive%\DriverTest\Run\DriverTestTasks.dll" /select:"@Name='DriverTestTasks::_DriverRemoval'" /p:"InfFile=passThrough.inf" /p:"Debug=1" /p:"ImportDriver=1" /p:"RemoveDriver=1" /p:"CertificateFile=package.cer" /p:"PackageGuid={A23BA0FC-7265-4E3C-B99F-1E7A04AD970D}" /rebootStateFile:%SystemDrive%\DriverTest\Logs\DriverTestReboot.xml /enableWttLogging /wttDeviceString:$LogFile:file="%SystemDrive%\DriverTest\Logs\Driver_Removal_(x64)_(possible_reboot)_00060.wtl",writemode=append,encoding=unicode,nofscache=true,EnableLvl="WexStartTest|WexEndTest|WexXml|WexProperty|WexCreateContext|WexCloseContext|*" /runas:Elevated
[12:56:56:926]: Result Summary: Total=1, Passed=1, Failed=0, Blocked=0, Warned=0, Skipped=0
[12:56:57:457]: Removing any existing files from test execution folder

te.exe "%SystemDrive%\DriverTest\Run\DriverTestTasks.dll" /select:"@Name='DriverTestTasks::_DriverPreparation'" /p:"InfFile=passThrough.inf" /p:"Debug=1" /p:"ImportDriver=1" /p:"RemoveDriver=1" /p:"CertificateFile=package.cer" /p:"PackageGuid={A23BA0FC-7265-4E3C-B99F-1E7A04AD970D}" /rebootStateFile:%SystemDrive%\DriverTest\Logs\DriverTestReboot.xml /enableWttLogging /wttDeviceString:$LogFile:file="%SystemDrive%\DriverTest\Logs\Driver_Preparation_(x64)_(possible_reboot)_00060.wtl",writemode=append,encoding=unicode,nofscache=true,EnableLvl="WexStartTest|WexEndTest|WexXml|WexProperty|WexCreateContext|WexCloseContext|*" /runas:Elevated
[12:57:00:437]: Result Summary: Total=1, Passed=1, Failed=0, Blocked=0, Warned=0, Skipped=0
[12:57:00:893]: Removing any existing files from test execution folder

te.exe "%SystemDrive%\DriverTest\Run\DriverTestTasks.dll" /select:"@Name='DriverTestTasks::_RunProcess'" /p:"BinaryPath=rundll32" /p:"Arguments=setupapi,InstallHinfSection DefaultInstall 132 C:\DriverTest\Drivers\passthrough.inf" /p:"ExitCodes=0" /p:"WorkingFolder=%SystemDrive%\DriverTest\Drivers" /p:"LogOutput=1" /rebootStateFile:%SystemDrive%\DriverTest\Logs\DriverTestReboot.xml /enableWttLogging /wttDeviceString:$LogFile:file="%SystemDrive%\DriverTest\Logs\Driver_Install_(x64)_(possible_reboot)_00025.wtl",writemode=append,encoding=unicode,nofscache=true,EnableLvl="WexStartTest|WexEndTest|WexXml|WexProperty|WexCreateContext|WexCloseContext|*" /runas:Elevated
[12:57:03:916]: Result Summary: Total=1, Passed=1, Failed=0, Blocked=0, Warned=0, Skipped=0
[12:57:04:418]: Removing any existing files from test execution folder

te.exe "%SystemDrive%\DriverTest\Run\DriverTestTasks.dll" /select:"@Name='DriverTestTasks::_DriverPostInstall'" /rebootStateFile:%SystemDrive%\DriverTest\Logs\DriverTestReboot.xml /enableWttLogging /wttDeviceString:$LogFile:file="%SystemDrive%\DriverTest\Logs\Driver_Post_Install_Actions_(x64)_(possible_reboot)_00060.wtl",writemode=append,encoding=unicode,nofscache=true,EnableLvl="WexStartTest|WexEndTest|WexXml|WexProperty|WexCreateContext|WexCloseContext|*" /runas:Elevated
[12:57:06:139]: Result Summary: Total=1, Passed=1, Failed=0, Blocked=0, Warned=0, Skipped=0
[12:57:06:564]: Driver Installation summary:
[12:57:06:566]:   Driver Removal (x64) (possible reboot): Pass
[12:57:06:571]:   Driver Preparation (x64) (possible reboot): Pass
[12:57:06:578]:   Driver Install (x64) (possible reboot): Pass
[12:57:06:586]:   Driver Post Install Actions (x64) (possible reboot): Pass

そして、私が壊そうとしても、何も起こりません。

カーネルに直接アタッチすると (VS メニューの [デバッグ] -> [プロセスにアタッチ] -> [カーネル デバッグ] -> [アタッチ] を使用)、次のようになります。

-----------------------------------------------------------------------
-----------------------------------------------------------------------
                  Starting New Debugger Session         
-----------------------------------------------------------------------
-----------------------------------------------------------------------

Microsoft (R) Windows Debugger Version 6.3.9600.16384 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

MONTLUC\pascal (npipe WinIDE_01CED630A522D2F5) connected at Thu Oct 31 12:59:26 2013

Microsoft (R) Windows Debugger Version 6.3.9600.16384 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

Waiting for pipe \\montlucw81x64\pipe\dbg
Waiting to reconnect...

しかし、繰り返しますが、破ることは不可能です。

私は試した :

  • すべてのターゲット ホスト (Windows 7、8、および 8.1) で同じ結果が得られました (はい、それらはすべてカーネル デバッグ用に正しく構成されています)。
  • 名前付きパイプの代わりにネットワークを使用する
  • Visual Studio の代わりに WinDBG を使用する

しかし、いつも同じ結果が得られます: この !@# カーネルを壊すことは不可能です!

Google は私の友人ではありません。同様の問題は見つかりませんでした。

だから今私は疑問に思っています:

  • デバッガーが何を言っているかにかかわらず、実際にはターゲット マシンに接続されていない可能性があります (ただし、展開は機能します)。
  • HyperV とカーネルのデバッグに問題がある可能性はありますか?

どんなアイデアでも大歓迎!


編集:仮想マシンではなく実際のターゲットマシンでテストを行いましたが、同じ問題があるため、これは Hyper-V とは関係ありません。

4

1 に答える 1

6

私は自分の問題を解決しました(私はひどいので、私はそうです)

簡単に言うと、カーネル デバッグ用に 2 台のマシンを構成する方法は次のとおりです。

A. ターゲット マシン (Hyper-V VM)

  • シリアル COM1 でカーネル デバッグ用に構成します (msconfig を使用するのが最も簡単な方法です)。
  • COM1 を名前付きパイプ (\.\pipe\debug など) にパイプするように Hyper-V マシンを構成します。

B. ソース マシン (ターゲットをホストする Hyper-V ホスト)

  • 管理者モードで WinDBG または VS を実行します (これが最初の間違いでした)
  • まったく同じ名前 (\.\pipe\debug) の名前付きパイプに接続します (これは私の 2 番目の間違いでした。マシン名は実際のターゲット名でなければならないと思っていました)。

それは、Visual Studio 2013の下での素晴らしい統合で、うまく機能します。答えてくれたすべての人に感謝します(誰も)...そして読んだ他のすべての人:)

于 2013-11-04T14:06:42.347 に答える