Python CreateFile не может найти PhysicalMemory

Я пытаюсь получить доступ к физической памяти системы Windows 2000 (пытаюсь сделать это без инструмента дампа памяти). Насколько я понимаю, мне нужно сделать это, используя функцию CreateFile для создания дескриптора. Я использовал более старую версию win32dd, чтобы помочь мне в этом. Другая документация в Интернете указывает на то, что я использую либо "\ Device \ PhysicalMemory", либо "\\. \ PhysicalMemory". К сожалению, я получаю одинаковую ошибку для каждого.

Traceback (most recent call last):
   File "testHandles.py", line 101, in (module)
   File "testHandles.py", line 72, in createFileHandle
pywintypes.error: (3, 'CreateFile', 'The system cannot find the path specified.')

На самом деле, возвращаемый номер ошибки отличается для каждого прогона \\. \ PhysicalMemory == 3 и \ Device \ PhysicalMemory == 2. Просмотр pywin32, win32file, createfile, pyhandle и pywintypes не дал информацию о различных возвращаемых значениях,

Вот мой код Я использую py2exe, чтобы заставить это работать на Windows 2000 (и да, он успешно компилируется). Я понимаю, что у меня также может быть проблема с DeviceIoControl, но сейчас я концентрируюсь на CreateFile.

# testHandles.py

import ctypes
import socket
import struct
import sys
import win32file
import pywintypes

def createFileHandle():

    outLoc = pywintypes.Unicode("C:\\Documents and Settings\\Administrator\\My Documents\\pymemdump_dotPM.dd")
    handleLoc = pywintypes.Unicode("\\\\.\\PhysicalMemory")
    #handleLoc = pywintypes.Unicode("\\Device\\PhysicalMemory")
    placeHolder = 0
    BytesReturned = 0


    # Device =                                              CreateFile(L"\\\\.\\win32dd", GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    #                                                           CreateFile(fileName,                        desiredAccess ,          shareMode ,    attributes , creationDisposition ,      flagsAndAttributes ,                    hTemplateFile )
    #hMemHandle = win32file.CreateFile(handleLoc, GENERIC_ALL, SHARE_READ, None, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, None)
    hMemHandle = win32file.CreateFile(handleLoc, win32file.GENERIC_READ, win32file.FILE_SHARE_READ, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL, None)
    print "hMemHandle: %s" % hMemHandle
    if (hMemHandle == NO_ERROR):
        print "Could not build hMemHandle"
        sys.exit()

    # We send destination path to the driver.
    #if (!DeviceIoControl(hMemHandle, 0x19880922, outLoc, (ULONG)(wcslen(outLoc) + 1) * sizeof(TCHAR), NULL, 0, &BytesReturned, NULL))
    if (ctypes.windll.Kernel32.DeviceIoControl(hMemHandle, 0x19880922, outLoc, 5, NULL, 0, BytesReturned, NULL)):
        print "Error: DeviceIoControl(), Cannot send IOCTL.\n"
    else:
        print "[win32dd] Physical memory dumped. You can now check %s.\n" % outLoc

# Dump memory
createFileHandle()

Спасибо, визитка

1 ответ

Я не верю, что возможно получить доступ к объекту физической памяти из пользовательского режима в Windows. Как подсказывает ваша ссылка win32dd, вам нужно будет сделать это в режиме ядра.

Другие вопросы по тегам