2013-10-31 8 views
5

Sto avviando un prototipo che include un minifiltro Windows. Ho creato il mio ambiente:Non riesco a interrompere il collegamento al computer di destinazione in modalità debug kernel

  • un bersaglio Virtual Machine (in realtà 3: un Windows 7, 8 e 8.1)
  • una macchina di sviluppo host (che ospita Visual Studio 2013 e HyperV VM)

sono finalmente riuscito a distribuire il mini-filtro di prova al computer di destinazione, ma il mio problema è:

non riesco a rompere il kernel nella macchina di destinazione.

Quando faccio un Costruire e avviare da Visual Studio Debugger, ecco il risultato:

----------------------------------------------------------------------- 
----------------------------------------------------------------------- 
        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 

E quando cerco di rompere, non succede nulla.

Quando mi attaccano direttamente al kernel (utilizzando il menu VS "Debug" -> "Connetti a processo" -> "Kernel debugging" -> "Allega", ottengo questo:

----------------------------------------------------------------------- 
----------------------------------------------------------------------- 
        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... 

Ma ancora una volta ., impossibile da rompere

ho provato:

  • tutti gli host di destinazione (Windows 7, 8 e 8.1) ed ho ottenuto lo stesso risultato (e sì, tutti loro siano configurati correttamente per il debug del kernel)
  • utilizzando la rete, invece di named pipe
  • utilizzando WinDBG invece di Visual Studio

ma ottengo sempre lo stesso risultato: impossibile da rompere questo @ # kernel!

Google non è un mio amico, non sono riuscito a trovare alcun problema simile.

Così ora mi chiedo:

  • potrei essere in realtà non collegato al computer di destinazione, nonostante quello che dice il debugger (ma opere di implementazione)?
  • Potrebbe esserci un problema con HyperV e il debug del kernel?

Qualche idea benvenuta!


Edit: ho fatto un test con una macchina target real invece di una virtuale, e ho lo stesso problema, quindi questo non è relativo a Hyper-V.

risposta

6

ho risolto il mio problema (faccio schifo, dunque sono)

In poche parole, ecco come le due macchine devono essere configurati per il debug del kernel.

A.macchina target (Hyper-V VM)

  • Configurazione per il debug kernel (usando MSCONFIG è il modo più semplice) su COM1 seriale
  • Configurare Hyper-V macchina tubo COM1 ad un condotto di nome (\. \ pipe \ debug per esempio)
ospite

macchina B. Fonte (Hyper-V che ospita il bersaglio)

  • Run WinDBG o VS in modalità amministratore (che è stato il mio primo errore)
  • Connetti a named pipe con esattamente lo stesso nome (\. \ pipe \ debug) (che era il mio secondo errore, ho pensato che il nome della macchina doveva essere effettivo nome del target)

Funziona bene, con una bella integrazione sotto Visual Studio 2013. Grazie a tutti quelli che hanno risposto (nessuno) ... E tutti gli altri che leggono :)