0

我正在尝试用 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(".", "root\cimv2")
        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://docs.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.

我不确定这是否是代码的含义,或者我的问题是什么以及如何解决它。

提前感谢您的帮助

4

1 回答 1

1

尽管在您的情况下可能不是这种情况,但让我对 VSS WMI 类感到悲伤的一件事是它的体系结构依赖性。在 64 位操作系统上,这不会从 32 位进程运行。确保您的 Python 解释器作为 64 位进程运行。

来自 Win32_ShadowCopy 类文档

注意 此类不适用于 Windows Server 2008 x64 上的 32 位应用程序。要使用 Visual Studio 访问该类,请转到 Project Properties,然后转到 General,然后取消选中 Prefer 32-bit 框。

我希望这就是阻碍你前进的一切。

于 2020-08-16T15:34:03.347 回答