Я пытался создать функцию, которая будет писать файл мини-дамп для данного идентификатора процесса. Пока у меня есть это:
import win32con, win32api, win32file, ctypes
dbghelp = ctypes.windll.dbghelp
def createMiniDump(pid, file_name):
# Adjust privileges.
adjustPrivilege(win32security.SE_DEBUG_NAME)
pHandle = win32api.OpenProcess(
win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ ,
0, pid)
print 'pHandle Status: ', win32api.FormatMessage(win32api.GetLastError())
fHandle = win32file.CreateFile(file_name,
win32file.GENERIC_READ | win32file.GENERIC_WRITE,
win32file.FILE_SHARE_READ | win32file.FILE_SHARE_WRITE,
None,
win32file.CREATE_ALWAYS,
win32file.FILE_ATTRIBUTE_NORMAL,
None)
print 'fHandle Status: ', win32api.FormatMessage(win32api.GetLastError())
success = dbghelp.MiniDumpWriteDump(pHandle.handle, # Process handle
pid, # Process ID
fHandle.handle, # File handle
0, # Dump type - MiniDumpNormal
None, # Exception parameter
None, # User stream parameter
None, # Callback parameter
)
print 'MiniDump Status: ', win32api.FormatMessage(win32api.GetLastError())
return success
Процесс и дескрипторы файла созданы успешно. Однако, вызов MiniDumpWriteDump устанавливает следующую ошибку:
Only part of a ReadProcessMemory or WriteProcessMemory request was completed.
У кого-нибудь есть идеи, почему это происходит?