我正在尝试用python编写一些数字取证软件,这意味着我需要一种方法来访问windows上的卷影副本。我正在关注SANS的这篇文章https://www.sans.org/blog/using-volume-shadow-copies-from-python,使用以下代码块。
import win32com.client
def vss_list(self):
wcd = win32com.client.Dispatch("WbemScripting.SWbemLocator")
wmi = wcd.ConnectServer(".", "rootcimv2")
obj = wmi.ExecQuery("SELECT * FROM Win32_ShadowCopy")
return [x.DeviceObject for x in obj]
我的问题是这个函数返回pywintypes.com_error: (-2147217388, 'OLE error 0x80041014', None, None)
。如果我将return语句更改为return obj[0]
,也会发生同样的情况。我试图找到错误代码的解释,我找到的最好的解释是https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants
WBEM_E_INITIALIZATION_FAILURE
2147749908 (0x80041014)
Component, such as a provider, failed to initialize for internal reasons.
我不确定这是不是代码的意思,或者我的问题是什么以及如何解决它
提前感谢的任何帮助
尽管在您的情况下可能不是这样,但VSS WMI类的架构依赖性让我感到悲伤。在64位操作系统上,这不会从32位进程运行。确保您的Python解释器作为64位进程运行。
来自Win32_ShadowCopy类文档。
注意此类不适用于Windows上的32位应用程序服务器2008 x64。若要使用Visual Studio访问类,请转到Project"属性",然后选择"常规",然后取消选中"首选32位"框。
我希望这就是阻碍你的全部。