PID skipping

This commit is contained in:
Yoshi2 2021-09-19 11:22:50 +02:00
parent 1aa29ccd13
commit eca1b2112b

View file

@ -121,7 +121,7 @@ class Dolphin(object):
self.mem2_start = 0 self.mem2_start = 0
self.mem2_exists = False self.mem2_exists = False
def find_dolphin(self): def find_dolphin(self, skip_pids=[]):
entry = PROCESSENTRY32() entry = PROCESSENTRY32()
entry.dwSize = sizeof(PROCESSENTRY32) entry.dwSize = sizeof(PROCESSENTRY32)
@ -132,14 +132,16 @@ class Dolphin(object):
self.pid = -1 self.pid = -1
self.handle = -1 self.handle = -1
if ctypes.windll.kernel32.Process32First(snapshot, pointer(entry)): if ctypes.windll.kernel32.Process32First(snapshot, pointer(entry)):
if entry.szExeFile in (b"Dolphin.exe", b"DolphinQt2.exe", b"DolphinWx.exe"): if entry.th32ProcessID not in skip_pids and entry.szExeFile in (b"Dolphin.exe", b"DolphinQt2.exe", b"DolphinWx.exe"):
self.pid = entry.th32ProcessID self.pid = entry.th32ProcessID
else: else:
while ctypes.windll.kernel32.Process32Next(snapshot, pointer(entry)): while ctypes.windll.kernel32.Process32Next(snapshot, pointer(entry)):
if entry.th32ProcessID in skip_pids:
continue
if entry.szExeFile in (b"Dolphin.exe", b"DolphinQt2.exe", b"DolphinWx.exe"): if entry.szExeFile in (b"Dolphin.exe", b"DolphinQt2.exe", b"DolphinWx.exe"):
self.pid = entry.th32ProcessID self.pid = entry.th32ProcessID
ctypes.windll.kernel32.CloseHandle(snapshot) ctypes.windll.kernel32.CloseHandle(snapshot)
@ -257,7 +259,8 @@ class Dolphin(object):
if __name__ == "__main__": if __name__ == "__main__":
dolphin = Dolphin() dolphin = Dolphin()
import multiprocessing
if dolphin.find_dolphin(): if dolphin.find_dolphin():
print("Found Dolphin!") print("Found Dolphin!")
@ -265,15 +268,53 @@ if __name__ == "__main__":
print("Didn't find Dolphin") print("Didn't find Dolphin")
print(dolphin.pid, dolphin.handle) print(dolphin.pid, dolphin.handle)
"""pipe = r'\\.\\PIPE\\dolphin-emu.'+str(dolphin.pid)
pipe = r'\\.\\pipe\\WiFiNetworkManagerTask'
print(pipe)
with open(pipe, "r+b") as f:
pass"""
if dolphin.get_emu_info(): if dolphin.get_emu_info():
print("We found MEM1 and/or MEM2!", dolphin.address_start, dolphin.mem2_start) print("We found MEM1 and/or MEM2!", dolphin.address_start, dolphin.mem2_start)
else: else:
print("We didn't find it...") print("We didn't find it...")
print(dolphin.write_ram(0, b"GMS"))
success, result = dolphin.read_ram(0, 8)
print(result[0:8])
print(dolphin.write_ram(0, b"AWA")) import random
success, result = dolphin.read_ram(0, 8)
print(result[0:8]) from timeit import default_timer
start = default_timer()
randint = random.randint
pack = struct.pack
unpack = struct.unpack
write_ram = dolphin.write_ram
read_ram = dolphin.read_ram
print("Testing WinApi method")
for i in range(500000):
value = randint(0, 2**32-1)
write_ram(0, pack(">I", value))
success, result = read_ram(0, 4)
assert unpack(">I", result)[0] == value
print(default_timer()-start)
from multiprocessing import shared_memory
mem = shared_memory.SharedMemory('dolphin-emu.'+str(dolphin.pid))
buf = mem.buf
print("Testing Shared Memory Method")
start = default_timer()
for i in range(500000):
value = randint(0, 2**32-1)
buf[0:4] = pack(">I", value)
result = bytes(buf[0:4])
assert unpack(">I", result)[0] == value
print(default_timer()-start)