2016-11-03 50 views
0

我想嘗試使用Win32_EncryptableVolume類的加密方法對包含OS安裝的邏輯磁盤捲進行加密。在使用這種方法之前,我必須創建一個密鑰來保護這個卷,爲此我有幾個選項,但是如果我想要加密包含操作系統安裝的邏輯磁盤卷,我必須使用ProtectKeyWithTPM方法。ProtectKeyWith Win32_EncryptableVolume類的TPM方法導致異常

當我嘗試調用ProtectKeyWithTPM方法的問題發生,它返回到我下面的堆棧跟蹤:

System.Runtime.InteropServices.COMException (0x800706BE) 
    em System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) 
    em System.Management.ManagementObject.InvokeMethod(String methodName, ManagementBaseObject inParameters, InvokeMethodOptions options) 
    em ListDrivers.BitLocker.callMethod(String method, ManagementObject privateLateBoundObject, ManagementBaseObject inParams) na C:\Users\admin\documents\visual studio 2015\Projects\BitlockerTeste\BitlockerTeste\BitLocker.cs:linha 221 
    em ListDrivers.BitLocker.defineTPM(String id, ArrayList drivers) na C:\Users\admin\documents\visual studio 2015\Projects\BitlockerTeste\BitlockerTeste\BitLocker.cs:linha 149 
    em ListDrivers.Program.<TPMProtection>d__8.MoveNext() na C:\Users\admin\documents\visual studio 2015\Projects\BitlockerTeste\BitlockerTeste\Program.cs:linha 275 
--- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada --- 
    em System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    em System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    em System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    em ListDrivers.Program.<encryptMenu>d__7.MoveNext() na C:\Users\admin\documents\visual studio 2015\Projects\BitlockerTeste\BitlockerTeste\Program.cs:linha 241 

該錯誤僅發生在這個方法中,所有其他Win32_EncryptableVolume方法正常工作,我已經搜查在許多網站都有解決方案,但我沒有找到任何幫助。

我的問題是,當我嘗試用TPM保護音量時,爲什麼會發生這種情況。爲什麼所有其他不使用TPM的保護方法都能正常工作。

編輯:

defineTPM方法:

public static UInt32 defineTPM(string id, ArrayList drivers) 
{ 
    String deviceId = findByDriverLetter(id, drivers); 
    if (deviceId != null) 
    { 
     ManagementObject privateLateBoundObject = returnManagementObjectForDevice(deviceId); 
     ManagementBaseObject inParams = null; 
     return callMethod("ProtectKeyWithTPMandStartupKey", privateLateBoundObject, inParams); 
    } 
    return Convert.ToUInt32(2147942487); 
} 

callMethod方法:

private static UInt32 callMethod(String method, ManagementObject privateLateBoundObject, ManagementBaseObject inParams) 
{ 
    ManagementBaseObject outParams = privateLateBoundObject.InvokeMethod(method, inParams, null); 
    return Convert.ToUInt32(outParams.Properties["ReturnValue"].Value); 
} 
+0

代碼0x800706BE看起來就像是一些通用的錯誤。 「COMException」可能與您調用的區分大小寫的錯誤方法名稱有關嗎?或者你也許必須明確聲明'out'參數? –

回答

相關問題